
在stm32f1xx_ll_utils.c中提供的延时函数,以下标红语句为什么要多加1呢?延时1ms不就变成2ms了吗? void LL_mDelay(uint32_t Delay) { __IO uint32_t tmp = SysTick->CTRL; /* Clear the COUNTFLAG first */ /* Add this code to indicate that local variable is not used */ ((void)tmp); /* Add a period to guaranty minimum wait */ if (Delay < LL_MAX_DELAY) { Delay++; } while (Delay) { if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) != 0U) { Delay--; } } } |
STM32F103RET6 FLASH擦除失败问题
stm32编码器模式计数问题
关于ASM330LHH TR调试中的问题
STM32会存在单个IO口坏掉的情况吗?
STM32的DCode bus是连接到bus matrix的吗?参考手册描述和图片是不符吗?
stm32ide怎么正确的导出项目
STM32F105RBT6 2025年 ROSH REACH 报告
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
你好,我的setting里面设置都没有问题。但是显示failed download cortexm3
STM32F103C8出現找不到'STM32100B_EVAL/stm32100b_eval.h' file not found
首先,你说的情况是存在的,1ms延时可能变成2ms,准确地讲是可能变成接近2ms,永远到不了2ms这个极限。
ST库函数里一般将systick 计数器的分辨率设置为1ms,换言之,我们就得接受1ms内的误差。
具体到这里,代码在这个地方加1是为了确保至少1ms的延迟,结合上面的分析,误差也不会大过1ms.
当然,这里不考虑其它抢占、堵塞等问题。
最后,这个延时函数不是一成不变的,我们可以根据自己需求调整分辨率和自行组织实现代码,包括上面
提到的加1操作。