GD32F103C8单片机的PWM输出试验

控制/MCU

1815人已加入

描述

在国产化芯片浪潮崛起的今天,给大家介绍一款国产单片机,它就是兆易创新“GD”,今天主要给大家介绍的是关于这款单片机官方DEMO的PWM输出试验,重点是使用keil仿真输出波形。

大家在使用keil的Debug模式时,可能看到过下面这个图标,它就是用来观察波形的,输入特定的GPIO引脚,就可以直观看出波形。

定时器

来自keil帮助文档介绍内容

下面以GD32F10x系列的一款单片机GD32F103C8T6的DEMO程序来给大家演示这个功能怎么使用。 首先,我们进入兆易创新官网,然后找到下图中的官方DEMO,点击下载。

定时器
官网下载

定时器

用到的文件

然后将上图中的文件复制到Template文件夹下,再用keil打开工程文件即可。 打开工程后,我们看到Device中默认选择的时GD32F107VC,因为这是官方DEMO基于该芯片创建的工程,但是我们使用的时GD32F103C8,所以需要将选择为GD32F103C8。

定时器

默认Device

定时器

更改Device

更改完Device后,点击C/C++选项,将Define:更改为USE_STDPERIPH_DRIVER,GD32F10X_MD,这个文件是根据不同内存的单片机决定的,所以需要更改为MD。

定时器更改Define

然后到这一步,编译,编译成功后点击魔术棒-Debug,选择Use simulator,点击OK,最后点击Debug,进入调试模式。 根据官方给出的备注,使用的定时器1对应的3个通道,分别输出不同的占空比,对应3个GPIOA1、GPIOA2、GPIOA3。

gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);

定时器

引脚定义

在Debug模式下,按照下图中点击对应位置。

定时器

Debug界面调出示波器

弹出变量输入界面,点击新建,分别输入PORTA.1回车、PORTA.2回车、PORTA.3回车,注意需要将显示类型更改为Bit。 输入的引脚是和我们定义的PWM输出引脚有关的,这个要根据不同的引脚来修改。

定时器

变量输入

定时器

更改显示类型

到这里,就可以执行仿真了。 点击复位-Run全速运行,即可看到三个通道输出的波形,红色代表25%占空比,绿色代表50%占空比,蓝色代表75%占空比。

定时器
三个通道输出的波形

我们计算一下,程序里面设定的时钟源为PLL,最后APB1_Clock为72Mhz,定时器1的预分频系数为1,不分频,ARR计数值为10000,PWM频率=(72M/72)/(10000)=100Hz,T=1/F=0.01s。 20%=0.002s/0.01s*100;50%=0.005s/0.01s*100;75%=0.0075s/0.01s*100;

timer_initpara.prescaler         = (72-1);
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = (10000-1);
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER1,&timer_initpara);

定时器

PWM频率100Hz

定时器

75%占空比波形

经过计算,仿真的波形和预想的结果是一致的,所以这个方法比较适用于手边没有开发板的情况下,可以使用这一功能去验证。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分