delay_xms函数
/**********************************************************/
该函数仅在没用到 OS 的时候使用,用来延时指定的 ms,其参数 nms 为要延时的毫秒数。该函数代码如下:
//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为 Hz,nms单位为 ms
//对 168M条件下,nms<=798ms
void delay_xms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD 为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
此部分代码和5.1.3节的delay_us(非OS版本)大致一样,但是要注意因为LOAD 仅仅是
一个 24bit的寄存器,延时的ms数不能太长。否则超出了 LOAD的范围,高位会被舍去,导致
延时不准。最大延迟 ms 数可以通过公式:nms<=0xffffff*8*1000/SYSCLK 计算。SYSCLK 单
位为Hz,nms的单位为 ms。如果时钟为168M,那么 nms的最大值为798ms。超过这个值,建
议通过多次调用delay_xms实现,否则就会导致延时不准确。
很显然,仅仅提供delay_xms函数,是不够用的,很多时候,我们延时都是大于798ms的,
所以需要再做一个 delay_ms函数,下面将介绍该函数。
/**********************************************************/
【立创商城】STM32F103CBT6 托盘 https://item.szlcsc.com/8796.html |