打印
[STM32F0]

STM32F0 TIM2 32位, 如何直接操作ARR寄存,保证不影响当前计数值?

[复制链接]
3448|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
crazybee|  楼主 | 2015-7-12 22:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我计划用TIM2 产生脉冲,,,每个脉冲宽度实时更新:
count up mode:
1.进入中断后,要调整这一次到下一次中断间隔,这个时候就要直接修改ARR, 却不能有BUFFER,,直接生效。

发现在修改ARR,偶尔会出现CNT当前计数值跳动很厉害,会超过了ARR值,导致退出中断后,就再也不会进入中断了,因为CNT>ARR,且UIF已经为0。。在F1 16模试下,没有遇到这种情况,请问如何保证修改对当然CNT值不产生影响?

//故意注释对ARR操作语句,就不会突然无脉冲输出(每次都可以正常进入中断。。。)
沙发
crazybee|  楼主 | 2015-7-13 10:59 | 只看该作者
查了一下,可能是和程序的优先级有关,,, 为什么直接设置优先无效?IPRn 无变法,在看M3设置    AIRCR                  = 0x05FA0000|(6<<8);
才可以操作优先级,,,但是M0中没有这样的要求吧。。。

使用特权

评论回复
板凳
amanda_s| | 2015-7-14 17:21 | 只看该作者
如果要修改AIRCR寄存器的内容,才需要先写0x05FA到VECTKEY。
修改优先级不用修改这个寄存器吧。而且,可以用库里面的接口函数HAL_NVIC_SetPendingIRQ进行操作。

使用特权

评论回复
地板
airwill| | 2015-7-14 18:44 | 只看该作者
嗯, 这里面有个需要的注意的地方, 建议设置 ARPE: 自动重装载预装载允许位, 避免给 ARR 写入小于 CNT 值时, CNT 无限计数的问题.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

149

主题

800

帖子

5

粉丝