当前位置:网站首页>使用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的配置循序。
如果大家不相信的话,可以去试试看,就知道了。
分享出来,也是希望可以帮助到也遇到此问题的小伙伴,同样也希望如果有知道原因的小伙伴,可以下方留言告知一下~
本人水平有限,上述信息仅供参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~
边栏推荐
- 7亿听众背后的在线音频掘金故事
- 分布式系统的一致性与共识(1)-综述
- Research Notes (8) Deep Learning and Its Application in WiFi Human Perception (Part 1)
- Platts Analysis-MATLAB Toolbox Function
- 吴恩达机器学习系列课程笔记——第九章:神经网络的学习(Neural Networks: Learning)
- C语言可以应用在哪些领域?
- SCI writing strategy - with common English writing sentence patterns
- C# Thread IsBackground作用
- SCI写作攻略——附带常见英语写作句式
- HyperLynx中层叠设计实例
猜你喜欢
随机推荐
深度剖析-class的几个对象(utlis,component)-瀑布流-懒加载(概念,作用,原理,实现步骤)
MapFi论文架构整理
[Win11] PowerShell cannot activate Conda virtual environment
深度学习基础之batch_size
MapFi paper structure organization
深蓝学院-手写VIO作业-第一章
Jetson Nano 2GB Developer Kit Installation Instructions
数学建模学习(76):多目标线性规划模型(理想法、线性加权法、最大最小法),模型敏感性分析
Deep Blue Academy - 14 Lectures on Visual SLAM - Chapter 7 Homework
【STM32】ADC采集光敏数据(不看库函数手册进行配置)
ROS visualization of 3D target detection
普氏分析法-MATLAB工具箱函数
如何让固定点的监控设备在EasyCVR平台GIS电子地图上显示地理位置?
Deep Blue Academy - Fourteen Lectures of Visual SLAM - Chapter 4 Homework
C# Thread IsBackground作用
日本痴汉打赏女主播1.5亿,结果。。。
视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)
C语言可以应用在哪些领域?
micro-ros arduino esp32 ros2 笔记
科研笔记(七) 基于路径规划和WiFi指纹定位的多目的地室内导航









