
你这个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编程的一章说的比较详细,但是也有个别地方说的比较模糊,总之多看些例程就明白了,刚开始总是很纠结的~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)