//对72M条件下,nms<=1864 void delay_ms(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; //清空计数器 } void Delay_ms(u16 nms) { u16 i; for(i=0;i<nms;i++) delay_ms(1); }
时间: 2024-04-16 20:29:47 浏览: 113
cython_nms.cpython-37m-x86_64-linux-gnu.so
这段代码是一个延时函数的实现,用于延时指定的毫秒数。它使用了系统滴答定时器(SysTick)来实现延时功能。函数`delay_ms`接收一个参数`nms`,表示要延时的毫秒数。首先,将参数`nms`乘以一个变量`fac_ms`,然后将计算结果加载到SysTick的LOAD寄存器中,作为倒计时的值。然后,清空计数器的值和控制寄存器的值,开始倒计时。在倒计时过程中,程序会不断读取SysTick的控制寄存器的值,并判断倒计时是否完成。当倒计时完成时,关闭计数器,并将计数器的值清零。函数`Delay_ms`是对`delay_ms`函数的封装,用于延时指定的毫秒数。它通过循环调用`delay_ms`函数一次延时1毫秒的方式来实现延时功能。
阅读全文