找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5773|回復(fù): 18
收起左側(cè)

stc32g12k128單片機(jī)輸出PWM波例程

  [復(fù)制鏈接]
ID:1039438 發(fā)表于 2022-9-18 08:58 | 顯示全部樓層 |閱讀模式
今天在學(xué)習(xí)stc32g12k128單片機(jī)的PWM功能時感受到了它的強(qiáng)悍,它能同時輸出8路不同的PWM信號,并且除了使用8個IO口外不占用其它任何系統(tǒng)資源,比如定時器,中斷及MCU時間。為方便初學(xué)者認(rèn)識這個功用的優(yōu)點(diǎn),我寫了一個輸出四路PWM信號的例程,展示一下這個功能的用法,例程可以直接使用,也可以方便的放進(jìn)其它程序中做為一個函數(shù)調(diào)用,該例程經(jīng)采用stc32g12k128芯片的核心板降龍棍和屠龍刀驗證通過,并使用示波器和脈沖采集測量方式檢驗證實(shí)。希望對初學(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;//計算常數(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計數(shù)器周期預(yù)設(shè)值
        zb=sysclock/PWMB_freq-1;//PWMB計數(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; //開始計時
PWMA_CR1=0x01;//開始計時
        //HSPWMB_CFG=0x07;//開啟高速高級PWMA模式和中斷響應(yīng)
        //USBCLK|=0xc0;//使能PLL時鐘倍頻,時鐘選擇24M

}

Keil5代碼下載: Keil代碼.7z (32.62 KB, 下載次數(shù): 89)

評分

參與人數(shù) 2黑幣 +54 收起 理由
STC莊偉 + 4 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:262 發(fā)表于 2022-10-14 17:31 | 顯示全部樓層
好東東 mcu_initial.h可以用您在其他工程里面的嗎?
回復(fù)

使用道具 舉報

ID:961114 發(fā)表于 2022-10-15 09:51 | 顯示全部樓層
STC32G12K128系列PWM的強(qiáng)大需要花時間消化,需要測試官方的范例程序
11.jpg 222.jpg 333.jpg
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-10-15 16:30 | 顯示全部樓層
heicad 發(fā)表于 2022-10-14 17:31
好東東 mcu_initial.h可以用您在其他工程里面的嗎?

可以呀,只是注意其中的設(shè)置與程序中其它任務(wù)的設(shè)置不要沖突
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-10-15 20:12 | 顯示全部樓層
STC莊偉 發(fā)表于 2022-10-15 09:51
STC32G12K128系列PWM的強(qiáng)大需要花時間消化,需要測試官方的范例程序

我是初學(xué)者,目前只做了脈沖捕捉和頻率測量的驗證,DAC類還沒學(xué)到。
回復(fù)

使用道具 舉報

ID:61207 發(fā)表于 2022-10-28 20:45 | 顯示全部樓層
麗江春水 發(fā)表于 2022-10-15 20:12
我是初學(xué)者,目前只做了脈沖捕捉和頻率測量的驗證,DAC類還沒學(xué)到。

可否分享一下你的成果
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-10-29 13:05 | 顯示全部樓層
可以,能為大家做點(diǎn)事,很高興。謝謝。
回復(fù)

使用道具 舉報

ID:998180 發(fā)表于 2022-11-19 16:16 | 顯示全部樓層
正在學(xué)習(xí)STC32,多謝了
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-11-19 18:50 | 顯示全部樓層
lirenhain00 發(fā)表于 2022-11-19 16:16
正在學(xué)習(xí)STC32,多謝了

歡迎指點(diǎn),希望多些交流。
回復(fù)

使用道具 舉報

ID:159514 發(fā)表于 2022-11-23 16:51 | 顯示全部樓層
有個問題想問一下,如果這個PWM工作的過程中產(chǎn)生了外部中斷,這個PWM會不會停?
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-11-24 09:29 | 顯示全部樓層
長橋臥波 發(fā)表于 2022-11-23 16:51
有個問題想問一下,如果這個PWM工作的過程中產(chǎn)生了外部中斷,這個PWM會不會停?

不會停,PWM是相對獨(dú)立的外設(shè)。
回復(fù)

使用道具 舉報

ID:1048397 發(fā)表于 2022-11-24 11:05 | 顯示全部樓層
謝謝樓主,好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

ID:159514 發(fā)表于 2022-11-30 10:17 | 顯示全部樓層
麗江春水 發(fā)表于 2022-11-24 09:29
不會停,PWM是相對獨(dú)立的外設(shè)。

那就好,以前15系列的就會停,非常讓人困擾。
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-11-30 13:29 | 顯示全部樓層
長橋臥波 發(fā)表于 2022-11-30 10:17
那就好,以前15系列的就會停,非常讓人困擾。

15系列不該停,你再看看程序上有什么語句會讓PWM停。
回復(fù)

使用道具 舉報

ID:1099971 發(fā)表于 2023-11-16 16:53 | 顯示全部樓層
STC莊偉 發(fā)表于 2022-10-15 09:51
STC32G12K128系列PWM的強(qiáng)大需要花時間消化,需要測試官方的范例程序

請問在哪可以下載呀?
回復(fù)

使用道具 舉報

ID:1085085 發(fā)表于 2023-11-17 09:03 | 顯示全部樓層
wangshengyuan 發(fā)表于 2023-11-16 16:53
請問在哪可以下載呀?

您好,可去他們官方STCAI下載
回復(fù)

使用道具 舉報

ID:1078947 發(fā)表于 2023-11-18 19:17 | 顯示全部樓層
優(yōu)秀。。。。
回復(fù)

使用道具 舉報

ID:884711 發(fā)表于 2024-5-6 21:37 | 顯示全部樓層
路過學(xué)習(xí),謝謝分享!
回復(fù)

使用道具 舉報

ID:1012889 發(fā)表于 2024-6-1 03:19 | 顯示全部樓層
路過學(xué)習(xí),謝謝分享!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表