打印
[STM32F4]

关于STM32定时器,有一点不是很明白

[复制链接]
787|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hclwj181|  楼主 | 2019-9-27 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32的定时器几乎每个项目中,都会用到,但是对于有些细节的问题,一直感觉搞得不太明白,允许定时器中断的时候,TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_Trigger,ENABLE ); 为什么有的中间参数有触发中断 TIM_IT_Trigger,有的没有,经测试两种初始化模式感觉并无多大区别,所以冒昧的问下,加和不加区别到底在哪里。还有中断服务程序里面也是:
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//Òç³öÖжÏ
        {
                TIM_ClearITPendingBit(TIM5, TIM_IT_Update);

        }
          TIM_ClearITPendingBit(TIM5,TIM_IT_Update);   


if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//Òç³öÖжÏ
        {
                TIM_ClearITPendingBit(TIM5, TIM_IT_Update);

        }


if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//Òç³öÖжÏ
        {
               
        }
TIM_ClearITPendingBit(TIM5, TIM_IT_Update);

也是常见这三种写法,具体哪种写法比较标准比较好,经测试貌似并无区别

使用特权

评论回复
沙发
香水城| | 2019-9-27 15:22 | 只看该作者
定时器是STM32的通用的、被频繁使用的一个外设,用它的人多,真正会用的人似乎不多。就你的问题聊聊,供参考。

第一个问题:TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_Trigger,ENABLE );

这样写的话就使能了定时器更新事件触发事件的中断;当发生更新事件或触发事件时就可以触发中断;

如果你这样写,TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE );即拿掉TIM_IT_Trigger。此时就使能基于定时器更新事件的中断;触发事件不会触发中断。

其实,你最关心的是为什么两种写法你随便用都没感觉到差别。那是因为你测试过程中就没有产生 触发事件。

当定时器工作在从模式时,收到触发信号时就可以产生触发事件,如果相关中断被使能了就可以触发中断。 遗憾的是很多人不太会
使用定时器的主从模式,所以感觉不到触发事件的存在及相关应用。

2、至于中断服务程序的写法。中间的那个写法应该是合理的。检查了相关中断标志位,然后按需要清零。
当然,这个还得结合写代码人的其它具体想法。

使用特权

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

本版积分规则

72

主题

720

帖子

9

粉丝