|
我驗證了一下用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)
下載附件
2022-12-20 15:47 上傳
評分
-
查看全部評分
|