使用HAL库,就有精确的MS延时,可以使用CubeMX软件生成工程
如果使用标准库,那就只有自己写延时了
HAL库有精确到毫秒的延时HAL_Delay()
它是利用SYSTICK实现的
可以使用hal库
HAL_Delay 延时
固件库中是没有延时函数的,但是可以使用滴答定时器或者是外设定时器进行计时延时,比较精确的。一下是407上的寄存器版本延时函数。
void delay_us(u32 us){ SysTick->CTRL &=~(0x1<<2); //选择时钟(外部的时钟) SysTick->LOAD = 21*us; //写入自动重装载值 (21/21000000 = 1us) SysTick->VAL=0; //清空当前数值寄存器 SysTick->CTRL |=(0x1<<0); //打开定时器开始递减计数 while((SysTick->CTRL & (1<<16))==0); //等待当前数值计数器递减到0 SysTick->CTRL &=(0x1<<0); //等待完成以后一次滴答计时结束关闭定时器}
hal 库里面有延时函数,HAL_Delay() 延时单位是 ms。
hal 库中自带一个timer 实现的,没有RTOS 的话,hal 延时就是用的 systick 时钟
参考这一片文章,有人分析过:
//www.icxbk.com/article/detail?aid=284
HAL库里面有个HAL_Delay函数用于延时