我的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) /* 定义内部时钟频率 12分频 */
static const int baudval[]={1200,2400,4800,19200}; /* BAUD_1200 = 0, BAUD_2400, BAUD_4800, BAUD_9600, BAUD_19200 */ //配置说明:数据位5-8位;停止位:1或2;校验位:奇,偶,无; //数据位固定为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模式,触发点为1 */
setval = BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0; //固定8个数据位 //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; } 我在执行初始化前设置了软件复位,读取状态: 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个数据位,无校验,2个停止位, Init_CH432T_COM1(BAUD_9600, 0, 1 ); 后读取状态如下: 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 */ } 现在我采用查询方式,检测到接收中断,在等待BIT_LSR_DATARDY准备好后,发现接收数据不对,板子自带的串口同样的配置,接收发送没有问题。 发送数据:01 03 13 88 00 03 81 65 接收数据:E0 80 E0 00 1E 06 66 FE 每次接收都是这个数据,不知道问题在哪里? 外部晶振也测试了,确实是7.3728MHZ,工作正常。