关于TIM更新中断一使能就进入中断的问题

问题

        在ST库中,在TIM_TimeBaseInit()函数中结尾软件置位了UG更新事件来重新加载预分频器和重复计数值,所以导致SR的UIF更新中断标志位置起,导致当一开启IT_UP中断时会立即进入中断

 

解决办法

        先做更新中断标志的清除操作,即清除TIMx->SR寄存器里的UIF标志,然后做定时器更新中断的使能操作。

至于开启相关定时器的指令摆放位置并不严格。

使用下述三种则不会出现一开启定时器就进入中断的问题。

TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除更新中断请求位

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能定时器3更新中断

TIM_Cmd(TIM3, ENABLE);//启动定时器

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

TIM_Cmd(TIM3, ENABLE);

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能定时器3更新中断

TIM_Cmd(TIM3, ENABLE);

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能定时器3更新中断

 

使用一下三种则会出现开启定时器就会进行一次中断问题。

(1)

TIM_Cmd(TIM3, ENABLE);

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能定时器更新中断

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

 

(2)

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能定时器3更新中断

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

TIM_Cmd(TIM3, ENABLE); 

 

(3)

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能定时器更新中断

TIM_Cmd(TIM3, ENABLE);

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

 

若是寄存器操作

        自己用寄存器操作时也会出现这个问题,若不使用 TIMx->EGR |= (u16)1<<0; 计数值和重复计数值无法装载,也会出现立即复位

解决办法:

        在配置好ARR、PSC、RCR后,在使能更新中断TIM_IT_Update之前置位UG产生一个更新事件,然后清除SR的更新中断标志位,最后再使能TIM

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值