DC娱乐网

STM32C5A3R开发实战:单通道双边沿捕获,同时测量PWM频率与占空比 在S

STM32C5A3R开发实战:单通道双边沿捕获,同时测量PWM频率与占空比
在STM32项目开发中,测量PWM信号的频率和占空比是常见需求,传统方法往往需要占用两个定时器通道,而利用STM32C5A3R的TIM15定时器双边沿捕获功能,仅用一个通道就能同时完成两项测量,大幅节省硬件资源。本文将详细讲解这一高效方案的配置与实现过程。

首先进行STM32CubeMX的基础配置:确认TIM15的输入时钟频率为144MHz,这是后续计算频率的核心依据,若时钟判断错误,最终测量结果会出现偏差。进入Timers的TIM15配置页面,先使能TIM15外设,再将TIM15 CH1通道配置为输入捕获模式,关键设置是将捕获极性选为“Both Edges”,即同时响应上升沿和下降沿触发捕获。

完成CubeMX配置后,进入代码开发环节:首先在main.c中添加必要的头文件,并完成printf重定向以便串口输出结果。为了让TIM15的计数频率变为1MHz(每计数1次对应1微秒,简化后续计算),通过HAL函数动态配置预分频器;同时将Counter period设置为0xFFFF,让16位计数器能跑满最大计数范围,减少溢出频率。
接下来定义捕获变量,用于存储上升沿、下降沿的捕获值以及最终的测量结果。由于16位计数器计数到65535后会溢出,需要封装一个TIM15_get_diff函数来处理两次捕获值相减时的溢出情况,确保差值计算准确。
启动TIM15 CH1的输入捕获中断后,同一个回调函数会响应上升沿和下降沿触发的中断。为了区分当前捕获的是哪种边沿,在回调函数中读取PA7引脚的当前电平:若为高电平,说明捕获的是上升沿;若为低电平,则是下降沿。通过记录相邻上升沿的捕获值差得到PWM周期,上升沿与对应下降沿的差值得到高电平时间,进而计算出频率和占空比。

在主循环中读取测量结果时,需要先关闭中断再读取变量,避免读取过程中中断更新变量导致数据不完整,读取完成后重新开启中断,最后通过串口打印测量结果。实测显示,该方案测得的1025Hz频率、75%占空比与逻辑分析仪结果完全一致,稳定性和准确性都表现出色。
最后需要注意几个细节:一是确保定时器时钟配置准确,这是测量精度的基础;二是若输入信号存在毛刺,可在CubeMX中为捕获通道添加合适的输入滤波器;三是临界区保护不可省略,否则在高频信号下容易读取到错误数据。