打印
[STM32F0]

STM32F030 定时器移植问题

[复制链接]
1334|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
问题:
某客户工程师在某型号新产品的设计中,使用STM32F030R8 的TIM15 的CH1 和CH2 来产生需要的波形 (2 路PWM 信号)。
据其工程师讲述:在以前的产品上,是使用 STM32F101 的TIM3/4 产生同样的波形。现在,将原代码移 植到STM32F030 的TIM15
上,发现仅有一路输出(CH2),另一路(CH1)没有输出。  

使用特权

评论回复
沙发
菜鸟的第一步|  楼主 | 2021-11-9 10:48 | 只看该作者
调研:
首先查看数据手册,看看是否是管脚映射出错。经核对,没有问题; 其次查看寄存器,看看配置是否有问题。经核对,
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
事件,则相关设置不会被加载,就无法产生期望的输出波形。  

使用特权

评论回复
板凳
菜鸟的第一步|  楼主 | 2021-11-9 10:49 | 只看该作者
结论:
移植过程中,不同定时器的差异导致代码需要微调。  

使用特权

评论回复
地板
菜鸟的第一步|  楼主 | 2021-11-9 10:50 | 只看该作者
处理:
两种方法:
1) 将CCPC 位清零(即不采用预装载方式)即可;
2) 如果CCPC 位不清零,那么程序中在打开TIM15 后,采用软件产生COM 事件的方法(将 TIM15_EGR 中的COMG
位置位即可。)  

使用特权

评论回复
5
菜鸟的第一步|  楼主 | 2021-11-9 10:51 | 只看该作者
建议:
STM32 的 产品系列越来越多,而每个产品的资源不仅有“大同”,也存在“小异”。在使用的时候, 尤其是移植时发生问题后,
要耐心、细心查找问题的所在。
对于同样的外设,以 TIMER 为例,不同的产品又有多个不同的 TIMER。尽管功能都类似,但仍然有可能 存在一些细微的差
别,尤其是不同类型的 TIMER 之间,即使是同一颗芯片,也有差异(例如 TIM1 和 TIM3)。使用的时候,要根据手册正确
进行配置。 此外,由于芯片有各种不同的封装,还要查看数据手册查看 IO 引脚是否有效,配置是否合理等。

使用特权

评论回复
6
labasi| | 2021-12-6 12:04 | 只看该作者
关键是看兼容不兼容了的  引脚

使用特权

评论回复
7
paotangsan| | 2021-12-6 12:05 | 只看该作者
这种太细节了

使用特权

评论回复
8
renzheshengui| | 2021-12-6 12:06 | 只看该作者
能找到原因就很好

使用特权

评论回复
9
wakayi| | 2021-12-6 12:08 | 只看该作者
CCPC 位是标识什么的呢

使用特权

评论回复
10
tpgf| | 2021-12-6 12:10 | 只看该作者
这是第一就需要确认的啊

使用特权

评论回复
11
wowu| | 2021-12-6 12:11 | 只看该作者
这是一种什么事件呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

436

帖子

1

粉丝