[STM32F0] 笔记之STM32F0优先级问题

[复制链接]
638|0
 楼主| xiaoqi000 发表于 2024-3-31 22:12 | 显示全部楼层 |阅读模式
昨天在配置定时器7的优先级为1的时候,他不能打断优先级为5的外部中断,定时器7中断优先级配置为0的时候,他又能够打断外部中断。有些奇怪,正常来说定时器优先级为1或0的时候都能打断外部中断的啊,所以我在线调试,看看他的一个优先级具体是多少,打开keil查看NVIC的窗口,如图

6307366096f1241f06.png


进去之后我发现定时器7的优先级为64


3900866096f2183dff.png

我代码上TIM7的优先级定义的是5,但是测出的优先级是64,那么64是怎么来的呢?
(十进制)64=(二进制)0100 0000; (十进制)5=(二进制)0000 0101
并且我通过修改TIM7的优先级,如将其改为4,测出的优先级是0.
7399366096f3376453.png

(十进制)4=(二进制)0000 0100 ; (十进制)0=(二进制)0000 0000
按照之前STM32F1的优先级设置的话,设置优先级的寄存器中前四位是可设置的,通过对比刚才设置的5和4,发现低两位被写到设置优先级的寄存器中,查看STM32F0的手册和STM32F1的手册


1149566096f473fa8f.png
发现STM32F1使用了4位中断优先级,STM32F0使用了2位中断优先级,那么开头那个问题:
定时器7的优先级为1的时候,他不能打断优先级为5的外部中断,定时器7中断优先级配置为0的时候,他又能够打断外部中断?


是因为外部中断优先级为5的时候,取低2位,那么实际上设置的优先级就是1,故定时器7的优先级为1的时候,他不能打断外部中断,为0的时候,可以打断外部中断。
因此记录下来,提醒自己在设置优先级的时候先要看看手册上他有几位设置优先级的,之后再设置优先级,以防此现象再次发生!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

821

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部