|
在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--; } } } |
有没有大佬知道这个电路输出为什么只有1V多?按数据手册接的,设置外部输出,输出值也不对
有没有大佬有1602的HAL库驱动
stm32 spi从机实现bissc通信(在线等)
stm32 定时器外部时钟1的TI1FP1及TI2FP2的设置问题
STM32F1定时器中触发信号TRC的来源及选择配置是怎么样的
输入捕获测频率返回异常?
STM32F103 bug
怎么将keil工程更换为vscode工具链?
HAL_UART_Receive_IT不管设置size是多少,我串口一次性发4个字符,最后保存在buffer的也只有一个元素
Error in final launch sequence: Failed to execute MI command: target remote localhost:61234
微信公众号
手机版
首先,你说的情况是存在的,1ms延时可能变成2ms,准确地讲是可能变成接近2ms,永远到不了2ms这个极限。
ST库函数里一般将systick 计数器的分辨率设置为1ms,换言之,我们就得接受1ms内的误差。
具体到这里,代码在这个地方加1是为了确保至少1ms的延迟,结合上面的分析,误差也不会大过1ms.
当然,这里不考虑其它抢占、堵塞等问题。
最后,这个延时函数不是一成不变的,我们可以根据自己需求调整分辨率和自行组织实现代码,包括上面
提到的加1操作。