stm32f103c8t6 tim3
时间: 2025-05-04 08:59:43 浏览: 46
### STM32F103C8T6 TIM3 定时器 使用教程
#### 配置概述
STM32F103C8T6 的 TIM3 是一个通用定时器,支持多种功能,包括捕获/比较、PWM 输出和中断触发等。为了实现这些功能,通常需要完成以下几个方面的配置:
1. **使能时钟**:确保 TIM3 所需的外设时钟被启用。
2. **设置预分频器 (PSC)** 和自动重装载寄存器 (ARR),用于定义计数周期。
3. **初始化模式**:选择向上计数、向下计数或中心对齐模式。
4. **中断配置**:如果需要使用中断,则应调用 `TIM_ITConfig` 函数并开启相应的中断标志位[^1]。
以下是基于 HAL 库的一个典型配置过程及其示例代码。
---
#### 示例代码
```c
#include "stm32f1xx_hal.h"
void TIM3_Init(void) {
TIM_HandleTypeDef htim3;
__HAL_RCC_TIM3_CLK_ENABLE(); // 启用 TIM3 时钟
htim3.Instance = TIM3;
htim3.Init.Prescaler = 7199; // 设置预分频器值为 7199,假设系统时钟为 72MHz
htim3.Init.CounterMode = TIM_COUNTERMODE_UP; // 上升计数模式
htim3.Init.Period = 999; // 自动重载值为 999,即每秒一次溢出事件
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { // 初始化基本定时器
Error_Handler();
}
// 中断配置
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); // 设置优先级
HAL_NVIC_EnableIRQ(TIM3_IRQn); // 开启 TIM3 中断线
}
// 中断服务函数
void TIM3_IRQHandler(void) {
if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE) && __HAL_TIM_GET_IT_SOURCE(&htim3, TIM_IT_UPDATE)) {
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE); // 清除更新中断标志
Toggle_LED(); // 切换 LED 状态
}
}
```
上述代码展示了如何利用 HAL 库来初始化 TIM3 并配置其作为简单的时间间隔发生器。其中,`Prescaler` 值决定了输入时钟频率的分频比例;而 `Period` 参数则指定了计数值范围,在此范围内会触发一次更新事件[^2]。
---
#### 关键点说明
- **时基单元**:TIM3 提供了一个灵活的时基结构,允许开发者精确调整时间参数以满足不同应用场景的需求。
- **中断机制**:当计数达到设定的最大值后会产生一个更新事件,并可通过软件进一步处理该信号。
- **硬件资源管理**:在实际项目中还需要注意合理分配 GPIO 口以及其他关联模块之间的协作关系。
---
阅读全文
相关推荐


















