请选择 进入手机版 | 继续访问电脑版
搜索
12
返回列表 发新帖
楼主: miraclexue

STM32 定时器开关导致延时不准确

[复制链接]
回帖奖励 4 ST金币 回复本帖可获得 2 ST金币奖励! 每人限 1 次(中奖概率 50%)

该用户从未签到

16

主题

87

帖子

0

蝴蝶豆

高级会员

最后登录
2021-3-29
 楼主| 发表于 2018-7-4 16:23:19 | 显示全部楼层
wenyangzeng 发表于 2018-7-4 15:26
既然中断中执行代码大于10us,楼主设置这个10us中断有何意义?

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

使用道具 举报

该用户从未签到

4

主题

99

帖子

6

蝴蝶豆

高级会员

最后登录
2019-8-16
发表于 2018-7-4 17:00:38 | 显示全部楼层
非要从其中选择一个,本人选择2方案。不过建议最好还是换种实现方式
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

3420

帖子

82

蝴蝶豆

社区小助手

最后登录
2023-11-12
发表于 2018-7-4 17:13:11 | 显示全部楼层
本帖最后由 wenyangzeng 于 2018-7-4 17:20 编辑
miraclexue 发表于 2018-7-4 16:23
此定时器主要目的是控制程序反复执行,您暂可不必注意这点,您看我提出的两个解决方案哪个可行呢? ...

何种方案都不应该关闭定时器,只要1个变量保存上次CNT值,与本次CNT比较即可。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

87

帖子

0

蝴蝶豆

高级会员

最后登录
2021-3-29
 楼主| 发表于 2018-7-5 09:53:08 | 显示全部楼层
oceane 发表于 2018-7-4 17:00
非要从其中选择一个,本人选择2方案。不过建议最好还是换种实现方式

感谢指教
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

87

帖子

0

蝴蝶豆

高级会员

最后登录
2021-3-29
 楼主| 发表于 2018-7-5 09:58:18 | 显示全部楼层
wenyangzeng 发表于 2018-7-4 17:13
何种方案都不应该关闭定时器,只要1个变量保存上次CNT值,与本次CNT比较即可。 ...

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

使用道具 举报

该用户从未签到

16

主题

87

帖子

0

蝴蝶豆

高级会员

最后登录
2021-3-29
 楼主| 发表于 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重复运行
配置成单脉冲模式,以上运行逻辑正常吗?我看手册上会有脉冲产生,我没有配置那些,是否会产生什么脉冲波形?(我不要脉冲波形)
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

1628

帖子

5

蝴蝶豆

论坛元老

最后登录
2022-6-7
发表于 2018-7-6 09:03:44 | 显示全部楼层
miraclexue 发表于 2018-7-4 14:23
感谢回复,这里的定时器的作用只是控制程序进行的作用

控制程序进程可以通过其他方式来做嘛,比如状态机
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2021-4-15 11:47
  • 签到天数: 537 天

    [LV.9]

    29

    主题

    2176

    帖子

    127

    蝴蝶豆

    论坛元老

    最后登录
    2023-8-27
    发表于 2018-7-6 10:34:18 | 显示全部楼层

    回帖奖励 +2 ST金币

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

    如果你超过了10us,那么你设想的让这个超过10us的中断处理函数分端执行是不大可能的,因为每次出发了计时器中断,肯定是从中断处理函数的入口开始执行,而不是你执行到了一半的中断处理函数的位置,除非你能在中断处理函数中先做一次入栈,但是你还是很难控制时机
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-3-29 02:44 , Processed in 1.164711 second(s), 35 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表