欢迎关注【玩转单片机与嵌入式】公号,回复关键字获取更多免费视频和资料 回复【加群】,【单片机】、【STM32】、【硬件知识】、【硬件设计】、【经典电路】、【论文】、【毕业设计】、【3D封装库】、【PCB】、【电容】、【TVS】、【阻抗匹配】、【资料】、【终端电阻】、【Keil】、【485】、【CAN】、【振荡器】、[USBCAN]、【PCB】、【智能手环】、【智能家居】、【智能小车】、【555】、【I2C】、【华为】、【中兴】,等……
问题
在进行开发时,程序中常常需要延时一段时间,很多人都会使用Delay(N), N为需要延时的时间(通常为毫秒级)。通常实现Delay(N)函数的方法为:
对于STM32系列微处理器来说,执行一条指令只有几十个ns,进行for循环时,要实现N毫秒的x值非常大,而且由于系统频率的宽广,很难计算出延时N毫秒的精确值。
针对STM32微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用Delay(N)。
解决方法
Cortex-M3的内核中包含一个SysTick时钟。SysTick为一个24位递减计数器, SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0时,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能)。
在STM32的应用中,使用Cortex-M3内核的SysTick作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对N减一,在Delay(N)函数中循环检测N是否为0,不为0则进行循环等待;若为0则关闭SysTick时钟,退出函数。
这样的好处就是:延迟时间将不随系统时钟频率改变。
源代码
初始化相关模块 :
说明:外部晶振为8MHz,系统时钟为72MHz, SysTick的频率9MHz,SysTick产生1ms的中断

中断处理 :
注意:全局变量TimingDelay必须定义为volatile。
延时代码:
TimingDelay = nTime; // 读取延时时间
</span><span style="font-size:17px;" data-v-2505e99a> while</span><span style="font-size:17px;" data-v-2505e99a>(TimingDelay != </span><span style="font-size:17px;" data-v-2505e99a>0</span><span style="font-size:17px;" data-v-2505e99a>); </span><span style="font-size:17px;" data-v-2505e99a>// 判断延时是否结束 </span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> SysTick_CounterCmd(SysTick_Counter_Disable); </span><span style="font-size:17px;" data-v-2505e99a>// 关闭SysTick计数器</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a> </span><span style="font-size:17px;" data-v-2505e99a> SysTick_CounterCmd(SysTick_Counter_Clear); </span><span style="font-size:17px;" data-v-2505e99a>// 清除SysTick计数器</span></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>}</span></p><p data-v-2505e99a data-v-5b474d2a><strong style="font-size:17px;" data-v-2505e99a>应用代码</strong></p><p data-v-2505e99a data-v-5b474d2a><span style="font-size:17px;" data-v-2505e99a>
讯享网
关注本公号,在后台回复【STM32】可以获取更多关于STM32单片机的相关视频和教程资料。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/159670.html