本帖最后由 snakeemail 于 2022-10-13 17:35 编辑
1. systic作为os的时基,os在这里切上下文。另外hal库的HAL_Delay,默认也要用systic。
2. 不论有os,还是没有os,都需要HAL_Delay和 HAL_GetTick(void)这两个函数。
3. 学习硬汉的ucosIII,发现要单独把time7作为HAL_Delay的时基。我又是103,不想再学习time7.
我的解决方法:
直接读systic的cnt寄存器,连systic中断都不用要了。再加上linux的一段宏,解决卷绕问题。
请大家看看,有没有纰漏。谢谢。
[C] 纯文本查看 复制代码 #define time_before(unknown, known) ((int32_t)(unknown) - (int32_t)(known)<0)
uint32_t HAL_GetTick(void)
{
return SysTick->VAL;
}
void HAL_Delay(uint32_t Delay)
{
uint32_t ulTimeout;
ulTimeout = HAL_GetTick() + Delay;
while (1)
{
if (time_before(HAL_GetTick(), ulTimeout))
{
}
else
{
return;
}
}
}
|