C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算?CPU晶振频率11。05

C语言延时程序中,延时时间是如何计算出来的. (假如我想延时1s该如何计算?CPU晶振频率11。05,第1张

你这个110592是匹配波特率所用的晶振,机器周期只是约等于1us。首先你要延时多长时间,us级别的必须使用汇编,C误差很大,10-100us级别的可以用C控制,单必须考虑C出栈入栈时间。ms以上的用时间除以机器周期(除以你则个1us是不行的,误差大)。另外,看着你好像用的是keil,keil里边单步调试里边不是有时间吗,你可以看一下算算CPU空跑的次数,很简单。

systick定时器有两个可选的时钟源,一个是外部时钟源(STCLK,等于HCLK/8),另一个是内核时钟(FCLK,等于HCLK)。假若你选择内核时钟,并将HCLK频率设置为72MHz的话,系统时钟周期为1/(72M);systick有一个24位的递减计数器,每个系统时钟周期计数器值减一,那么当计数器减到零时,时间经过了:系统时钟周期计数器初值。当你将计数器初值设为72000时(有些例程里面设为71999,其实没什么影响,误差极小),当计数器值减到0时经过了1/(72M)72000=0001s,即1ms。你可以看一下芯达STM32的入门教程和《ARM Cortex-M3权威指南》的相关章节,里面关于systick编程的一章说的比较详细,但是也有个别地方说的比较模糊,总之多看些例程就明白了,刚开始总是很纠结的~

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12183560.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存