請教一下,CH573F使用定時器模擬多路PWM的問題。

關(guān)鍵代碼:

uint16_t cont = 0;//計數(shù)

uint8_t pwm_H[6]={5,8,11,14,17,20};//上次比較值

uint8_t pwm_L[6]={5,8,11,14,17,20};//此次比較值

//主時鐘

SetSysClock(CLK_SOURCE_PLL_60MHz);

//IO口配置

GPIOA_ResetBits(GPIO_Pin_10);?

GPIOA_ModeCfg(GPIO_Pin_10, GPIO_ModeOut_PP_5mA);

//定時器配置

TMR0_TimerInit(FREQ_SYS / 10000);? ? ?//100uS進入一次中斷? ??

TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END);?

PFIC_EnableIRQ(TMR0_IRQn);

//定時器中斷

__attribute__((interrupt("WCH-Interrupt-fast")))

__attribute__((section(".highcode")))

void TMR0_IRQHandler(void) // TMR0 定時中斷

{

? ? if(TMR0_GetITFlag(TMR0_3_IT_CYC_END))

? ? {

? ? ? ? TMR0_ClearITFlag(TMR0_3_IT_CYC_END); // 清除中斷標(biāo)志

? ? ? ? cont++;

? ? ? ? if(cont < 5 )

? ? ? ? {

? ? ? ? ? ? return;

? ? ? ? }

? ? ? ? else if(5 <= cont < 45)

? ? ? ? {

? ? ? ? ? ? if(cont <= pwm_H[0])

? ? ? ? ? ? ? ? GPIOA_SetBits(GPIO_Pin_12);

? ? ? ? ? ? else

? ? ? ? ? ? ? ? GPIOA_ResetBits(GPIO_Pin_12);

??????????(其余IO翻轉(zhuǎn)操作省略)

? ? ? ? ?}

? ? ? ? else if(cont >= 200)//一個周期到了,更新比較值

? ? ? ? {

? ? ? ? ? ? ? cont = 0;

? ? ? ? ? ? ? for(int8_t i=0;i<6;i++)

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? pwm_H[i] = pwm_L[i];

? ? ? ? ? ? ? }

? ? ? ? }

? ? }

}

我發(fā)現(xiàn)將?cont 類型設(shè)置成uint8_t才可以正常輸出PWM,設(shè)置成uint16_t就不輸出了。按理說設(shè)置成uint16_t沒什么影響啊。

您好,按理說設(shè)置成無符號16位數(shù)確實應(yīng)該沒什么影響。

此處代碼改一改,用兩個邏輯拆分開。else if((5 <= cont) && (cont < 45))

image.png


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频