打印

关于STM32Fxxx 的timer CC1 中断的问题

[复制链接]
4566|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
trihook|  楼主 | 2011-3-4 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 trihook 于 2011-3-4 10:43 编辑

系统clock 24mhz, timer3时基 24mz
timer 设定两个事件:  CC1比较事件 5us ; update 事件 500us

100us 时候会定时的把 timer3的CNT值写成 0x0001  (外部uart事件)
500us 的update事件永远不会发生.
在写CNT 成为 0x0001 之前会打开  CC1中断允许标志位:TIM_IT_CC1.
现象是 CC1 没有延时发生, 而是立即就发生.

在开启CC1中断语句同时, 我clear pending TIM_IT_CC1. 就一切正常了.如下语句
        
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);                  
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1 )                 
  TIM3->CNT = 0x0001;

我的问题是, 是为什么操作  TIMx_DIER 中的   CC1IE的同时, 为啥TIMx_SR 中的 CC1IF 会立即变成1.
沙发
trihook|  楼主 | 2011-3-4 11:28 | 只看该作者
在简化下问题

在timer 开启的情况下 操作CC1的中断允许位, 为什么CC1的中断标志位会立即发生.
而不是按照设定的值发生.

使用特权

评论回复
板凳
airwill| | 2011-3-4 21:20 | 只看该作者
呵呵, 很奇怪的问题. 按照驱动库的例子, 一般都是设定好中断后才开启定时器. 没有试过这种条件.

使用特权

评论回复
地板
trihook|  楼主 | 2011-3-9 11:04 | 只看该作者
已经得到ST回复,  原因是因为timer一直是开的, 虽然CC1的中断允许为还没开, 但是CNT到达设定值的时候,pending 位还会出现, 当你想某个周期想enable CC1中断事件. 由于pending已经存在了, 所以就会立即进中断. 所以当每次enable CC1事件之前clear pending  CC1,就OK了

使用特权

评论回复
5
lkl10800139| | 2012-3-23 11:09 | 只看该作者
记下,每次enable CC1事件之前clear pending  CC1,就OK了

使用特权

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

本版积分规则

1

主题

53

帖子

1

粉丝