今天在学习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, 下载次数: 89)
|