一个菜鸟的STM32寄存器学习笔记4_外部中断

一个菜鸟的STM32寄存器学习笔记4_外部中断

ID:38144416

大小:649.89 KB

页数:6页

时间:2019-05-27

一个菜鸟的STM32寄存器学习笔记4_外部中断_第1页
一个菜鸟的STM32寄存器学习笔记4_外部中断_第2页
一个菜鸟的STM32寄存器学习笔记4_外部中断_第3页
一个菜鸟的STM32寄存器学习笔记4_外部中断_第4页
一个菜鸟的STM32寄存器学习笔记4_外部中断_第5页
资源描述:

《一个菜鸟的STM32寄存器学习笔记4_外部中断》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、看了一下《STM32不完全手册》上的内容发现从按键后面的内容基本上都要涉及到中断。所以决定先把中断搞定。以前使用中断很是混乱基本都是对着示例程序改改实现功能就好了。但从回过头来看看发现中断还是很复杂的。这里先把我学习的中断的相关知识梳理一下:1.中断是CM3核自带的。所以中断要在《CM3权威指南》中阅读。《STM32中文参考手册》里介绍的不全。2.CM3内核中规定的可编程中断源有240个,但STM32F103只使用了前68个,这68个中断源和编号在STM32F10X.H文件170行有定义3.STM32中断和51中断不同的地方有:a)STM32多了一个中断分组的概念,这个分组操作在程序中建议

2、只操作一次就可以。中断分组用来决定抢占优先级和子优先级的取值范围。b)STM32的每个中断源都有两种优先级,抢占优先级和子优先级。这两个优先级的取值范围由中断分组决定。抢占优先级用来中断低抢占优先级的程序。子优先级用来在抢占优先级相同时决定谁先执行。这两个优先级就好比汽车在过收费站,在汽车过收费站时有两个参数决定你什么时候过。第一你的汽车是什么类型的车,第二你前面还有多少车。第一个属性就好比抢占优先级。警察的车比普通的车的优先级高就能插到前面先过收费站。第二个属性好比子优先级。都是普通的小车说明抢占优先级都一样,谁先过就看你现在排队排的几号。4.中断服务函数是根据函数名来决定的,这个函数名

3、是在.s的启动文件中定义好的。5.其他的和51就没什么差别。初始化,等待触发中断,进中断服务函数,执行完中断函数清除中断标志,返回继续执行其他程序。下面就根据外部中断实现一个按键点亮LED按照以下步骤进行1.中断初始化a)设置中断分组SCB->AIRCRb)使能外部中断NVIC->ISERc)对外部中断的优先级设置NVIC->IP2.按键初始化a)按键时钟使能RCC->APB2ENRb)复用时钟使能RCC->APB2ENRc)按键相关IO口初始化GPIOB->CRLd)把按键引脚和对应的外部中断线连接AFIO->EXTICRe)外部中断使能EXTI->IMRf)设置触发方式EXTI->RT

4、SR3.LED初始化4.编写中断服务函数第一步中断初始化这里先举个例子来理解中断分组和中断源,抢占优先级,子优先级的关系比如一个公司有68个人,先给这68个人编了0~68的编号(表示68个可编程中断源,如串口中断,外部中断0,外部中断1等)现在公司要求每人都要被编个号,这个编号分成两个部分字母部分和数字部分,编号的大小决定了这个人在公司的地位。并规定编号越小地位越高。但是这个编号的取值范围是根据公司的规章制度决定的。比如规章制度上规定了字母编号只能在2^3(2的3次方)以内(即只能是A~H),数字编号只能是2^1以内(即0或者1)。(表示中断分组,字母是抢占,数字是子优先级)又有一个规定在

5、打饭时如果字母大的在打饭但字母小的也来打饭了则字母大让字母小的打完了自己在继续打饭。如果字母相同的一起来打饭,就看谁的数字编号小谁就打饭。但是如果字母相同但数字编号大的先打饭,那么后来的编号小的不能插到编号大的前面打饭。换句话说就是字母的等级比编号的等级高,字母小的可以插队到字母大的前面。但是相同字母的不能根据数字编号大小来插队。例如:现在有几个人编号是这样的个人编号工作编号0A003A015B017C0165B001.比如个人编号为7号的在打饭,3号和0号一起去了,那么7号要让3号和0号插队,由于3号数字编号比0号的高说以要让0号在前3号在后,7号在最后。3.现在5号来了5号的编号字母比

6、0和3小比7大则5号插队到7号之前。3.65号也来了,65号字母比7号小,和5号一样。65号的数字编号比5号的小但是65号还是排在7号之前5号之后。总结起来就是:1.判断一个中断谁先执行先根据抢占优先级来判断是否比现在执行的小。是则中断当前执行抢占优先级小的中断2.两个相同的抢占优先级同时到来,谁的子优先级小就执行谁3.两个相同的抢占优先级一个先执行另一个后执行,后执行的不管子优先级高和低都不能中断先执行的那个。中断分组中断分组是用啦规定IP中抢占优先级和子优先级所占的位位数的IP是一个数组共240个元素,每个元素8bit表示一个中断源。STM32中用到了前面的68个我们通过寄存器SCB-

7、>AIRCR中的8~10位来中断分组根据上表的中断分组我们有以下结论黄色表示抢占优先级蓝色表示子优先级组0组1组2组3组4注:这里的中断分组是对IP寄存器中的所有元素都适用的。IP[0]是这样,IP[68]也是这样,且中断分组一经设置尽量不要修改在程序中设置的就是SCB->AIRCR从上面的描述中这个寄存器需要写入访问钥匙才能操作所以在程序中的语句就是SCB->AIRCR&=0X05FAF8FF//清除分组SCB->AI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。