SysTick 功能:
24 位递减计数器,提供精确系统时基
时钟源:HCLK/8 (9MHz) 或 HCLK (72MHz)
定时时间:(重装载值 + 1)/ 时钟频率
SysTick 配置:
// 1ms定时
void SysTick_Init(void){
SysTick->LOAD = 71999; // 72MHz/72000=1KHz(1ms)
SysTick->VAL = 0; // 计数器清零
SysTick->CTRL = 0x00000007; // 使能计数器、使能中断、选择HCLK时钟
}
// 中断服务函数
void SysTick_Handler(void){
static uint32_t tick = 0;
tick++;
if(tick % 100 == 0) // 100ms
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); // 每100ms翻转LED
}
基于 SysTick 的延时函数:
void Delay_ms(uint32_t ms){
uint32_t start = SysTick->VAL;
while((start - SysTick->VAL) < ms * 72000); // 72MHz/1000=72000
}
中断总结:
中断是 STM32 实现实时性的关键机制
掌握 NVIC 配置和中断服务函数编写是进阶必备
建议练习:按键中断控制 LED、定时器中断实现精确计时、多中断优先级嵌套实验



