stm32定时器时间控制灯亮灭代码解读
时间: 2024-12-14 14:21:42 浏览: 19
中显串口屏点亮stm32开发板上的led灯
STM32定时器通常用于精确的时间控制任务,比如LED灯的开关控制。下面是一个简单的STM32F103C8T6单片机上使用TIM1定时器控制LED闪烁的基本代码示例:
```c
#include "stm32f10x.h"
// 定义定时器配置结构体
TIM_TimeBaseInitTypeDef.TIM_Prescaler = 84; // 使用系统时钟频率除以84作为计数器预分频
TIM_TimeBaseInitTypeDef.TIM_CounterMode = TIM_COUNTERMODE_UP; // 计数模式,向上计数
TIM_TimeBaseInitTypeDef.TIM_Period = 500; // 设置周期,500个计数单位等于半秒
// LED初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // LED连接到PA13引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; // 输出推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 高速
GPIO_Init(GPIOA, &GPIO_InitStructure);
void Tim LedControl(void) {
TIM_Cmd(&htim1, ENABLE); // 启动定时器
while(1) { // 无限循环
GPIO_SetBits(GPIOA, GPIO_Pin_13); // LED点亮
HAL_Delay(500); // 等待500ms
GPIO_ResetBits(GPIOA, GPIO_Pin_13); // LED熄灭
HAL_Delay(500); // 再等待500ms
}
}
int main(void) {
// 初始化TIM1定时器
TIM_TimeBaseInit(htim1, &TIM_TimeBaseInitTypeDef);
// 初始化GPIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 开始定时器LED控制函数
Tim_LedControl();
return 0;
}
```
解读:
1. 定义了定时器配置结构体,根据系统时钟频率(一般为72MHz)设置预分频、计数模式和周期,这里设置周期为500,使得每两个周期灯亮一次,即半秒钟闪烁一次。
2. 初始化GPIO端口,将LED连接到PA13引脚,并设置其工作模式为推挽输出。
3. `Tim_LedControl` 函数中,先启动定时器,然后在一个无限循环中,交替设置GPIO使得LED亮起和关闭,每次亮灭之间通过`HAL_Delay`暂停500毫秒。
4. `main`函数中,首先对TIM1进行初始化,接着开启GPIOA时钟并开始`Tim_LedControl`函数。
阅读全文