当前位置:网站首页>使用GD32F207的高级定时器来产生PWM波出现的隐藏BUG
使用GD32F207的高级定时器来产生PWM波出现的隐藏BUG
2022-08-02 04:04:00 【OMGMac】
今天分享一个在做GD32F207项目适合遇到的一个让人很无语的BUG,之所以称之为BUG,是因为实在想不出是为什么,但是有解决方法。
问题
首先,是发现这个BUG的问题原因,是我在通过高级定时器来生成PWM波进行调节输出电压,这里我使用了GD32F207的定时器TIMER0(高级定时器)的四个通道(CH0_CH3)分别输出不同占空比的PWM波(注意这里我使用的是高级定时器,而不是基本定时器,为什么这里要重点说是高级定时器,后面我们会说明到)。但是我发现莫名其妙只有TIMER_CH3这个通道成功输出了PWM波,而TIMER_CH0-TIMER_CH2这三个通道都没有成功输出,于是我就检测了其他三个通道输出PWM的设置,发现引脚还有设置参数都对的啊,为什么只要通道三输出了。。。。
然后我又把定时器配置跟GD提供的使用定时器输出PWM波的官方历程对比了一下,发现配置都正常的啊,想了一下,定时器配置应该没有问题,要不TIMER_CH3通道怎么又输出,可是TIMER_CH3输出PWM的设置与其他三个通道一模一样,为什么会其他三个通道都不输出,于是我就一遍一遍的看,终于发现了问题之处。
BUG之处
于是我发现问题之处,竟然是因为定时器配置结构体变量定义和PWM输出配置结构体定义的位置不一样导致的,我一开始的定义的位置是这样子的:
//这里标记为版本1
//这是有bug的定义循序
timer_parameter_struct timer_initpara;
timer_oc_parameter_struct timer_ocintpara;
而当我将这两个定义的循序换一下,换成下面这样子:
//这个标记为版本2
//正确的,不会出现BUG的定义循序
timer_oc_parameter_struct timer_ocintpara;
timer_parameter_struct timer_initpara;
换完之后我再编译烧录进去后(程序就只改了这一出,其他都没有动),发现另外三个通道都成功输出了PWM波,于是我就很懵逼。这只是定义结构体变量的位置循序变了一下之后,怎么就一下子成功了,而且为什么会只单单影响三个通道,而不影响最后一个通道,这就很奇怪了。
而且另外只有高级定时器(这里我只试了高级定时器0,高级定时器7还没有试过是否会这样子)会出现这样子的问题,因为我还用了基本定时器TIMER3和定时器2,其循序就是版本1的顺序,但是定时器3的四个通道还有定时器2的两个通道输出都是正常的,所以就猜测可能是只要高级定时器会遇到这种BUG问题。这个就很懵逼,应该不是配置问题,可能是一个结构设计缺陷。
解决方法
所以,如果也有开发这款芯片的小伙伴,如果在使用高级定时器来输出PWM波也遇到了前三个通道不行,而最后一个通道可以的情况下,可以试试看我的这个解决方法。
就是将其你的配置PWM结构体定义变量这句放在定义定时器结构体变量的前面。
//解决方法循序:
timer_oc_parameter_struct timer_ocintpara;
timer_parameter_struct timer_initpara;
也就是版本2的配置循序。
如果大家不相信的话,可以去试试看,就知道了。
分享出来,也是希望可以帮助到也遇到此问题的小伙伴,同样也希望如果有知道原因的小伙伴,可以下方留言告知一下~
本人水平有限,上述信息仅供参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~
边栏推荐
- 复制延迟案例(2)-读己之写
- 【C语言程序】求直角三角形边长
- CaDDN paper reading of monocular 3D target detection
- Go 语言是如何实现切片扩容的?【slice】
- 【STM32】ADC采集光敏数据(不看库函数手册进行配置)
- MySQL存储函数详解
- 如何解决QByteArray添加quint16双字节时错误?
- 七月阅读:《刘慈欣科幻短篇小说集Ⅰ》笔记
- Deep Blue Academy - Visual SLAM Lecture Fourteen - Chapter 5 Homework
- MySQL read-write separation mysql-proxy deployment
猜你喜欢
投资组合分析:portfolio_analysis.Tangenvy_portfolio(切点组合)
开放原子开源峰会落幕,百度超级链牵头成立XuperCore开源工作组
多主复制下处理写冲突(4)-多主复制拓扑
jetracer_pro_2GB AI Kit系统安装使用说明
无主复制系统(2)-读写quorum
SCI写作攻略——附带常见英语写作句式
redis基础入门
Your device is corrupt. It cant‘t be trusted and may not work propely.
MapFi paper structure organization
如何将PDF中的一部分页面另存为新的PDF文件
随机推荐
Nexus 5手机使用Nexmon工具获取CSI信息
被大厂强制毕业,两个月空窗期死背八股文,幸好上岸,不然房贷都还不上了
ScholarOne Manuscripts submits journal LaTeX file and cannot convert PDF successfully!
吴恩达机器学习系列课程笔记——第十六章:推荐系统(Recommender Systems)
力扣 剑指 Offer 56 - I. 数组中数字出现的次数
张成分析(spanning test):portfolio_analysis.Spanning_test
并发性,时间和相对性(1)-确定前后关系
Visual SLAM Lecture Fourteen - Lecture 13 Practice: Designing a SLAM system (the most detailed code debugging and running steps)
复制延迟案例(1)-最终一致性
RuoYi-App启动教程
轮询和长轮询的区别
面试官:大量请求 Redis 不存在的数据,从而打倒数据库,有什么方案?
使用 Fastai 构建食物图像分类器
MySQL读写分离mysql-proxy部署
数据复制系统设计(3)-配置新的从节点及故障切换
数据复制系统设计(2)-同步复制与异步复制
Transfer of UKlog.dat and QQ, WeChat files
多主复制的适用场景(1)-多IDC
3D object detection dataset
OpenPCDet environment configuration of 3 d object detection and demo test