stm32f429igt6 HCLK为180MHZ,写SysTick定时器延时1US代码
时间: 2024-10-15 11:06:13 浏览: 46
在STM32F429IGT6微控制器上,如果HCLK(系统时钟频率)为180MHz,你需要首先计算出1us(1微秒)对应的时间周期。因为1us等于1000ns(纳秒),所以对于180MHz的系统时钟,你可以通过下面的公式计算:
```c
// STM32F429IGT6的HCLK频率是180 MHz = 180 * 10^6 Hz
#define SYSCLK_HZ 180000000UL
// 1 us = 1000 ns
#define US_TO_NS 1000
// 计算1us对应的Tick数
uint32_t tick_for_1us = (SYSCLK_HZ / US_TO_NS) / 1000; // 因为还需要考虑Tick周期通常不是整数倍,所以除以1000
// 系统Tick定时器的基本配置
void SysTick_Config(uint32_t ticks) {
RCC->CR |= RCC_CR_STSC; // 开启系统时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SYSTICK, ENABLE); // 启动SYSTICK时钟
// 使用HAL库的话,可以设置SysTick中断周期
HAL_IntrConfig(SYSTICK_IRQn, ENABLE);
HAL_NVIC_SetPriority(SYSTICK_IRQn, 0, 0); // 设置SysTick中断优先级最高
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); // 将SysTick时钟源设为HCLK
HAL_SYSTICK_SetPrescaler(ticks); // 设置SysTick定时周期
}
// 这里是实际的1us延迟函数
static void delay_us(1u) {
while ((HAL_GetTick() % tick_for_1us) != 0) {}
}
```
在这个例子中,`delay_us()`函数会等待大约1us的时间,每次循环检查当前Tick值是否到达预设周期的边界。
阅读全文