STC32系列单片机PWM 自定义函数

简介        

      本文是针对STC32G系列单片机16位高速PWM 输出的代码总结,其中包括如何使能PWM输出、使能互补输出、定义端口输出,死区、频率和占空比的设置。

代码   

           以下代码是对于STC32G12K128单片机的PWM输出代码,但对于STC32G系列单片机,这些参数都可套用和设置。PWM参数其中包括自定义占空比和频率输出 ,P2.0 、P2.1输出互补PWM、死区为0。


#include <STC32G.H>
#define  u8 unsigned char

void IO_Init(void)
    {
        EAXFR = 1;              //使能访问 XFR 
        WTST = 0x00;            //赋值为 0 可将 CPU 执行程序的速度设置为最快   
	    P4M1=0x00;P4M0=0x00;    // 配置IO口 设置为准双向口
	    P2M1=0x00;P2M0=0x00;
	    P0M1=0x00;P0M0=0x00;
	    P3M1=0x00;P3M0=0x00;
        P1M1=0x00;P1M0=0x00;     
    }
void PWM_Init(void)
   {
		PWMA_CCER1 =0x00;
		PWMA_CCMR1 = 0x60;
		PWMA_CCER1 =0x05;
        PWMA_DTR=0X00;
        PWMA_PS=0X01;
		PWMA_ENO =0x03;
	
		PWMA_BKR =0x80;
		PWMA_CR1 =0x01;
   }
void pwmupdate(float D,float F)
   {
	    PWMA_ARRH = (12000.0/F)/256.0;                   
        PWMA_ARRL = (unsigned int)(12000.0/F)%256;
	    PWMA_CCR1H=((12000/F)*D)/256;          
	    PWMA_CCR1L=(unsigned int)((12000/F)*D)%256;   
     
   }

说明

       STC32G系列代码大部分都是通过对寄存器进行操作以及C语言的结合,虽不如STM32系列可通过HAL库进行操作,但是对于新手刚接触单片机,由51单片机向STM32系列的一个很好的产品,可以很好的理解一些寄存器操作和内容,其中抗干扰性还是不错的。

 

 

 

        PWMA_CCER1 =0x00;

        PWMA_CCER1寄存器中的捕获/比较输出使能位(CC1E)用于启用或禁用特定的PWM通道。当设置为1时,允许捕获计数器的值到捕获寄存器中,或者允许比较输出。注意的是写CCMR1前必须先清零CC1E关闭通道,即可让PWMA_CCER1 =0x00;                                                               当设置完CCMR1后再设置其通道PWMA_CCER1 =0x05;为配置输出比较通道(即输出互补PWM)若为0X01为使能CC1通道(即输出一路PWM),本文设置的是输出两路互补PWM。

        PWMA_CCMR1 = 0x60;

         PWMA_CCMR1 为配置PWM的输出模式,本次设置的为模式一

320fc8c9f20347fa8e5bda6109b87090.png

        PWMA_DTR=0X00;

        当设置为输出两路互补PWM时可设置PWMA_DTR寄存器来配置死区时间,本文是设置为0。具体时间设置参考:

b38c6d8981614b2a9410e78e5401d065.png

死区设置

        PWMA_ENO =0x03;

       PWM_ENO配置输出通道使能,本文使能的是PWMA1P  PWMA1N,具体通道输出使能如下:

a11123ef3e3d42249dec36468c7a57ae.png

        PWMA_BKR =0x80;   
        PWMA_CR1 =0x01;

        PWMA_BKR =0x80;   为使能主输出     PWMA_CR1 =0x01;开始计时

        PWMA_PS=0X01; 

        此寄存器可以对输出PWM的通道进行选择,初始通道为P1.0,即PWMA_PS=0X00。如果使能了捕获输出(即PWM波互补输出),初始通道则为P1.0、P1.1,值得注意的是其中占空比改变的是PWM1P,而PWM1N则是互补输出。

f0f1807595d44ba9ab6ced2f89426897.png

输出通道选择

 

        PWMA_ARRH = (12000.0/F)/256.0;                   
        PWMA_ARRL = (unsigned int)(12000.0/F)%256;
	    PWMA_CCR1H=((12000/F)*D)/256;          
	    PWMA_CCR1L=(unsigned int)((12000/F)*D)%256; 

PWMA_ARRH 、PWMA_ARRL 分别为配置PWM频率的高八位和低八位,F为设置PWM的频率,单位为KHZ;PWMA_CCR1H 、 PWMA_CCR1L分别为配置PWM占空比的高八位和低八位,D为设置PWM的占空比,范围为0-1。

总结

        本文将STC32 PWM输出的频率和占空比封装成了一个函数,为后续调用输出。值得注意的是在使用该函数时,必须先初始化IO口和PWM的初始化。同时想更加详细了解请看STC32手册,谢谢。

(注:不喜白嫖,如对你有帮助请不吝啬您的点赞收藏+关注,如有错误,请批评校正)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值