CH563評(píng)估板PWM的問題很讓人頭痛

之前曾經(jīng)發(fā)過一貼,我無法正常的產(chǎn)生PWM,但官方一直沒有回音。這個(gè)雙休不死心,又折騰了折騰。結(jié)果發(fā)現(xiàn)問題更讓我迷惑了。首先我僅僅是將之前的代碼中中斷配置的語句調(diào)整了一下次序,將這些代碼移到了PWM配置的前面,并且將輸出腳PWM2換成了PWM0,就在PB0腳上測(cè)到了正確的脈沖。但除了將輸出腳配置成PWM0時(shí)以外,配置成PWM1、PWM2、PWM3都無法在相應(yīng)管腳上得到脈沖。先看之前的代碼:

#include?"CH563SFR.H"
#include?"sysfreq.h"

__irq?void?IRQ_Handler()
{

if(R8_INT_FLAG_0&RB_IF_TMR0)
{
UINT8?i;
i=R8_TMR0_INT_FLAG;
if(i&RB_TMR_IF_DATA_ACT)
{
?????R8_TMR0_INT_FLAG?|=?RB_TMR_IF_DATA_ACT; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R8_INT_FLAG_0?|=?RB_IF_TMR0;?
}

if(i&RB_TMR_IF_CYC_END)
????????{
????????????????????R8_TMR0_INT_FLAG|=RB_TMR_IF_CYC_END;??
????????????????????R8_INT_FLAG_0?|=?RB_IF_TMR0;???
????????????????}
}


}

__irq?void?FIQ_Handler()
{

}

void?PWM_Init()
{
R8_PB_DIR_0|=PWM2;
R32_TMR0_FIFO=100000000/2;
R32_TMR0_CNT_END=100000000;
R8_TMR0_CTRL_MOD&=~(RB_TMR_MODE_NRZI|RB_TMR_ALL_CLEAR|RB_TMR_MODE_IN);
R8_TMR0_CTRL_MOD|=(RB_TMR_OUT_EN|RB_TMR_COUNT_EN)
;
R8_TMR0_INTER_EN?|=(RB_TMR_IE_CYC_END|RB_TMR_IE_DATA_ACT);

R8_INT_EN_IRQ_0|=RB_IE_IRQ_TMR0;
R8_INT_EN_IRQ_GLOB|=RB_IE_IRQ_GLOB;
}

int?main()
{
PWM_Init();

while(1)
{}
}


這個(gè)代碼無法在PWM2上得到正確的脈沖。但我僅僅將PWM_Init()函數(shù)里的語句次序調(diào)整了一下,同時(shí)將PWM2換成PWM0,就在PB0上得到了正確的脈沖。


void PWM_Init()


{


R8_TMR0_INTER_EN |=(RB_TMR_IE_CYC_END|RB_TMR_IE_DATA_ACT);//僅僅調(diào)整了語句次序,先配置了中斷,但這與手冊(cè)里的說明次序是完全相反的。

R8_INT_EN_IRQ_0|=RB_IE_IRQ_TMR0;

R8_INT_EN_IRQ_GLOB|=RB_IE_IRQ_GLOB;

? R8_TMR0_CTRL_MOD&=~(RB_TMR_MODE_NRZI|RB_TMR_ALL_CLEAR|RB_TMR_MODE_IN);


R8_TMR0_CTRL_MOD|=(RB_TMR_OUT_EN|RB_TMR_COUNT_EN) ;

R8_PB_DIR_0|=PWM0;????//在這里將原來的PWM2換成了PWM0

R32_TMR0_FIFO=100000000/2;

R32_TMR0_CNT_END=100000000;


}


上面的代碼就可以正常運(yùn)行了,本來我以為找到了正確的方法,可是問題又來了。當(dāng)我將PWM0換成其它輸出腳時(shí),比如PWM1。程序就又沒有反應(yīng)了,我不能在任何管腳上測(cè)到正確的脈沖。神呀,我徹底不知所措了,官方給個(gè)準(zhǔn)確、詳細(xì)的說明吧,不然沒法玩下去了。


PWM0輸出對(duì)應(yīng)引腳是PB0,三路PWM分別是對(duì)應(yīng)的腳輸出,你之前出現(xiàn)的問題跟順序無關(guān)。

?

R8_PB_DIR_0|=PWM0;????//在這里將原來的PWM2換成了PWM0

這句話只是將PB0腳方向置為輸出而已。


? ? ? ? ? ? ? ? ? ? ? ? ? ?

PWM0輸出對(duì)應(yīng)引腳是PB0,三路PWM分別是對(duì)應(yīng)的腳輸出,你之前出現(xiàn)的問題跟順序無關(guān)。

?

R8_PB_DIR_0|=PWM0;????//在這里將原來的PWM2換成了PWM0

這句話只是將PB0腳方向置為輸出而已。

? ? ? ? ? ? ? ? ? ? ? ?

那我要在PB4上得到脈沖怎么辦?R8_PB_DIR_0|=PWM2;這個(gè)無效,寫成R8_PB_DIR_0=0x10;也無效。只有PWM0有效。R8_PB_DIR_0設(shè)為除了PB0以外的管腳都無法得到輸出。另外,我不知你們那和情況是什么,反正在我這,順序就是有關(guān),同樣的代碼倒個(gè)次序就無法得到脈沖。我已經(jīng)試了很多次。


? ? ? ? ? ? ? ? ? ? ? ? ? ?

建議直接聯(lián)系025-52638371找張工

? ? ? ? ? ? ? ? ? ? ? ?

象這類問題,電話不好溝通的,又看不到代碼,說都說不清楚。其實(shí)很簡(jiǎn)單,給一個(gè)有效的讓除了PB0以外的管腳輸出PWM脈沖的例子代碼就可以解決問題了。


PWM0腳(PB0)對(duì)應(yīng)的是PWM0,也就是要配置定時(shí)器0;

PWM1腳(PB2)對(duì)應(yīng)的是PWM1,也就是要配置定時(shí)器1;

以此類推,需要使用哪路PWM則初始化對(duì)應(yīng)的寄存器,不能初始化PWM0而去看其他腳的輸出。

?


? ? ? ? ? ? ? ? ? ? ? ? ? ?

PWM0腳(PB0)對(duì)應(yīng)的是PWM0,也就是要配置定時(shí)器0;

PWM1腳(PB2)對(duì)應(yīng)的是PWM1,也就是要配置定時(shí)器1;

以此類推,需要使用哪路PWM則初始化對(duì)應(yīng)的寄存器,不能初始化PWM0而去看其他腳的輸出。

?

? ? ? ? ? ? ? ? ? ? ? ?

手冊(cè)真的要更新呀,手冊(cè)里沒有任何文字提到PWM輸出不能進(jìn)行管腳切換,事實(shí)上很多MCU的PWM輸出都是可以進(jìn)行多管腳切換的,如果不能應(yīng)該在手冊(cè)里進(jìn)行說明。

第二、手冊(cè)里對(duì)PWM寄存器設(shè)置的說明要更改,能否正常運(yùn)行的確與設(shè)置順序有關(guān)。手冊(cè)里的次序:

(1)、設(shè)置 PWM 總周期寄存器 R32_TMR_CNT_END,最小值為 1,該寄存器的值必須大于等于

R32_TMR_FIFO 寄存器的值;

(2)、設(shè)置數(shù)據(jù)寄存器 R32_TMR_FIFO,最小值為 0,對(duì)應(yīng)占空比 0%,最大值同 R32_TMR_CNT_END,

對(duì)應(yīng)占空比 100%,支持連續(xù)動(dòng)態(tài)數(shù)據(jù)(DMA),可以模仿出特殊波形;

(3)、將模式設(shè)置寄存器(R8_TMRx_CTRL_MOD)中的 RB_TMR_MODE_IN 位清 0,啟用 PWM 模式;同時(shí)

將 RB_TMR_ALL_CLEAR 位清 0 強(qiáng)制清除 FIFO 和 COUNT;如果需要設(shè)置重復(fù)次數(shù),則根據(jù)需要設(shè)置

RB_TMR_PWM_REPEAT 域。如果當(dāng)前定時(shí)器是 TIM0 或 TIM1,則需要將 RB_TMR_MODE_NRZI 位清 0,如果

當(dāng)前定時(shí)器是 TIM3,則需要將 RB_TMR3_MODE_COUNT 位清 0;

(4)、將模式設(shè)置寄存器(R8_TMRx_CTRL_MOD)中的 RB_TMR_COUNT_EN 位和 RB_TMR_OUT_EN 位置 1,

開啟 PWM 功能;

(5)、將 PWM 對(duì)應(yīng)的的 I/O 引腳設(shè)置為輸出;

(6)、如果需要啟用中斷則設(shè)置相應(yīng)的中斷使能寄存器位;

(7)、PWM 完成后,如果開啟中斷則產(chǎn)生相對(duì)應(yīng)的定時(shí)器中斷,同時(shí)通過讀取 TMR_INT_FLAG 寄存

器了解 PWM 是否完成以及 PWM 過程中是否產(chǎn)生錯(cuò)誤;

按這個(gè)次序PWM無法正常運(yùn)行,步驟(1)(2)應(yīng)該放在步驟(3)(4)后面PWM模塊才能正常執(zhí)行。我已經(jīng)測(cè)試過多次,這個(gè)問題百分百可重現(xiàn),建議你們做測(cè)試進(jìn)行驗(yàn)證。

CH563的手冊(cè)顯得有些粗糙,用戶想完全靠這個(gè)手冊(cè)正常掌握芯片的用法是有困難的,論壇其實(shí)是個(gè)不錯(cuò)的技術(shù)交流平臺(tái),象這種簡(jiǎn)單的問題,兩三句話就可以說明白的,卻折騰了這么久,不知是我表達(dá)不清呢,還是問題太過簡(jiǎn)單高手不屑認(rèn)真解釋呢?


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

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