|
今天在學(xué)習(xí)stc32g12k128單片機(jī)的PWM功能時(shí)感受到了它的強(qiáng)悍,它能同時(shí)輸出8路不同的PWM信號(hào),并且除了使用8個(gè)IO口外不占用其它任何系統(tǒng)資源,比如定時(shí)器,中斷及MCU時(shí)間。為方便初學(xué)者認(rèn)識(shí)這個(gè)功用的優(yōu)點(diǎn),我寫了一個(gè)輸出四路PWM信號(hào)的例程,展示一下這個(gè)功能的用法,例程可以直接使用,也可以方便的放進(jìn)其它程序中做為一個(gè)函數(shù)調(diào)用,該例程經(jīng)采用stc32g12k128芯片的核心板降龍棍和屠龍刀驗(yàn)證通過,并使用示波器和脈沖采集測量方式檢驗(yàn)證實(shí)。希望對(duì)初學(xué)stc32g12k128的朋友有所幫助。下面是程序主體部分,完整內(nèi)容可下載附件獲得。
更新的程序中加入了頻率范圍向下擴(kuò)展的語句
單片機(jī)源程序如下:
#include <STC32G.H>
#include "mcu_initial.h"
#define sysclock 11059200
#define down_freq 20 //頻率向下擴(kuò)展比例。設(shè)置值不為0的正整數(shù)。也不要太大,以免溢出。
#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;//計(jì)算常數(shù)
P1M1=0x00;
P1M0=0x00; //P1配置為準(zhǔn)雙向
P2M1=0x00;
P2M0=0x00; //P2配置為準(zhǔn)雙向
P3M1=0x00;
P3M0=0x00; //P3配置為準(zhǔn)雙向
P4M1=0x00;
P4M0=0x00; //P4配置為準(zhǔn)雙向
P5M0 = 0x00;
P5M1 = 0x00;
EAXFR = 1; //使能訪問 XFR
CKCON = 0x00; //設(shè)置外部數(shù)據(jù)總線速度為最快
WTST = 0x00; //設(shè)置程序代碼等待參數(shù),
//賦值為 0 可將 CPU 執(zhí)行程序的速度設(shè)置為最快
za=sysclock/PWMA_freq-1;//PWMA計(jì)數(shù)器周期預(yù)設(shè)值
zb=sysclock/PWMB_freq-1;//PWMB計(jì)數(shù)器預(yù)設(shè)值
PWMB_PSCRL=down_freq-1;//更新加入的語句。配合向下擴(kuò)展頻率定義語句
PWMA_PS=0x00;//默認(rèn)值,在P1.4輸出PWMA3,在P1.0輸出PWMA1
PWMA_CCER1 = 0x00; //關(guān)閉通道cc1
PWMA_CCER2 = 0x00; //關(guān)閉通道cc3
PWMA_CCMR1=0x60;//設(shè)置cc1為PWM模式1輸出
PWMA_CCMR3=0x60;//設(shè)置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前必須先清零,關(guān)閉通道
PWMB_CCMR1=0X60;//設(shè)置cc5為PWM模式1輸出
PWMB_CCMR2=0X60;//設(shè)置cc6為PWM模式1輸出
PWMB_CCER1=0x11;//使能cc5通道和cc6通道
PWMB_ARRH=zb/256;//設(shè)置周期
PWMB_ARRL =zb%256;
zc=zb*duty5;
PWMB_CCR5H=zc/256;//設(shè)置占空比
PWMB_CCR5L=zc%256;
zc=zb*duty6;
PWMB_CCR6H=zc/256;//設(shè)置占空比
PWMB_CCR6L=zc%256;
PWMA_ENO=0x11;//使能PWM1P和PWM3P
PWMB_ENO = 0x05; //使能 PWM5P和PWM6 端口輸出
PWMA_BKR = 0x80; //使能主輸出
PWMB_BRK = 0x80; //使能主輸出
PWMB_CR1 = 0x01; //開始計(jì)時(shí)
PWMA_CR1=0x01;//開始計(jì)時(shí)
//HSPWMB_CFG=0x07;//開啟高速高級(jí)PWMA模式和中斷響應(yīng)
//USBCLK|=0xc0;//使能PLL時(shí)鐘倍頻,時(shí)鐘選擇24M
}
Keil5代碼下載:
Keil代碼.7z
(32.62 KB, 下載次數(shù): 89)
2022-10-17 16:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|