stm32f103c8t6hal库定时器2控制闪灯
时间: 2024-12-29 19:26:28 浏览: 9
### 使用 STM32F103C8T6 HAL 库配置 TIM2 实现 LED 闪烁
#### 定时器初始化与配置
为了使定时器能够正常工作并控制LED的亮灭,在CubeMX中需完成基本外设与时钟树的配置。选定STM32F103C8T6型号后,进入时钟配置界面调整系统核心频率至72MHz[^4]。
对于TIM2而言,设定其输入时钟源为APB1总线上的24MHz信号[^1]。接着定义预分频系数(Prescaler),该参数决定了计数周期长度;例如当主频为72MHz时,若希望实际计数值每微秒增加一次,则应将此值置为72-1(即71)[^2]。这样做的目的是为了让内部计数更加精确稳定,从而确保延时效果满足预期需求。
另外还需指定自动重装载寄存器(Auto-reload Register)内的数值,它代表了一次完整的溢出事件所需经历的最大计数值加一。如果目标是创建一秒间隔的中断触发机制,考虑到前述提到的一微妙级增量特性,那么此处应当填入999,999作为ARR的内容(注意单位转换关系),使得整个过程恰好耗时约等于期望的时间跨度。
#### 中断服务例程编写
在完成了上述硬件层面的基础搭建之后,接下来就要着手准备相应的固件部分了。具体来说就是在项目框架内加入一段用于处理定时器更新事件的服务程序:
```c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
static uint8_t led_state = 0;
if (htim->Instance == TIM2){ // 判断是否来自TIM2的回调请求
GPIO_PinState new_led_state = (led_state++) & 1 ? GPIO_PIN_SET : GPIO_PIN_RESET;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, new_led_state); // 假定PA5连接着待操控的目标LED灯珠
}
}
```
这段代码的作用是在每次接收到由定时器发出的通知消息时改变GPIO端口的状态,进而达到切换外部设备开关状态的效果。值得注意的是,这里利用了一个静态局部变量来追踪当前所处的工作阶段,并据此决定下一步的动作方向。
#### 主循环逻辑设计
最后回到`main()`函数主体当中补充必要的启动指令即可:
```c
int main(void){
/* 初始化所有已配置好的组件 */
HAL_Init();
SystemClock_Config(); // 调整CPU运作速度等全局属性
MX_GPIO_Init(); // 设置通用IO接口模式
MX_TIM2_Init(); // 启动特定编号的计时装置实例化流程
__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);
HAL_TIM_Base_Start_IT(&htim2);
while (1){
// 此处可放置其他非阻塞型的任务调度安排...
}
}
```
通过以上几个方面的协同合作就可以顺利达成基于STM32平台下的简单灯光闪动演示实验目的了。
阅读全文