stm32G474定时器
时间: 2025-05-17 17:15:57 浏览: 25
### STM32G474 微控制器中定时器的功能及用法
#### 定时器概述
STM32G474 系列微控制器提供了丰富的定时器资源,这些定时器可以用于多种用途,例如时间测量、PWM 输出、捕获比较等功能。其内部集成的通用定时器(General Purpose Timer)和高级定时器(Advanced Control Timer),能够满足不同应用场景的需求[^4]。
#### 主要特性
- **高分辨率计数器**:支持高达 16 位或 32 位的自动重载计数器。
- **多通道设计**:每个定时器通常配备多个输入捕获/输出比较通道,可实现复杂波形生成或多路信号同步。
- **灵活的工作模式**:包括向上计数、向下计数以及中心对齐模式等。
- **中断与 DMA 支持**:提供更新事件、溢出事件等多种触发条件下的中断请求,并可通过 DMA 实现无 CPU 干预的数据传输。
- **外部触发源**:允许通过特定引脚接收外部脉冲作为启动停止信号或者重新加载计数值依据之一[^5]。
#### 配置流程说明
以下是基于 HAL 库配置 TIMx 的基本方法:
1. 初始化 RCC 和 GPIO;
2. 设置时基单元参数 (Prescaler, Period),决定频率及时长范围;
3. 如果涉及 PWM 功能,则需定义占空比等相关变量并通过函数设置 CCRx 寄存器值来调整具体比例关系;
4. 启动对应类型的回调机制(如使能全局中断并编写服务程序) 或者直接开启连续工作状态即可完成初始化过程。
下面给出一段简单的示例代码展示如何利用 TIM2 来产生周期性的延时效果:
```c
#include "stm32g4xx_hal.h"
TIM_HandleTypeDef htim2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
while (1){
/* Infinite loop */
}
}
// TIM2 Initialization Function
static void MX_TIM2_Init(void){
__HAL_RCC_TIM2_CLK_ENABLE();
htim2.Instance = TIM2;
htim2.Init.Prescaler = 6399; // Assuming system clock is 64 MHz -> Prescaler=6399 => Tick Frequency ~10KHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; // ARR Value set to generate a delay of approximately 100 ms at this configuration.
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if(HAL_TIM_Base_Init(&htim2)!= HAL_OK){
Error_Handler();
}
HAL_TIM_Base_Start_IT(&htim2);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
static uint8_t toggle_flag = 0;
if(htim->Instance == TIM2 && ++toggle_flag >=2 ){
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); // Toggle LED connected on PA5 every 2 interrupts (~200ms).
toggle_flag =0 ;
}
}
```
上述例子展示了怎样借助软件框架快速搭建起基础架构从而轻松操控硬件模块达到预期目的的同时还兼顾到了实际工程当中的健壮性考量比如错误处理部分等等。
---
阅读全文
相关推荐


















