我的ch432t外部接線為:RI--3.3V,CTS--3.3V,CTS1--3.3V,HLF#--懸空,外部晶振7.3728Mhz,初始化為8位,無校驗,2個停止位,波特率9600。初始化代碼如下: #define EXT_CRYSTALL 7372800UL //外部晶振頻率 #define Fpclk (EXT_CRYSTALL/12) /* 定義內(nèi)部時鐘頻率 12分頻 */
static const int baudval[]={1200,2400,4800,19200}; /* BAUD_1200 = 0, BAUD_2400, BAUD_4800, BAUD_9600, BAUD_19200 */ //配置說明:數(shù)據(jù)位5-8位;停止位:1或2;校驗位:奇,偶,無; //數(shù)據(jù)位固定為8位 Uint16 Init_CH432T_COM1(Uint16 baud, Uint16 parity, Uint16 stopbit ) { Uint16 div,i, setval; unsigned char DLL, DLM; if(baud > BAUD_19200) return 0;
/************************************************************************** 設置CH432串口0的寄存器 **************************************************************************/ div = ( Fpclk >> 4 ) / baudval[baud]; DLM = div >> 8; DLL = div & 0xff; WriteCH432Data( CH432_LCR_PORT, BIT_LCR_DLAB ); /* 設置DLAB為1 */ WriteCH432Data( CH432_DLL_PORT, DLL ); /* 設置波特率 */ WriteCH432Data( CH432_DLM_PORT, DLM );
WriteCH432Data( CH432_FCR_PORT, BIT_FCR_FIFOEN );/* 設置FIFO模式,觸發(fā)點為1 */
setval = BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0; //固定8個數(shù)據(jù)位 //0--1個停止位,1--2個停止位 if(stopbit==1) setval |= BIT_LCR_STOPBIT; //parity:0--無校驗,1--奇校驗,2--偶校驗 //校驗對應:00--奇,01--偶,10--mark,11--space if(parity>0) { setval |= BIT_LCR_PAREN; if(parity>>1) //偶校驗 setval |= BIT_LCR_PARMODE0; } WriteCH432Data( CH432_LCR_PORT, setval&0xff); WriteCH432Data( CH432_IER_PORT, BIT_IER_IERECV ); /* 使能接收中斷 */ WriteCH432Data( CH432_MCR_PORT, 0); /* 不允許中斷輸出*/ return 1; } 我在執(zhí)行初始化前設置了軟件復位,讀取狀態(tài): void testch432() { Uint16 Status[7];
Status[0] = ReadCH432Data( CH432_IER_PORT ); /* 正常情況下返回為00H */ Status[1] = ReadCH432Data( CH432_IIR1_PORT ); /* 正常情況下返回為01H */ Status[2] = ReadCH432Data(CH432_IIR_PORT ); /* 正常情況下返回為01H */ Status[3] = ReadCH432Data( CH432_LCR_PORT ); /* 正常情況下返回為00H */ Status[4] = ReadCH432Data( CH432_LSR_PORT ); /* 正常情況下返回為60H */ Status[5] = ReadCH432Data( CH432_MCR_PORT ); /* 正常情況下返回為00H */ Status[6] = ReadCH432Data( CH432_MSR_PORT ); /* 正常情況下返回為00H */
} 與注釋一致。 初始化8個數(shù)據(jù)位,無校驗,2個停止位, Init_CH432T_COM1(BAUD_9600, 0, 1 ); 后讀取狀態(tài)如下: void testch432() { Uint16 Status[7];
Status[0] = ReadCH432Data( CH432_IER_PORT ); /* 初始化后返回為00H */ Status[1] = ReadCH432Data( CH432_IIR1_PORT ); /* 初始化后返回為C1H */ Status[2] = ReadCH432Data( CH432_IIR_PORT ); /* 初始化后返回為C1H */ Status[3] = ReadCH432Data( CH432_LCR_PORT ); /* 初始化后返回為07H */ Status[4] = ReadCH432Data( CH432_LSR_PORT ); /* 初始化后返回為60H */ Status[5] = ReadCH432Data( CH432_MCR_PORT ); /* 初始化后返回為00H */ Status[6] = ReadCH432Data( CH432_MSR_PORT ); /* 初始化后返回為00H */ } 現(xiàn)在我采用查詢方式,檢測到接收中斷,在等待BIT_LSR_DATARDY準備好后,發(fā)現(xiàn)接收數(shù)據(jù)不對,板子自帶的串口同樣的配置,接收發(fā)送沒有問題。 發(fā)送數(shù)據(jù):01 03 13 88 00 03 81 65 接收數(shù)據(jù):E0 80 E0 00 1E 06 66 FE 每次接收都是這個數(shù)據(jù),不知道問題在哪里? 外部晶振也測試了,確實是7.3728MHZ,工作正常。