欢迎来到天天文库
浏览记录
ID:40157356
大小:179.01 KB
页数:5页
时间:2019-07-23
《STM32精确延时》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、STM32精确延时的实现方法前面用STM32的GPIO模拟液晶驱动时序时遇到一个问题,就是怎样产生一段较为精确的延时。通常产生一小段延时的方法就是利用一个递增或者递减循环进行软件延时。例:voiddelay(void){inti="0x0ff";while(i--);}我在使用MPLABIDE进行PIC单片机的开发时,MPLAB提供了一个Watch(跑表)功能,可以很方便的查看一个函数或一段代码的运行时间,利用这个功能就可以很容易的编写能产生精确延时的代码。而据我目前了解的情况,不管是IAR还是RealViewMDK都没有提供类似的功能,这样就不能像上例那样来获得较
2、为精确的延时了。有人说了,可以用定时器中断的方法来产生精确延时,一点没错,不过在STM32中还可以采用更简单的方法来产生精确延时,那就是利用Cortex系统定时器—SysTick。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。SysTick的
3、最大使命,就是定期地产生异常请求,作为系统的时基。SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。SysTick是一个24位的倒数定时器,当计数值减到0时,将从RELOAD寄存器中自动重装载定时初值,只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。用SysTick产生精确延时的方法如下:1、首先对SysTick进行设置voidSysTick_Configuration(void){/*ConfigureHCLKcl
4、ockasSysTickclocksource*/SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//系统时钟8分频/*SysTickinterrupteach1000HzwithHCLKequalto72MHz*/SysTick_SetReload(9000);//周期1ms/*EnabletheSysTickInterrupt*/SysTick_ITConfig(ENABLE);//打开中断}2、延时函数voidSysTick_Delay(u32nTime){/*EnabletheSysTickCount
5、er*/SysTick_CounterCmd(SysTick_Counter_Enable);//允许计数TimingDelay=nTime;while(TimingDelay!=0);/*DisableSysTickCounter*/SysTick_CounterCmd(SysTick_Counter_Disable);//禁止计数/*ClearSysTickCounter*/SysTick_CounterCmd(SysTick_Counter_Clear);//计数器清0}3.中断函数voidSysTickHandler(void){TimingDelay_De
6、crement();}4.中断调用函数voidTimingDelay_Decrement(void){if(TimingDelay!=0x00){TimingDelay--;}}利用以上几个函数就能产生精确延时了,使用时通过调用SysTick_Delay(u32nTime)函数来设置延时时间,这里提供一个产生秒延时的程序供大家参考。附上效果图,大家看完不要忘了“顶一下”啊!
此文档下载收益归作者所有