stm32g431rbt6 滴答定时器
时间: 2025-03-21 07:15:19 浏览: 48
### STM32G431RBT6 滴答定时器 (SysTick Timer) 配置与使用
#### SysTick 定时器简介
SysTick 是 ARM Cortex-M 系列微控制器中的一个简单计数器型定时器,通常用于提供操作系统的时间基准。它是一个 24 位向下计数的定时器,具有可编程重载值和中断功能[^1]。
对于 STM32G431RBT6 单片机而言,SysTick 的配置可以通过 HAL 库或者标准库实现。以下是基于 HAL 库的一个典型配置示例:
---
#### 使用 HAL 库配置 SysTick 示例
以下代码展示了如何通过 HAL 库初始化并启用 SysTick 中断来生成周期性的延时或时间基准信号。
```c
#include "stm32g4xx_hal.h"
// 初始化 SysTick 并设置每毫秒触发一次中断
void MX_SysTick_Init(void) {
// 设置 SystemCoreClock 值为实际系统时钟频率(单位 Hz)
uint32_t ticks = SystemCoreClock / 1000;
if (ticks < 1) {
Error_Handler(); // 如果分频过低,则处理错误
}
// 配置 SysTick 加载寄存器
SysTick->LOAD = ticks - 1; // 装载值减一
SysTick->VAL = 0; // 清除当前值寄存器
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; // 启用 SysTick 和中断
}
// SysTick 中断服务程序
void SysTick_Handler(void) {
static uint32_t counter = 0;
counter++; // 记录每次中断调用次数
if (counter >= 1000) { // 模拟一秒事件
counter = 0;
LED_Toggle(); // 切换 LED 状态作为测试动作
}
}
```
上述代码中:
- `SystemCoreClock` 表示系统的主时钟频率。
- `SysTick->LOAD` 寄存器决定了计数值,在本例中将其设定为每毫秒触发一次中断。
- `SysTick->CTRL` 控制寄存器启用了 SysTick、选择了内部时钟源以及允许中断发生[^2]。
---
#### 手动配置 SysTick (不依赖 HAL)
如果不想使用 HAL 库,也可以手动配置 SysTick。下面是一段裸机代码示例:
```c
#include "stm32g4xx.h"
void SysTick_Init(uint32_t msTicks) {
if (msTicks > 0) {
SysTick->LOAD = (SystemCoreClock / 1000) * msTicks - 1; // 设定加载值
SysTick->VAL = 0; // 复位当前值
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; // 开启 SysTick 及其中断
} else {
while(1); // 错误保护机制
}
}
int main(void) {
SystemInit();
// 初始化 SysTick 为 1 秒间隔
SysTick_Init(1000);
while (1) {
__WFI(); // 进入等待中断模式
}
}
__attribute__((naked)) void SysTick_Handler(void) {
// 用户自定义逻辑可以放在这里
GPIOA->ODR ^= GPIO_PIN_5; // 切换 PA5 输出电平
}
```
此代码片段同样实现了每秒钟切换一次指定引脚状态的功能。其中需要注意的是,`SysTick->LOAD` 的计算依据于目标 MCU 的核心时钟速度 `SystemCoreClock`[^3]。
---
#### 注意事项
- **优先级调整**: 当多个外设共享同一类中断线时,可能需要调节 NVIC 中断优先级以满足实时性需求。
- **功耗管理**: 在低功耗应用场合下,应考虑关闭未使用的模块,并合理安排 CPU 工作状态以便节省能源消耗。
- **调试工具利用**: 推荐借助 Keil MDK 或 IAR Embedded Workbench 等 IDE 提供的仿真环境验证设计行为是否符合预期。
---
阅读全文
相关推荐











