OpenEdv-开源电子网

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

一个延时函数,看不懂代码的意思,求助

[复制链接]

17

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2015-3-9
在线时间
67 小时
发表于 2015-12-21 15:02:53 | 显示全部楼层 |阅读模式
5金钱
void Delay_ms(uint32_t ms)
{
     volatile uint32_t nCount;
     RCC_ClocksTypeDef RCC_Clocks;
     RCC_GetClocksFreq (&RCC_Clocks);

     nCount=(RCC_Clocks.HCLK_Frequency/10000)*ms;
     for (; nCount!=0; nCount--);
}

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

使用道具 举报

7

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-11-16
在线时间
2 小时
发表于 2015-12-21 15:08:48 | 显示全部楼层
就是根据你设定的数一点一点的倒数,直到数到0了就结束了。
你是说为什么/10000不懂吗?
回复

使用道具 举报

17

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2015-3-9
在线时间
67 小时
 楼主| 发表于 2015-12-21 15:20:13 | 显示全部楼层
回复【2楼】philip5966:
---------------------------------
假如RCC_Clocks.HCLK_Frequency是72mhz,/10000 是什么意思;还有为什么根据这个计算后的ncount去倒计数,就可以获得准确时间
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-12-21 22:17:46 | 显示全部楼层
这个延时函数有问题的吧,不能获得准确的延时时间。写这个代码的人凭什么确定 for (; nCount!=0; nCount--)这一行代码的执行时间就是72m/10000,除非他是根据自己的经验得到的,但是绝对不可能做到准确延时的
开往春天的手扶拖拉机
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-12-22 10:20:42 | 显示全部楼层
这个就是普通的循环查询延时,不过是增加了动态查询CPU时钟速度。如果for循环执行一次循环为10个时钟周期的话,那么这个延时函数执行是基本准确的。特别注意程序使用了volatile禁止了编译器优化,否则程序执行时间会快很多倍。

真心不建议用这种方法延时。
业余程序玩家。
回复

使用道具 举报

17

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2015-3-9
在线时间
67 小时
 楼主| 发表于 2015-12-23 09:16:55 | 显示全部楼层
回复【4楼】zuozhongkai:
---------------------------------
谢谢回复,这代码我也是看的云里雾里
回复

使用道具 举报

17

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2015-3-9
在线时间
67 小时
 楼主| 发表于 2015-12-23 09:17:56 | 显示全部楼层
回复【5楼】ofourme:
---------------------------------
原来这句代码包含了这么多细节,受教了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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