OpenEdv-开源电子网

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

STM32F103 延时函数不准的问题

[复制链接]

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-5-8
在线时间
17 小时
发表于 2020-4-17 15:35:08 | 显示全部楼层 |阅读模式
1金钱
  1. void SysTick_TimerDelayMsInit(void) {
  2.         SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  3. }

  4. /* 毫秒延时函数 */
  5. void DelayMs(__IO uint16_t hwMill)         {
  6.         uint32_t wTemp;
  7.        
  8.         SysTick->LOAD = (uint32_t)hwMill * 9000;
  9.         SysTick->VAL = 0x00;           
  10.         SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ;         
  11.         do {
  12.                 wTemp = SysTick->CTRL;
  13.         }
  14.         while(wTemp & 0x01 && !(wTemp & (1 << 16)));
  15.         SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;      
  16.         SysTick->VAL = 0X00;      
  17. }

  18. /* 微秒级别延时函数 */
  19. void DelayUs(__IO uint32_t wMicro) {
  20.         uint32_t wTemp;
  21.        
  22.         SysTick->LOAD = wMicro * 9;                    
  23.         SysTick->VAL = 0x00;         
  24.         SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ;        
  25.         do {
  26.                 wTemp = SysTick->CTRL;
  27.         }
  28.         while(wTemp & 0x01 && !(wTemp & (1 << 16)));   
  29.         SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;      
  30.         SysTick->VAL = 0X00;      
  31. }
复制代码


调用DelayMs(__IO uint16_t hwMill) 毫秒延时,当时间超过1000后,延时缩短,1000以内是正常的,请问是什么原因导致的啊?溢出了吗 12.jpg

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-4-17 17:23:14 | 显示全部楼层
看着有点像原子延时函数的方法,原子的延时函数形参有范围限制
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2020-4-17 18:59:56 | 显示全部楼层
systick那个延时 毫秒只能延时1800多毫秒 计数器计数有限 再长就不行了 可以用循环反复调用1000ms的程序
回复

使用道具 举报

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-5-8
在线时间
17 小时
 楼主| 发表于 2020-4-17 21:06:19 | 显示全部楼层
babyrabbit 发表于 2020-4-17 18:59
systick那个延时 毫秒只能延时1800多毫秒 计数器计数有限 再长就不行了 可以用循环反复调用1000ms的程序

好的,非常感谢你的建议,我以为是代码问题呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 10:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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