OpenEdv-开源电子网

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

延时函数不稳定,求助

[复制链接]

8

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2015-3-1
在线时间
7 小时
发表于 2015-3-1 17:56:25 | 显示全部楼层 |阅读模式
5金钱
原子哥,我使用了例程里面的 delay_ms(5000);在主函数里面
while(1)
{
    USART_SendData(USART1,i++);
    delay_ms(5000);
}
有的时候延时就差不多正确,有的时候延时就很快,大约几百ms,这是为啥呀?
盼回复。

最佳答案

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

你去看看原子哥那个delay.c文件, 里面fac_us=SystemCoreClock/8000000; SystemCoreClock是72000000,fac_us=SystemCoreClock/8000000=9,fac_ms=1000*fac_us=9000; 而SysTick->Road是只有24位有效,即其装载的最大值为2^24=16777216,而SysTick->LOAD=nus*fac_ms; 即最大的nms=SysTick->LOAD/fac_ms=16777216/9000=1864.135, 所以delay_ms(nms)中的nms不可以超过1864
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-2-17
在线时间
9 小时
发表于 2015-3-1 17:56:26 | 显示全部楼层



你去看看原子哥那个delay.c文件,
里面fac_us=SystemCoreClock/8000000;
SystemCoreClock是72000000,fac_us=SystemCoreClock/8000000=9,fac_ms=1000*fac_us=9000;
而SysTick->Road是只有24位有效,即其装载的最大值为2^24=16777216,而SysTick->LOAD=nus*fac_ms;

即最大的nms=SysTick->LOAD/fac_ms=16777216/9000=1864.135,
所以delay_ms(nms)中的nms不可以超过1864
回复

使用道具 举报

28

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-2-17
在线时间
9 小时
发表于 2015-3-1 18:58:38 | 显示全部楼层
我记得原子那个延时函数delay_ms()的参数最大到1000多过,不可能超过2000,你去看看那个delay_ms()函数具体的定义。
回复

使用道具 举报

8

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2015-3-1
在线时间
7 小时
 楼主| 发表于 2015-3-1 20:16:35 | 显示全部楼层
好的,多谢了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 14:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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