miraclexue 发表于 2018-7-4 16:23:19

wenyangzeng 发表于 2018-7-4 15:26
既然中断中执行代码大于10us,楼主设置这个10us中断有何意义?

此定时器主要目的是控制程序反复执行,您暂可不必注意这点,您看我提出的两个解决方案哪个可行呢?

oceane 发表于 2018-7-4 17:00:38

非要从其中选择一个,本人选择2方案。不过建议最好还是换种实现方式

wenyangzeng 发表于 2018-7-4 17:13:11

本帖最后由 wenyangzeng 于 2018-7-4 17:20 编辑

miraclexue 发表于 2018-7-4 16:23
此定时器主要目的是控制程序反复执行,您暂可不必注意这点,您看我提出的两个解决方案哪个可行呢? ...
何种方案都不应该关闭定时器,只要1个变量保存上次CNT值,与本次CNT比较即可。

miraclexue 发表于 2018-7-5 09:53:08

oceane 发表于 2018-7-4 17:00
非要从其中选择一个,本人选择2方案。不过建议最好还是换种实现方式

感谢指教

miraclexue 发表于 2018-7-5 09:58:18

wenyangzeng 发表于 2018-7-4 17:13
何种方案都不应该关闭定时器,只要1个变量保存上次CNT值,与本次CNT比较即可。 ...

感谢指教,为减少代码量,本人选择单脉冲模式,在定时器溢出后计数器自动停止计数(硬件自动清除CEN位),在中断最后再打开计数器(使能CEN位),这样可以确保每次都是从0开始计数。
对于定时器此种应用方式,主要是为了程序被中断保护,执行优先级高。

miraclexue 发表于 2018-7-5 15:14:55

oceane 发表于 2018-7-4 17:00
非要从其中选择一个,本人选择2方案。不过建议最好还是换种实现方式

抱歉再打扰一下,您能否讲一下单脉冲模式具体的运作原理?
我的理解,计数器单脉冲模式:
1、计数器开启(cen=1)
2、计数器开始计数
3、计数器溢出中断,同时计数器自动关闭(cen=0,cnt=0),进入中断执行代码2
4、中断代码最后开启计数器(cen=1),接着会从步骤2重复运行
配置成单脉冲模式,以上运行逻辑正常吗?我看手册上会有脉冲产生,我没有配置那些,是否会产生什么脉冲波形?(我不要脉冲波形)

子曰好人 发表于 2018-7-6 09:03:44

miraclexue 发表于 2018-7-4 14:23
感谢回复,这里的定时器的作用只是控制程序进行的作用

控制程序进程可以通过其他方式来做嘛,比如状态机

stm1024 发表于 2018-7-6 10:34:18

miraclexue 发表于 2018-7-4 13:45
感谢回复是发错地方了我在中断中必须关闭定时器,因为代码执行时间要远大于10
...

如果你超过了10us,那么你设想的让这个超过10us的中断处理函数分端执行是不大可能的,因为每次出发了计时器中断,肯定是从中断处理函数的入口开始执行,而不是你执行到了一半的中断处理函数的位置,除非你能在中断处理函数中先做一次入栈,但是你还是很难控制时机
页: 1 [2]
查看完整版本: STM32 定时器开关导致延时不准确