OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3677|回复: 2

原子哥的延时函数如果被中断会出现问题

[复制链接]

6

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-3-9
在线时间
18 小时
发表于 2016-5-13 17:33:11 | 显示全部楼层 |阅读模式
2金钱

        原子哥的延时函数是基于systick设计的,如果在运行中被中断打断,在中断中再调用延时函数,会导致延时出乱,当中断返回时systick的值已经被中断中的延时函数改变了,导致延时错误。
我是通过这样一个例子进行测试的,在main函数里跑一个500ms间隔的流水灯,设计一个传感器DATA_READY的引脚触发中断,在中断中通过模拟IIC读取传感器数据,模拟IIC会调用延时函数,最终导致流水灯基本上是常量了,经过检查应该就是延时出乱惹的祸





最佳答案

查看完整内容[请看2#楼]

延时用滴答定时器来实现的,每次调用延时的时候会将滴答定时器的计数值清零,开始计够指定的个数(也就是延时),你还没延时结束就进入中断再次调用延时 函数,就会将上次还没结束的延时的计数值清零,上一次的延时肯定会被破坏。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-5-13 17:33:12 | 显示全部楼层
延时用滴答定时器来实现的,每次调用延时的时候会将滴答定时器的计数值清零,开始计够指定的个数(也就是延时),你还没延时结束就进入中断再次调用延时 函数,就会将上次还没结束的延时的计数值清零,上一次的延时肯定会被破坏。
回复

使用道具 举报

6

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-3-9
在线时间
18 小时
 楼主| 发表于 2016-5-14 17:26:25 | 显示全部楼层
zuozhongkai 发表于 2016-5-13 17:33
延时用滴答定时器来实现的,每次调用延时的时候会将滴答定时器的计数值清零,开始计够指定的个数(也就是延 ...

我说的就是这个意思,只是说有没有比较好的方法能够解决这个问题呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 06:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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