硬件平台: stm32f407ve
软件平台: win10 (OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.18363 N/A Build 18363)
Keil5 5.26.2
HAL库版本: 2.14.0(目前下载的最新的)
中断这个部分需要参考中文手册和权威指南。
这里我还是提一下NVIC这个东西,全称是Nested vectored interrupt controller,即嵌套向量中断控制器。这个器件是用来管理stm32所有中断的(在现实生活中,可以类比于电信运营商,运营商不给你电话的权限,那你的电话是打不出去的),NVIC不允许这个中断能触发中断,那么不管这个中断如何设置,或者怎样触发,都不会引起cpu的反应(中断响应)。
所以,我们的程序中必然要设置NVIC的部分,之后要设置的所有的中断,都应该注意这个NVIC的设置部分,NVIC设置比较简单,只有中断优先级和中断使能就可以。到底哪个中断先响应或者抢占其他中断这个也是NVIC的管理范畴。
Stm32f4中断的优先级比较特殊,它总共只能设置16级中断,数字越小,优先级越高。(arm芯片在设计的时候,是可以支持更多的优先级(128级或256级)的,但是更多的优先级意味着更复杂的中断优先级管理电路,更复杂的逻辑,更大的功耗,stm32在设计的时候做了取舍,而且基本上来讲,16个优先级中断还是能满足大部分的应用了)。
16级中断只需要4个位就可以满足,4个(二进制)位就能表示16个数,在设置优先级的部分就只需要设置中断优先级寄存器的高4位就可以了,低4位无效(为什么选高4位,可以参考权威指南手册,是st公司考虑程序兼容的问题)。
Stm32f4系列还可以把这个优先级分为抢占优先级和响应优先级,他们两个的总和还是16.
我的程序在HAL_init初始化了中断优先级的分配
这里有详细的说明,我们的程序设置的是16级抢占优先级。
NVIC_PRIORITYGROUP_0: 0 bits for preemption priority 没有抢占优先级
4 bits for subpriority 16级响应中断
NVIC_PRIORITYGROUP_1: 1 bits for preemption priority 2级抢占中断
3 bits for subpriority 8级响应中断
NVIC_PRIORITYGROUP_2: 2 bits for preemption priority 4级抢占中断
2 bits for subpriority 4级响应中断
NVIC_PRIORITYGROUP_3: 3 bits for preemption priority 8级抢占中断
1 bits for subpriority 2级响应中断
NVIC_PRIORITYGROUP_4: 4 bits for preemption priority 16级抢占优先级
0 bits for subpriority 没有响应优先级
最后,就是中断处理函数
中断处理函数的原则:
在满足功能的情况下,应该越快越好,不得阻塞,不得调用获取信号量或者锁之类的引起阻塞的函数。
没有返回值,没有参数(这基本是所有中断函数的特点)。
尽量不使用printf函数,这个也是会引起阻塞的
要清除中断标志
我们的中断处理比较简单:
翻转led,因为按键是机械形变,所有会造成机械抖动,在电信号的部分产生抖动信号,所以实际按键的时候,并不是按一下,翻转一下led,有可能等保持不变,或者变化很多次。这都是电路抖动引起的,具体的话可以参考一下消抖部分(大部分都是延时处理,因为我觉得中断应尽量的快,就不使用别人的延时了,我也就不演示了哈,后期可以使用定时器去定时扫描按键的部分,讲到定时器的时候,我们说一下这个部分)。
github的工程源码:
https://github.com/zhaozhi0810/stm32f407_hal_keil5
上一篇:No ULINK2/ME Device found stm32f103 程序无法下载
下一篇:6. Stm32f407 key中断方式示例
推荐阅读最新更新时间:2024-11-16 22:12
设计资源 培训 开发板 精华推荐
- LTC3119HFE 3.3V、400kHz 宽输入稳压器的典型应用电路
- 可校时的时钟
- LT6656BIDC-3.3、3.3V 电压基准作为微功率稳压器的典型应用
- LT3905 的典型应用 - 具有 APD 电流监视器的升压型 DC/DC 转换器
- LTM8053IY 0.97Vout 3.4 至 40Vin 降压转换器的典型应用电路,具有扩频功能
- LTC2946IMS 宽范围 -4V 至 -500V 负电源、电荷和能量监视器(10kHz I2C 接口)的典型应用
- ip2161快充协议验证降压验证板
- 使用 NXP Semiconductors 的 TDA8928J 的参考设计
- I2S麦克风+I2S喇叭模块
- 具有 5V 输出的 LT1074HVIT7 正负转换器的典型应用