历史上的今天
今天是:2024年08月23日(星期五)
2019年08月23日 | 【STM32F103】中断综述
2019-08-23 来源:eefocus
一、中断内核:

STM32的中断很强大,每个外设都可以产生中断,F103在内核水平上搭载了异常响应系统,系统异常有8个(算上RESET和HardFault也就10个),外部中断有60个,但是根据NVIC(嵌套向量中断控制器,控制整个芯片中断相关的功能),IP(中断优先级寄存器)数组中预留了240个位置(NVIC结构如上图),可见眼光之远,用于扩展,这是STM32F103用不到这么多。
如果以后要找跟内核相关的函数,都存在core_cm3.c和misc.c中,包括NVIC的函数的声明,但是其具体的库函数内容并不是和固件库头文件core_cm3.h一致(不在core_cm3.c),而是放在库函数的misc.c中,这点需要注意。
二、中断优先级的定义和分组:



三、中断编程的顺序:
1、使能中断请求
如何使能,需要配置哪个寄存器?
注意:这里与NVIC中的中断使能寄存器不是等同概念,中断使能可以理解成有2个大门,外设使能(小门,比如串口有发送完成中断,接收完成中断,这两个中断由串口控制寄存器的相关中断使能位来控制)和NVIC(大门,接受请求)。
2、配置中断优先级分组
如何配置,需要配置哪个寄存器?
通过NVIC_PriorityGroup函数。

3、配置NVIC寄存器,初始化NVIC_InitTypeDef;(定义在misc.h中,成员如下)
1-NVIC_IRQChannel:指定中断源(中断类型列表参考STM32F10X.H中已列举给出
)
2-NVIC_IRQChannelPreemptionPriority:抢占优先级(根据分组表和选择来给)
3-NVIC_IRQChannelSubPriority:子优先级(根据分组表和选择来给)
4-NVIC_IRQChannelCmd:使能或者失能(内核使能,相当于上面说的大门,enable或disable)
4、编写中断服务函数
1-中断服务函数名要怎么写?写错了怎么办?
在启动文件
的中断向量表中,将中断函数名称都已经初始化好了,由C语言特点可知,函数的名称对应于函数的地址,但是这些函数的内容都是空的,都是B. (启动文件是汇编程序)表示无限循环,如果自己写了函数,但是写错了,系统就在中断向量表中找不到中断服务函数的入口地址,但是电脑不是人,不会对你写错的函数报错,因为程序有无意义电脑不能识别,它只会自动去系统里执行这个循环空函数,所以自己函数的名称一定与启动文件中的名称相对应。
2-中断服务函数要写在什么地方?
为了编程方便管理,我们可以把程序直接可以写在
中,内核的函数已经给了,如果外设中断函数可以自己继续补充。
四、中断小结
STM32F10X中断的方法还是比较清晰的,和单片机类似,多了一个优先级嵌套和分组的功能,另外要注意一些使用库函数编程的细节即可,后续再通过实验例子来测试各类中断的具体使用方法。
史海拾趣
|
我用VB.net开发一个小程序 有一个teXtboX的输入框 我想让程序在cE6下一点该输入框就跳出输入键盘 该怎么做呢 谢谢… 查看全部问答> |
|
重新写下,急!有能提供1mA电流的芯片吗?精度在1%(10uA)即可!! 我要给测量低温的电阻提供1mA的电流,然后测量其电压确定当前温度电流大于1mA太多的话, 测量低温的电阻会发热,电阻特性就变了,测不准低温,所以最好有能准确提供1mA电流的芯片… 查看全部问答> |
|
想和單片機高手一起討論下這個簡單串口中斷程序的問題所在!!! 我編寫了一個串口中斷匯編程序,不復雜,調試也沒有出現問題,但是就是工作不了,我想和大家討論下究竟是什么錯誤導致它運\行出錯~請大家幫忙... T2CON EQU 0C8H T2MOD EQU 0C9H TR2 BIT T2CON.2 RCAP2L EQU 0CAH RCAP2H EQU 0CBH TH2 EQU 0C ...… 查看全部问答> |
|
3250开发板链接划卡键盘有问题,请解惑 划卡键盘为大元752u。在Ubuntu及XP 下均能正常使用,在开发板上只亮灯,键盘不反应。在Ubuntu下设备号如下:linux:/dev/input/by-id$ lsusb-413c_2003-event-kbd设备ID等相 ...… 查看全部问答> |




