【STM32】STM32CUBEMX系列教程:HAL库方式的微秒延时函数
程序员文章站
2022-06-08 22:57:13
...
STM32CUBEMX系列教程之HAL库方式的微秒延时函数
标准库一般是使用系统嘀嗒定时器来进行微妙级别的延时,而HAL库官方使用SysTick的地方非常多,改代码容易引起错乱。网上的代码使用定时器进行微秒级别延时(不知道该方式的请自行搜索),总是卡在__HAL_TIM_GET_COUNTER,所以自己实现一个微秒级别延时函数尤为重要。
#define CPU_FREQUENCY_MHZ 72 // STM32时钟主频
void delay_us(__IO uint32_t delay)
{
int last, curr, val;
int temp;
while (delay != 0)
{
temp = delay > 900 ? 900 : delay;
last = SysTick->VAL;
curr = last - CPU_FREQUENCY_MHZ * temp;
if (curr >= 0)
{
do
{
val = SysTick->VAL;
}
while ((val < last) && (val >= curr));
}
else
{
curr += CPU_FREQUENCY_MHZ * 1000;
do
{
val = SysTick->VAL;
}
while ((val <= last) || (val > curr));
}
delay -= temp;
}
}
下一篇: 正则实现最小匹配的开发经验