标题: STC32G单片机PWM测脉冲周期源代码 [打印本页]

作者: billliu66    时间: 2022-12-20 13:31
标题: STC32G单片机PWM测脉冲周期源代码
我验证了一下用STC32G PWM测试脉冲周期,源代码如下:
/*main.c
  Designed by Bill Liu
  Version 0.0
  Modified last by Bill Liu , 12/20/2022
*/

#include "main.h"
#include "STC32G_Delay.h"

ui8 str[20] = {0};
ui32 nPusle = 0;

ui16 tem1, tem2;
ui16 capold;
ui16 capnew;

void PWMA_ISR() interrupt 26
{
        if(PWMA_SR1 & 0x02)
        {
                capold = capnew;
                capnew =PWMA_CCR1H;
                capnew = (capnew << 8) + PWMA_CCR1L;
                nPusle = capnew - capold;
                PWMA_SR1 &= ~0x02;
        }
}

void main()
{
        SysInit();
        Uart1_Init(VBAUD_8BITS,G1, 0, 9600);
        STC32G_P3MODE_BIIO(PIN5);
        T0ClkOutInit(3000);
        TR0 = 1;
        
        P0M1 = 0x00;
        P0M0 = 0x00;
        P1M1 = 0x00;
        P1M0 = 0x00;
        
        PWMA_ENO = 0x00;
        PWMA_PS = 0x00;
        PWMA_CCMR1 = 0x01;
        PWMA_SMCR = 0x56;
        PWMA_CCER1 = 0x01;
        
        //PWMA_IER = 0x02;
        PWMA_CR1 = 0x00;
        PWMA_CR1 |= 0x01;
        //EA =1;
        
        while(!(PWMA_SR1 & 0x02));
        tem1 = PWMA_CCR1H;
        tem1 <<=        8;
        tem1 += PWMA_CCR1L;
        PWMA_SR1 &=  ~0x02;
        while(!(PWMA_SR1 & 0x02));                             tem2 = PWMA_CCR1H;
        tem2 <<=        8;
        tem2 += PWMA_CCR1L;
        PWMA_SR1 &=  ~0x02;
        nPusle = tem2 -tem1;
        
        while(1)
        {
                LongToString(nPusle,str);        
                Uart1_SendString(str);
                Uart1_SendString("\r\n");
                Delayxms(1000);
        }
}
//End of main()

在出口助手上看到的结果如下(单片机的试钟周期为30MHz):

1.png (7.88 KB, 下载次数: 70)

1.png

作者: 大漠孤烟001    时间: 2022-12-22 11:37
    感谢楼主精彩分享!也可以参考STC32G12K128实验箱范例程序第80个(高级PWM输出-周期可调、脉冲计数),需要样品等支持请联系我








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1