找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3306|回复: 16
打印 上一主题 下一主题
收起左侧

stc32g12k128单片机输出PWM波例程

  [复制链接]
跳转到指定楼层
楼主
ID:1039438 发表于 2022-9-18 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天在学习stc32g12k128单片机的PWM功能时感受到了它的强悍,它能同时输出8路不同的PWM信号,并且除了使用8个IO口外不占用其它任何系统资源,比如定时器,中断及MCU时间。为方便初学者认识这个功用的优点,我写了一个输出四路PWM信号的例程,展示一下这个功能的用法,例程可以直接使用,也可以方便的放进其它程序中做为一个函数调用,该例程经采用stc32g12k128芯片的核心板降龙棍和屠龙刀验证通过,并使用示波器和脉冲采集测量方式检验证实。希望对初学stc32g12k128的朋友有所帮助。下面是程序主体部分,完整内容可下载附件获得。
更新的程序中加入了频率范围向下扩展的语句
单片机源程序如下:
#include <STC32G.H>
#include "mcu_initial.h"
#define sysclock 11059200
#define down_freq 20 //频率向下扩展比例。设置值不为0的正整数。也不要太大,以免溢出。
#define PWMA_freq 220        //PWMA输出频率,单位HZ
#define PWMB_freq 1000//        PWMB输出频率
#define duty1  0.1//cc1占空比(0.01~0.999)
#define duty3  0.2//cc3占空比
#define duty5  0.3//cc5占空比
#define duty6  0.4//cc6占空比
void mcu_initial(void)
{
unsigned long int za,zb,zc;//计算常数
        P1M1=0x00;
        P1M0=0x00;   //P1配置为准双向
        P2M1=0x00;
        P2M0=0x00;   //P2配置为准双向
        P3M1=0x00;
        P3M0=0x00;   //P3配置为准双向                  
                P4M1=0x00;
        P4M0=0x00;   //P4配置为准双向                  
P5M0 = 0x00;
P5M1 = 0x00;
  EAXFR = 1; //使能访问 XFR
CKCON = 0x00; //设置外部数据总线速度为最快
WTST = 0x00; //设置程序代码等待参数,
//赋值为 0 可将 CPU 执行程序的速度设置为最快
za=sysclock/PWMA_freq-1;//PWMA计数器周期预设值
        zb=sysclock/PWMB_freq-1;//PWMB计数器预设值
PWMB_PSCRL=down_freq-1;//更新加入的语句。配合向下扩展频率定义语句
         PWMA_PS=0x00;//默认值,在P1.4输出PWMA3,在P1.0输出PWMA1
         PWMA_CCER1 = 0x00; //关闭通道cc1
        PWMA_CCER2 = 0x00; //关闭通道cc3

PWMA_CCMR1=0x60;//设置cc1为PWM模式1输出
PWMA_CCMR3=0x60;//设置cc3为PWM模式1输出
PWMA_CCER1 = 0x01; //使能cc1输出
PWMA_CCER2 = 0x01; //使能cc3

PWMA_ARRH=za/256;//PWMA周期高位
PWMA_ARRL=za%256;//PWMA周期低位

zc=za*duty1;
PWMA_CCR1H=zc/256;//PWM1P占空比高位
PWMA_CCR1L=zc%256;//PWM1P占空比低

zc=za*duty3;
PWMA_CCR3H=zc/256;//PWM3P占空比高位
PWMA_CCR3L=zc%256;//PWM3P占空比低位

PWMB_PS=0x00;//选择在P2.0输出PWM5.P2.1输出PWM6
PWMB_CCER1=0x00;//写CCMRx前必须先清零,关闭通道
PWMB_CCMR1=0X60;//设置cc5为PWM模式1输出
PWMB_CCMR2=0X60;//设置cc6为PWM模式1输出
PWMB_CCER1=0x11;//使能cc5通道和cc6通道

PWMB_ARRH=zb/256;//设置周期
PWMB_ARRL =zb%256;

zc=zb*duty5;
PWMB_CCR5H=zc/256;//设置占空比
PWMB_CCR5L=zc%256;

zc=zb*duty6;
PWMB_CCR6H=zc/256;//设置占空比
PWMB_CCR6L=zc%256;

PWMA_ENO=0x11;//使能PWM1P和PWM3P
PWMB_ENO = 0x05; //使能 PWM5P和PWM6 端口输出

PWMA_BKR = 0x80; //使能主输出
PWMB_BRK = 0x80; //使能主输出

PWMB_CR1 = 0x01; //开始计时
PWMA_CR1=0x01;//开始计时
        //HSPWMB_CFG=0x07;//开启高速高级PWMA模式和中断响应
        //USBCLK|=0xc0;//使能PLL时钟倍频,时钟选择24M

}

Keil5代码下载: Keil代码.7z (32.62 KB, 下载次数: 66)

评分

参与人数 2黑币 +54 收起 理由
STC庄伟 + 4 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:262 发表于 2022-10-14 17:31 | 只看该作者
好东东 mcu_initial.h可以用您在其他工程里面的吗?
回复

使用道具 举报

板凳
ID:961114 发表于 2022-10-15 09:51 | 只看该作者
STC32G12K128系列PWM的强大需要花时间消化,需要测试官方的范例程序
回复

使用道具 举报

地板
ID:1039438 发表于 2022-10-15 16:30 | 只看该作者
heicad 发表于 2022-10-14 17:31
好东东 mcu_initial.h可以用您在其他工程里面的吗?

可以呀,只是注意其中的设置与程序中其它任务的设置不要冲突
回复

使用道具 举报

5#
ID:1039438 发表于 2022-10-15 20:12 | 只看该作者
STC庄伟 发表于 2022-10-15 09:51
STC32G12K128系列PWM的强大需要花时间消化,需要测试官方的范例程序

我是初学者,目前只做了脉冲捕捉和频率测量的验证,DAC类还没学到。
回复

使用道具 举报

6#
ID:61207 发表于 2022-10-28 20:45 | 只看该作者
丽江春水 发表于 2022-10-15 20:12
我是初学者,目前只做了脉冲捕捉和频率测量的验证,DAC类还没学到。

可否分享一下你的成果
回复

使用道具 举报

7#
ID:1039438 发表于 2022-10-29 13:05 | 只看该作者
可以,能为大家做点事,很高兴。谢谢。
回复

使用道具 举报

8#
ID:998180 发表于 2022-11-19 16:16 | 只看该作者
正在学习STC32,多谢了
回复

使用道具 举报

9#
ID:1039438 发表于 2022-11-19 18:50 | 只看该作者
lirenhain00 发表于 2022-11-19 16:16
正在学习STC32,多谢了

欢迎指点,希望多些交流。
回复

使用道具 举报

10#
ID:159514 发表于 2022-11-23 16:51 | 只看该作者
有个问题想问一下,如果这个PWM工作的过程中产生了外部中断,这个PWM会不会停?
回复

使用道具 举报

11#
ID:1039438 发表于 2022-11-24 09:29 | 只看该作者
长桥卧波 发表于 2022-11-23 16:51
有个问题想问一下,如果这个PWM工作的过程中产生了外部中断,这个PWM会不会停?

不会停,PWM是相对独立的外设。
回复

使用道具 举报

12#
ID:1048397 发表于 2022-11-24 11:05 | 只看该作者
谢谢楼主,好资料,51黑有你更精彩!!!
回复

使用道具 举报

13#
ID:159514 发表于 2022-11-30 10:17 | 只看该作者
丽江春水 发表于 2022-11-24 09:29
不会停,PWM是相对独立的外设。

那就好,以前15系列的就会停,非常让人困扰。
回复

使用道具 举报

14#
ID:1039438 发表于 2022-11-30 13:29 | 只看该作者
长桥卧波 发表于 2022-11-30 10:17
那就好,以前15系列的就会停,非常让人困扰。

15系列不该停,你再看看程序上有什么语句会让PWM停。
回复

使用道具 举报

15#
ID:1099971 发表于 2023-11-16 16:53 | 只看该作者
STC庄伟 发表于 2022-10-15 09:51
STC32G12K128系列PWM的强大需要花时间消化,需要测试官方的范例程序

请问在哪可以下载呀?
回复

使用道具 举报

16#
ID:1085085 发表于 2023-11-17 09:03 | 只看该作者
wangshengyuan 发表于 2023-11-16 16:53
请问在哪可以下载呀?

您好,可去他们官方STCAI下载
回复

使用道具 举报

17#
ID:1078947 发表于 2023-11-18 19:17 | 只看该作者
优秀。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表