stm32LL库延时函数
时间: 2025-02-21 07:23:33 AIGC 浏览: 119
### STM32 LL 库中的延时函数实现
在STM32的LL(Low-Level)库中,提供了多种方式来实现精确的延时功能。通常情况下,开发者会利用SysTick定时器来进行简单的软件延时操作。
对于基于LL库的应用程序而言,可以调用`HAL_Delay()`替代方案即`LL_mDelay()`或`LL_uDelay()`这两个宏定义用于毫秒级和微秒级别的延迟[^1]。然而需要注意的是,在某些版本的LL库中可能不会直接提供这些高级别的封装接口;此时则需手动配置并启动SysTick计数器完成自定义延时逻辑。
下面是一个使用LL库通过SysTick实现延时的具体例子:
```c
#include "stm32f4xx_ll_bus.h"
#include "stm32f4xx_ll_rcc.h"
#include "stm32f4xx_ll_system.h"
#include "stm32f4xx_ll_utils.h"
// 初始化系统时钟, 设置AHB分频因子等.
void SystemClock_Config(void);
/* 定义全局变量 */
uint32_t uwTick;
/**
* @brief SysTick中断处理函数
*/
void SysTick_Handler(void)
{
uwTick++;
}
/**
* @brief 毫秒级别延时函数
* @param nTime: 需要等待的时间(ms)
*/
void delay_ms(uint32_t nTime)
{
uint32_t tickstart = uwTick;
uint32_t wait = nTime;
/* 添加一个小偏移量以补偿计算误差 */
if (wait < HAL_MAX_DELAY){
wait += (uwTick & 0xFFFFFF);
}
while ((uwTick - tickstart) < wait){}
}
int main(void)
{
/* 初始化硬件资源 */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/* 启动systick定时器 */
if (LL_SYSTICK_IsActiveCounterFlag() == RESET) {
LL_SYSTICK_EnableIT(); // 使能SYSTICK中断
LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK_DIV8); // HCLK/8 as SYSTICK clock source
LL_SYSTICK_SetReload(9999); // Set reload value for ~1ms per interrupt at 8MHz
LL_SYSTICK_Start(); // Start counting down from the reload value
NVIC_SetPriority(SysTick_IRQn, 0x0F); // Set priority of systick interrupt to lowest level
}
/* 主循环 */
while (1) {
// 调用延时函数
delay_ms(1000); // Delay for one second
// 用户代码...
}
}
```
上述代码展示了如何初始化SysTick以及创建一个基本的毫秒级延时函数。这里的关键在于正确设置重装载值以便于达到所需的延时时长,并确保每次进入新的延时期间都能准确地更新时间戳[uwTick]。
阅读全文
相关推荐




















