MK NOTES
电路板与PCBA

STM32F103矩阵扫描与定时器PWM输出实战指南

2025-11-26STM32主控芯片
STM32F103矩阵扫描与定时器PWM输出实战指南

STM32F103矩阵扫描与定时器PWM输出实战指南

STM32F103定时器基础与PWM配置逻辑

在STM32F103微控制器中,通用定时器(如TIM2、TIM3、TIM4)是产生脉冲宽度调制信号的核心外设。PWM波形本质上是通过改变脉冲的高电平时间与周期时间的比例来控制输出功率或信号特征。配置过程涉及时钟树管理、寄存器初始化以及引脚复用设置。STM32F103系列通常运行在72MHz的主频下,定时器时钟通常来源于APB1或APB2总线,具体频率取决于总线分频系数。

实际开发中,需通过HAL库或标准库函数对定时器进行初始化结构体配置。关键参数包括预分频器(Prescaler)、自动重装载值(Period)以及脉冲宽度(Pulse)。预分频器用于降低定时器计数频率,从而获得所需的PWM频率;自动重装载值决定PWM信号的周期长度。例如,若希望产生50kHz的PWM信号,且定时器时钟为72MHz,则预分频器和自动重装载值的乘积应接近7200。

STM32F103矩阵扫描与定时器PWM输出实战指南

矩阵键盘扫描原理与GPIO驱动实现

矩阵键盘由多行和多列的按键交叉排列而成,通过行线和列线的电平状态检测按键动作。在STM32应用中,通常将行线配置为输出模式,列线配置为输入模式(或启用内部上拉/下拉电阻)。扫描过程中,依次将某一行置为低电平,其余行保持高电平,随后读取所有列线的状态。若某列检测到低电平,即可确定该位置按键处于按下状态。

为了提高抗干扰能力和扫描效率,需引入软件去抖机制。当检测到按键按下后,程序应延时10-20毫秒再次检测,以排除机械抖动带来的误判。此外,矩阵扫描可以采用轮询方式或中断方式触发。轮询方式结构简单,适合按键操作频率较低的场景;中断方式则能实时响应按键事件,降低CPU空闲等待时间,适用于对实时性要求较高的控制系统。

STM32F103矩阵扫描与定时器PWM输出实战指南

定时器中断与扫描任务调度

将矩阵扫描逻辑置于定时器中断中是提升系统实时性的有效手段。通过配置TIM2或TIM3产生固定周期的中断(例如10ms或20ms),在主循环之外定期执行扫描代码。这种非阻塞式的扫描方式避免了在主函数中使用延时函数导致的系统卡顿。定时器中断服务函数中仅包含按键状态读取、去抖判断和状态更新逻辑,确保中断执行时间极短。

在代码实现层面,需定义行扫描的状态机或索引变量。每次进入中断,更新当前扫描的行索引,输出对应行的电平,读取列值,并根据预设的按键矩阵映射表更新按键状态数组。若检测到按键按下,记录按下时间戳;若检测到按键释放,记录释放时间戳。通过计算按下与释放的时间差,可判断用户是单击还是长按,从而扩展按键的功能定义。

STM32F103矩阵扫描与定时器PWM输出实战指南

PWM输出引脚配置与波形生成

STM32F103的定时器通道可映射到多个GPIO引脚,通过配置GPIO模式为复用推挽输出(AF_PP)实现PWM信号输出。以TIM3_CH1为例,需将对应引脚(如PA6)配置为复用功能,并开启定时器时钟和GPIO时钟。在初始化结构中,PWM模式需设置为边缘对齐或中心对齐模式,其中边缘对齐模式代码简单,中心对齐模式纹波更小,适用于对波形质量要求较高的场景。

PWM信号的占空比通过修改定时器的捕获/比较寄存器(CCR)值实现。当定时器计数值小于CCR值时,输出高电平;大于CCR值时,输出低电平。改变CCR值即可动态调整占空比。在实际应用中,可通过串口接收外部指令或ADC采样结果,实时计算并更新CCR值,从而实现亮度调节、电机转速控制或蜂鸣器音调变化的功能。

STM32F103矩阵扫描与定时器PWM输出实战指南

综合实战:按键控制PWM占空比

将矩阵扫描与PWM输出结合,可构建人机交互控制界面。例如,使用4x4矩阵键盘作为输入源,通过按键改变PWM占空比。当用户按下“+”键时,定时器中断中检测到该事件,主程序或中断服务函数增加CCR值,使LED亮度增加或电机加速;按下“-”键则减小CCR值。这种设计实现了通过离散按键对连续模拟量(PWM)的数字化控制。

在调试过程中,需关注GPIO引脚的电气特性。STM32F103的IO口驱动能力有限,若直接驱动大功率负载,需增加驱动电路。此外,PWM频率的选择需考虑负载特性。对于LED调光,频率高于100Hz即可避免肉眼可见闪烁;对于直流电机,频率通常设置在1kHz至20kHz之间,以平衡效率与噪音。通过示波器观察输出波形,验证频率与占空比的准确性,确保系统稳定运行。