ch552用time2 16位做波特率發(fā)生器不能工作

用time2? 16位做波特率發(fā)生器不能工作

哪里出了問(wèn)題 可能幫看看


voidUART0Setup( )

{

? ? SM0 = 0;

? ? SM1 = 1;

? ? SM2 = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//串口0使用模式1

? ? RCLK = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //UART0接收時(shí)鐘

? ? TCLK = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //UART0發(fā)送時(shí)鐘? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//使用Timer2作為波特率發(fā)生器

? ? C_T2=0;

? ? CP_RL2=0;

? ? T2MOD = T2MOD | bTMR_CLK |bT2_CLK ;

? ?

? ? //TL2 = 65536 - FREQ_SYS /?115200?/ 16;

? ?// TH2 = (65536 - FREQ_SYS /?115200?/ 16) >> 8;

? ? RCAP2 = 65536 - FREQ_SYS/16/UART0_BUAD;

? ??

? ? TR2 = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//啟動(dòng)定時(shí)器2

? ? TI = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //使能串口0中斷

? ? REN = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//串口0接收使能

? ??

}


程序沒(méi)問(wèn)題,可以用,你是用錯(cuò)口了,默認(rèn)串口P30 P31.如果沒(méi)有這2個(gè)引腳,要映射的,你看看。


mInitSTDIO注釋了。

默認(rèn)串口P30 P31 必須要映射才能用嗎。


確實(shí)可以用,但是只能發(fā)不能收。我加了調(diào)節(jié)波特率的函數(shù)就掛了。應(yīng)該是調(diào)節(jié)波特率不對(duì),

可能幫看下這個(gè)問(wèn)題哪里寫錯(cuò)了。

這樣寫好像不對(duì)吧,設(shè)置波特率





void Config_Uart0(UINT8 *cfg_uart)

{

UINT32 uart0_buad = 0;

*((UINT8 *)&uart0_buad) = cfg_uart[3];*((UINT8 *)&uart0_buad+1) = cfg_uart[2];*((UINT8 *)&uart0_buad+2) = cfg_uart[1];*((UINT8 *)&uart0_buad+3) = cfg_uart[0];

ES = 0;RCAP2 = 65536 - FREQ_SYS/16/uart0_buad;

ES = 1;

}

這樣寫好像不對(duì)吧,設(shè)置波特率


發(fā)長(zhǎng)點(diǎn)就把回復(fù)按鈕給覆蓋了。。。。這


memcpy(LineCoding,UsbSetupBuf,USB_RX_LEN);


Config_Uart0(LineCoding);? ? ?//注釋掉才能用


是不是中斷優(yōu)先級(jí)出問(wèn)題了?


void Uart0_ISR(void) interrupt INT_NO_UART0

{

if(RI)? ?//收到數(shù)據(jù)

{

Receive_Uart_Buf[Uart_Input_Point++] = SBUF;

UartByteCount++;? ? ? ? ? ? ? ? ? ? //當(dāng)前緩沖區(qū)剩余待取字節(jié)數(shù)

if(Uart_Input_Point>=UART_REV_LEN)

Uart_Input_Point = 0;? ? ? ? ? ?//寫入指針

RI =0;}}


發(fā)送能發(fā)送,接收就可以,如果不能接收說(shuō)明接收函數(shù)有問(wèn)題;

修改波特率你要算,看誤差多少能不能用,如果明顯算出來(lái)誤差大,改了就沒(méi)有意義。

優(yōu)先級(jí)?啥意思?


void Uart0_ISR(void) interrupt INT_NO_UART0


串口0 不能中斷 所以收不到數(shù)據(jù)


但是如果設(shè)置成串口1? ??void Uart1_ISR(void) interrupt INT_NO_UART1

串口1能中斷獲取數(shù)據(jù)。


寫成? while(1){}也不行

串口1可以中斷,串口0無(wú)法中斷。


找到原因,設(shè)置ES=1沒(méi)設(shè)置,但是設(shè)置ES=1,就串口就不能打開(kāi)了。。。。


改好了,復(fù)制過(guò)來(lái)的TI=1沒(méi)刪掉。? 真是吐血了。


發(fā)送能達(dá)到1.5m,接收只能5k。51也就這樣了。


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

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