1. PWM捕获与输出技术解析
在嵌入式系统开发中,PWM(脉冲宽度调制)技术是控制外设的核心手段之一。本文将基于蓝桥杯嵌入式竞赛平台(国信长天开发板),深入讲解PWM信号的捕获与输出实现方案。不同于官方文档的概括性说明,这里将分享我在实际项目调试中积累的完整配置流程、参数计算方法和避坑经验。
开发环境采用STM32CubeMX+HAL库的组合,这种开发方式在工程实践中具有典型性。硬件平台搭载STM32G431RBT6微控制器,通过板载的J9、J10接口连接旋转编码器,实现PWM信号的捕获功能。对于输出部分,我们将使用PA7引脚生成可调PWM波形,并通过硬件捕获验证其准确性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PWM输入捕获实现方案
2.1 硬件连接与引脚配置
根据开发板原理图,两个旋转编码器的PWM输出分别连接到:
- R39(板载标记):PA15(TIM2_CH1)
- R40(板载标记):PB4(TIM3_CH1)
在CubeMX中的具体配置步骤如下:
- 使能TIM2和TIM3时钟
- 将PA15配置为TIM2_CH1,PB4配置为TIM3_CH1
- 时钟源选择内部时钟(Clock Source → Internal Clock)
- 通道配置为输入捕获模式(Input Capture direct/indirect)
特别注意:开发板上的J9、J10跳线帽需要保持连接状态,否则信号无法传输到MCU引脚。调试时若发现无信号输入,首先应检查这两个跳线帽是否插好。
2.2 无中断捕获方案实现
2.2.1 定时器参数配置
在CubeMX中配置定时器时,关键参数设置如下:
- Prescaler (PSC): 79
- Counter Mode: Up
- Counter Period (ARR): 65535(初始值,实际运行时动态变化)
- auto-reload preload: Disable
- 通道1:直接捕获,上升沿触发
- 通道2:间接捕获,下降沿触发
参数计算原理:
系统时钟配置为80MHz,经过预分频后实际计数频率为:
$$ f_{cnt} = \frac{80MHz}{(PSC+1)} = \frac{80MHz}{80} = 1MHz $$
因此每个计数周期为1μs,测量精度可达微秒级。
2.2.2 驱动程序实现
初始化完成后,需要启动捕获通道:
c复制HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_2);
HAL_TIM_IC_Start(&htim3, TIM_CHANNEL_1);
HAL_TIM_IC_Start(&htim3, TIM_CHANNEL_2);
信号处理函数实现频率和占空比计算:
c复制void TIM_process(void){
// R40处理(TIM2)
R40_freq = 1e6 / (HAL_TIM_ReadCa
