关于【定时器使能】和【中断优先级配置】的顺序问题

2019-07-20 20:31发布

本帖最后由 xiaofang 于 2016-8-26 13:32 编辑

探索者F4开发板。
输入捕获实验,寄存器版。
实验要将定时器5设置为输入捕获模式,在初始化定时器5的时候,程序的最后两步是
使能定时器(TIM5->CR1|=0x01)和配置定时器的中断优先级(MY_NVIC_Init(2,0,TIM5_IRQn,2))。
经过多次实验发现:
1.如果在使能定时器之前先配置优先级,那么SR寄存器显示能捕获到外部的上升沿,
但是定时器从始至终不计数,CNT寄存器一直都是0x0.
2.如果在使能定时器之后再配置优先级,定时器就能完全正常工作。

那么,我想问一下:
1.定时器的使能和优先级配置有确定的先后关系吗?
2.究竟是什么原因造成了这种现象?
3.按照正常思维,应该是先完成对定时器的所有有关配置(包括配置优先级),最后使能定时器才对啊?

如图:第19和20行(图示的情况下是不能正常工作的)。
QQ截图20160826132809.png

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
xkwy
1楼-- · 2019-07-21 02:20
 精彩回答 2  元偷偷看……
xiaofang
2楼-- · 2019-07-21 04:57
 精彩回答 2  元偷偷看……
xkwy
3楼-- · 2019-07-21 10:25
xiaofang 发表于 2016-8-26 16:00
能具体说说“很原子”是指啥吗?

reg |= (0<<x);      这行代码没任何意义
reg &= (0<<x);    这样写是会出严重问题的

以及从来都是手动计算左移位数,这样的代码既不可读又容易计算错误。

其他一些等等吧,

这只是个人意见,每个人都有他的代码特 {MOD},勿怪。

一周热门 更多>