
1. 引言 STM32 L0 系列作为一款低功耗芯片,具有丰富的外设和高温下保持极低功耗的特性,广泛应用于各种节能设备上和消费类电子产品中。 2. 问题描述 客户计划使用 STM32L051 作为移动电子产品的某功能主控芯片,控制步进马达。移动产品要求运行和待机都要有较低的功耗,并且能输出一定数量的脉冲。 STM32L051 具有 4个普通定时器,每个定时器具有数个输出通道,可以产生 PWM,但是不具有重复计数器。 3. 实现机制 通常,我们实现 PWM 信号往往利用定时器的比较输出功能,若要控制 PWM 输出个数,如果使用 STM32 高级定时器就比较方便。因为它有个的重复计数器功能(TIMx_RCR寄存器),结合单脉冲模式实现起来就简单方便。 但是问题来了,STM32L051 本身不具备这样的高级定时器,那么如何控制输出的脉冲个数呢,就要考虑间接的方法。 我们从定时器章节的定时器外部触发与同步章节中可以看到,工作在门控从模式的定时器的计数可以被触发控制信号的电平来控制。那我们是否可以基于这个机制来实现指定PWM 脉冲个数的输出呢? ![]() 根据这一原理,如果设定的这个使能计数的时间窗口恰好等于所有输出的脉冲时间总和,理论上就可以将实现指定个数的 PWM 输出。 4. 实现方式 首先配置定时器 21 作为门控定时器,输出门控信号,控制输出脉冲个数(即计数时长)。设置去触发定时器 22 的信号选择 OC1REF,即比较信号 1. 系统主频 32M, 输出控制信号总长度为 270us。我们来看看相关实现过程。 ![]() 其次配置定时器 22 为从定时器,也就是输出脉冲的定时器。定时器配置从模式的 GATEDMODE. 接收的控制触发信号来自于定时器 21 的 OC1REF。 输出脉冲单个周期 27us,如下图所示 ![]() ![]() 再次,由于只需要一次门控,也就是发出固定数量的脉冲(上例中为 10 个),相对于主控定时器来说,只发出一次控制信号,即单脉冲模式。所以在启动代码前需要配置为单脉冲方式。 ![]() 最后测试结果如下,所对应的时间刚刚好。通过为连续波形查看门控时间的准确度。由PWM 的计数完成刚好和门控时间完成。 ![]() ![]() 完整版请查看:附件 |
LAT1073_STM32L0无高级定时器输出固定脉冲方式之一 v1.0.pdf
下载435.32 KB, 下载次数: 0
STM32如何分配原理图IO
STM32ADC过采样及几种ADC采样的处理方法
分享一个STM32L031的串口调试程序
基于STM32L051使用CubeMX生成工程文件ST系列芯片通用经验分享
基于STM32L051开始添加需要的代码经验分享
STM32L051测试I2C协议设备的添加经验分享
基于STM32L051测试Flash和EEPROM的读写
基于STM32L051串口测试与Enocean模块通讯问题
基于STM32L0的EEPROM读写经验分享
基于STM32L0 ADC使用HAL库关于校准问题经验分享