STM32呼吸灯实验手册(TIM定时器)

一、实验目标

  1. 使用TIM定时器的PWM模式控制LED亮度
  2. 实现LED渐亮渐灭的呼吸灯效果
  3. 掌握HAL库的TIM配置方法

二、硬件准备

  • 开发板:STM32F103C8T6
  • LED模块:LED串联220Ω电阻两组
  • USB-TTL调试器
  • 硬件连接

三、软件配置(STM32CubeMX)

  • 打开STM32CubeMX
  • 选择MCU型号:STM32F103C8T6
  • 设置SYS调试接口:Serial Wire(SWD)
  • 设置TIM参数

对照参数设置

按设置生成的波形

  • 设置RCC参数
  • 生成项目

四、代码编写

在生成代码的mian函数中编写如下代码

复制代码
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL1);//启动PWM正常输出
HAL_TIMEx_PWM_Start(&htim1,TIM_CHANNEL1);//启动PWM互补输出

while(1){//修改
float t = HAL_GetTick() * 0.001;//获取当前时间
    float duty = 0.5 * sin(2*3.14*t) + 0.5;//计算占空比
    uint16_t arr = __HAL_TIM_GET_AUTORELOAD(&htim1);//获取ARR寄存器的值
    uint16_t ccr = duty * (arr + 1);//计算CRR寄存器的值
    __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,ccr);//将计算结果写入CCR
}

五、代码解析

关键函数说明


HAL_TIM_PWM_Start

复制代码
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

功能作用

此函数用于启动定时器(TIM)的指定通道输出PWM信号。其核心操作包括:

  • 使能定时器的计数器(TIMx->CR1 |= TIM_CR1_CEN
  • 启用指定通道的PWM输出(配置通道的CCxE位,如TIMx->CCER |= TIM_CCER_CC1E

参数解析

参数 类型 说明
htim TIM_HandleTypeDef* 指向TIM外设的句柄(包含定时器配置信息,如预分频、计数模式等)
Channel uint32_t 指定PWM输出的通道号(TIM_CHANNEL_1TIM_CHANNEL_4

HAL_TIMEx_PWM_Start
复制代码
HAL_StatusTypeDef HAL_TIMEx_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

功能作用

此函数是HAL库中针对高级定时器(TIM1/TIM8)或复杂PWM场景的扩展函数 ,用于启动定时器的PWM输出。与HAL_TIM_PWM_Start的主要区别在于:

  • 支持高级定时器的互补通道(如CH1N、CH2N等)
  • 包含刹车(Break)和死区时间(Dead Time)控制逻辑
  • 适用于电机控制、逆变器等需要安全保护的场景

参数解析

参数 类型 说明
htim TIM_HandleTypeDef* 指向高级定时器(TIM1/TIM8)的句柄
Channel uint32_t 支持互补通道 的选项: TIM_CHANNEL_1 TIM_CHANNEL_1N

HAL_TIM_GET_AUTORELOAD
复制代码
#define HAL_TIM_GET_AUTORELOAD(__HANDLE__) 

功能作用

此宏用于直接读取定时器自动重装载寄存器(AutoReload Register, ARR)的当前值
核心功能

  • 获取定时器的周期设定值(决定PWM频率或定时溢出时间)
  • 适用于动态调整定时参数时的参数校验
  • 调试时验证配置是否生效

| 参数 | 类型 | 说明 |

__HANDLE__ TIM_HandleTypeDef* 指向TIM外设的句柄(包含定时器配置信息)

HAL_TIM_SET_COMPARE
复制代码
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) 

功能作用

此宏用于直接设置定时器的捕获/比较寄存器(CCRx)值 ,从而控制PWM占空比或定时触发点。
核心功能

  • 动态调整PWM输出的占空比(如呼吸灯、电机调速)
  • 设置输入捕获的触发阈值
  • 配置输出比较模式的匹配值
参数 类型 说明
__HANDLE__ TIM_HandleTypeDef* 指向TIM外设的句柄(包含定时器配置信息)
__CHANNEL__ uint32_t 指定通道: TIM_CHANNEL_1-TIM_CHANNEL_4
__COMPARE__ uint32_t 比较值(0 ≤ COMPARE ≤ AutoReload)

关于CCR的值

在while循环中我们要向外输出一个PWM信号, 满足呼吸灯的现象可以用一个正弦波来做输出

占空比是CCR和ARR+1的比值

我们想得到CCR的值根据上述公式可以得到

那么就得到CCR的表达式

复制代码
uint16_t ccr = duty * (arr + 1);//计算CRR寄存器的值

六、实验现象

烧录程序后,LED呈现渐变呼吸效果

相关推荐
Bona Sun13 小时前
单片机手搓掌上游戏机(二十)—pico运行doom之编译环境
c语言·c++·单片机·游戏机
偶像你挑的噻16 小时前
16-Linux驱动开发-多核通信中的并发控制
linux·驱动开发·stm32·嵌入式硬件
SEP501017 小时前
STM32 Bit-Bang I2C
stm32·i2c·bit-bang
编码追梦人17 小时前
基于 ESP32 的多人无线答题竞赛系统设计与实现
单片机·嵌入式硬件
yyycqupt17 小时前
蓝牙协议栈的学习(二)
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·iot
ACP广源盛1392462567317 小时前
GSV2125D@ACP#GSV6125#HDMI 2.0 转 DisplayPort 1.4 转换器(带嵌入式 MCU)
嵌入式硬件·计算机外设·音视频
ℳ๓. Sweet20 小时前
【从零开发STM32(HAL版)】一、开发硬件环境准备
stm32·单片机·嵌入式硬件
ACP广源盛1392462567321 小时前
GSV2202D@ACP#DisplayPort 1.4 到 HDMI 2.0 转换器(带嵌入式 MCU)
单片机·嵌入式硬件·计算机外设·音视频
梓德原21 小时前
【总结】STM32 SPI DMA 的使用
stm32·单片机·嵌入式硬件
三佛科技-134163842121 天前
LP3610S开关电源45V同步整流芯片17W (5V 3400MA) 典型应用电路
嵌入式硬件·物联网·智能家居·pcb工艺