单片机外设快速入门(三)——定时器篇

文章目录

一. 定时器核心概念

​定时器类型

​基本定时器(TIM6/TIM7)​:仅支持向上计数,用于简单计时。

​通用定时器(TIM2-TIM5)​:支持PWM、输入捕获、编码器模式。

​高级定时器(TIM1/TIM8)​:带死区控制,适用于电机控制。

​关键参数

​时钟源(Clock Source)​:内部时钟(APB总线)或外部信号。

​预分频器(Prescaler)​:将系统时钟分频后作为定时器时钟。

​自动重载值(AutoReload)​:定义计数器的最大值(决定溢出时间)。

二.基础配置步骤(以TIM2为例)

  1. CubeMX配置
    Step 1:启用TIM2定时器,选择时钟源为内部时钟(Internal Clock)。
    Step 2:配置参数:
    Prescaler = 7199(若系统时钟72MHz → 72MHz/(7199+1)=10kHz)
    Counter Mode = Up(向上计数)
    AutoReload = 9999(计数器从0计数到9999)
    溢出时间 = (7199+1)*(9999+1)/72MHz = 1秒
    Step 3:启用中断(NVIC Settings → TIM2 global interrupt)。
    Step 4:生成代码。
c 复制代码
// main.c 中启动定时器
HAL_TIM_Base_Start_IT(&htim2); // 启动定时器并启用中断

// 定时器中断回调函数(在用户代码区添加)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim == &htim2) {
        HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // LED每秒翻转一次
    }
}

PWM输出配置(以TIM3_CH1为例)

  1. CubeMX配置
    Step 1:启用TIM3,选择通道1为PWM Generation模式。
    Step 2:配置参数:
    Prescaler = 71(72MHz/(71+1) = 1MHz)
    AutoReload = 999(周期 = 1000个时钟 → 1MHz/1000 = 1kHz PWM频率)
    Pulse = 500(占空比 = 500/1000 = 50%)
    Step 3:生成代码。
  2. 代码实现
c 复制代码
// 启动PWM输出
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

// 动态修改占空比(例如设置为75%)
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 750); // Pulse值范围:0~999

输入捕获(测量脉冲宽度)

  1. CubeMX配置
    Step 1:启用TIM4通道2为Input Capture模式。
    Step 2:配置边沿检测(Rising Edge或Falling Edge)。
    Step 3:启用捕获中断。
c 复制代码
// 启动输入捕获
HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_2);

// 输入捕获回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    if (htim == &htim4 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) {
        static uint32_t prev_value = 0;
        uint32_t curr_value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
        uint32_t pulse_width = curr_value - prev_value; // 计算脉冲宽度(单位:定时器时钟周期)
        prev_value = curr_value;
    }
}

三.定时器进阶使用



相关推荐
自小吃多2 小时前
FreeRTOS Semaphore信号量-笔记
笔记·stm32
Star Curry2 小时前
【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关
stm32·单片机·嵌入式硬件·职场和发展·51单片机·学习方法
(未雨绸缪)3 小时前
STM32F103单片机在不需要使用 JTAG 调试接口的情况下,释放引脚给其他功能使用。
stm32·单片机·嵌入式硬件
不脱发的程序猿4 小时前
STM32实现九轴IMU的卡尔曼滤波
stm32·嵌入式硬件
吃货界的硬件攻城狮5 小时前
【STM32 学习笔记】USART串口
笔记·stm32·单片机·学习
吃货界的硬件攻城狮6 小时前
【STM32 学习笔记】I2C通信协议
笔记·stm32·单片机·学习
双叶8367 小时前
(51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
c语言·数据库·c++·单片机·嵌入式硬件·mongodb·51单片机
爱吃程序猿的喵8 小时前
STM32硬件I2C驱动OLED屏幕
c++·stm32·单片机·嵌入式硬件·c·硬件·i2c
honey ball9 小时前
IPM IMI111T-026H 高效风扇控制板
单片机·嵌入式硬件
小石(努力版)10 小时前
嵌入式STM32学习——继电器
stm32·嵌入式硬件·学习