Day18:系统滴答定时器 (SysTick)

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、定时器中断实现精确计时、多中断优先级嵌套实验

相关推荐
d111111111d2 小时前
再STM32F103C8T6中小端存储和大端存储有什么不同,STM32F103C8T6用的是那个,为什么要这么使用?
笔记·stm32·单片机·嵌入式硬件·学习
云山工作室2 小时前
基于物联网的体温心率监测系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·课程设计
猫猫的小茶馆2 小时前
【ARM】VSCode和IAR工程创建
c语言·开发语言·arm开发·ide·vscode·stm32·嵌入式硬件
zephyr_zeng2 小时前
CubeMX项目轻松导入Vscode+EIDE编译
c语言·ide·vscode·stm32·mcu·物联网·编辑器
IAR Systems3 小时前
在IAR Embedded Workbench for Renesas RH850中开发和调试Renesas RH850 MCU
单片机·嵌入式硬件·rh850·iar
小李做物联网3 小时前
【物联网毕设】130.1基于单片机stm32的智慧民宿环境监测物联网嵌入式项目程序开发系统
stm32·单片机·嵌入式硬件·物联网
Jerry丶Li3 小时前
三十八、W25Q64简介
stm32·嵌入式硬件·c
brave and determined3 小时前
传感器学习(day04):红外感知:从经典热释电开关到智能时代的隐形慧眼
嵌入式硬件·算法·传感器·红外·嵌入式设计·红外矩阵·人体红外
llilian_163 小时前
微型低功耗原子钟筑牢多行业时频基准 低功耗原子钟
人工智能·单片机·嵌入式硬件·网络协议·其他·51单片机