STM32F429IGT6 SYSTick 180MHZ用HAL库写延时1MS及1US代码
时间: 2024-10-12 21:10:20 浏览: 48
在STM32F429IGT6上,使用HAL库编写一个1毫秒(1ms)和1微妙(1us)的延时函数,你需要利用System Timer(SYSTICK)的高精度。下面是一个例子:
首先,确保已经初始化了SYSTICK,并设置了正确的时钟源。例如,如果SYSTICK已经被配置成使用HCLK时钟源(180MHz),你可以这样做:
```c
// 假设Systick已被正确配置
__HAL_RCC_SYSTICK_CLK_ENABLE(); // 启动SYSTICK时钟
void HAL_Systicks_Callback(void) {
if (EXTI_GET_FLAG(EXTI_LINE_0)) { // EXTI Line 0通常用于SYSTICK中断
EXTI_ClearFlag(EXTI_LINE_0); // 清除中断标志
if (__HAL_SYSTICK_GET_ITSTATE() != HAL_SYSTICK_IT_RESET) { // 检查是否正在等待中断
__HAL_SYSTICK_IRQHandler(); // 处理中断
}
}
}
```
接下来,创建一个函数来实现1ms和1us的延时:
```c
void Delay_us(uint16_t us) {
uint32_t start = HAL_GetTick();
while ((HAL_GetTick() - start) < us);
}
void Delay_ms(uint32_t ms) {
while (ms--) {
Delay_us(1000); // 因为1ms等于1000us,所以我们每次延时1us
}
}
```
请注意,这里的延时是基于软件循环实现的,不是真正的硬件延迟。对于更准确的定时,可能会考虑使用其他计时器资源,如RTC或PIT。
阅读全文