STMCU小助手
发布时间:2022-2-24 19:21
|
问题: 某客户工程师在某型号新产品的设计中,使用 STM32F030R8 的 TIM15 的 CH1 和 CH2 来产生需要的波形(2 路 PWM 信号)。 据其工程师讲述:在以前的产品上,是使用 STM32F101 的 TIM3/4 产生同样的波形。现在,将原代码移植到 STM32F030 的 TIM15 上,发现仅有一路输出(CH2),另一路(CH1)没有输出。 调研: 首先查看数据手册,看看是否是管脚映射出错。经核对,没有问题; 其次查看寄存器,看看配置是否有问题。经核对,TIM15_CR2 的位 0 被置位。参考手册里寄存器描述中 有如下说明, CCPC: Capture/compare preloaded control 0: CCxE, CCxNE and OCxM bits are not prel 1: CCxE, CCxNE and OCxM bits are preloaded, after having been written, they are updated only when COM bit is set. 这意味着,当 CCPC 被置位后,必须先有一个 COM 事件触发,才会将 CCxE/CCxNE/OCxM 位加载到寄存器中。如果没有 COM 事件,则相关设置不会被加载,就无法产生期望的输出波形。 结论: 移植过程中,不同定时器的差异导致代码需要微调。 处理: 两种方法: 1)将 CCPC 位清零(即不采用预装载方式)即可; 2)如果 CCPC 位不清零,那么程序中在打开 TIM15 后,采用软件产生 COM 事件的方法(将TIM15_EGR 中的 COMG 位置位即可。) 建议: STM32 的 产品系列越来越多,而每个产品的资源不仅有“大同”,也存在“小异”。在使用的时候,尤其是移植时发生问题后,要耐心、细心查找问题的所在。对于同样的外设,以 TIMER 为例,不同的产品又有多个不同的 TIMER。尽管功能都类似,但仍然有可能存在一些细微的差别,尤其是不同类型的 TIMER 之间,即使是同一颗芯片,也有差异(例如 TIM1 和TIM3)。使用的时候,要根据手册正确进行配置。 此外,由于芯片有各种不同的封装,还要查看数据手册查看 IO 引脚是否有效,配置是否合理等。 |
微信公众号
手机版