CH432T串口能发送消息但不能接受消息

写SCR寄存器0x44 0x55读都是返回7F。

上电初始化后打印寄存器信息:

LCR 03

MCR 0F

LSR 7F

MSR 00

IER 0F

FCR 83

IIR C1

寄存器值错误目前猜测是spi接口读写有问题,但不能进一步深入了

uint8_t spi1_read_write_byte(uint8_t txdata)

{

    uint8_t rxdata;

    HAL_SPI_TransmitReceive(&g_spi1_handler, &txdata, &rxdata, 1, 1000);

    return rxdata; /* 返回收到的数据 */

}

开发板STM32F407Zg。有知道的可以联系我个人信息保护,已隐藏

波特率都是115200,两个串口发送消息都能正常接受到,所以比较好奇是哪里配置错了。

/**************************************************************************

          设置CH432串口0的寄存器


**************************************************************************/

div = ( Fpclk >> 4 ) / CH432_BPS;

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_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_FIFOEN );    /* 设置FIFO模式 14字节触发*/

WriteCH432Data( CH432_LCR_PORT, BIT_LCR_WORDSZ1

| BIT_LCR_WORDSZ0 );   /* 字长8位,1位停止位、无校验,如果需要调整这里按头文件提示修改*/

WriteCH432Data( CH432_IER_PORT, BIT_IER_IEMODEM | BIT_IER_IELINES | BIT_IER_IETHRE | BIT_IER_IERECV );   /* 使能中断 */

WriteCH432Data( CH432_MCR_PORT, BIT_MCR_OUT2 );//| BIT_MCR_RTS | BIT_MCR_DTR );   /* 允许中断输出,DTR,RTS为1 */


/**************************************************************************

          设置CH432串口1的寄存器


**************************************************************************/

div = ( Fpclk >> 4 ) / CH432_BPS1;

DLM = div >> 8;

DLL = div & 0xff;

WriteCH432Data( CH432_LCR1_PORT, BIT_LCR_DLAB );   /* 设置DLAB为1 */

WriteCH432Data( CH432_DLL1_PORT, DLL );    /* 设置波特率 */

WriteCH432Data( CH432_DLM1_PORT, DLM );

WriteCH432Data( CH432_FCR1_PORT, BIT_FCR_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_FIFOEN );     /* 设置FIFO模式 14字节触发*/

WriteCH432Data( CH432_LCR1_PORT, BIT_LCR_WORDSZ1

| BIT_LCR_WORDSZ0 );    /* 字长8位,1位停止位、无校验 如果需要调整这里按头文件提示修改*/

WriteCH432Data( CH432_IER1_PORT, BIT_IER_IEMODEM | BIT_IER_IELINES | BIT_IER_IETHRE | BIT_IER_IERECV );    /* 使能中断 */

WriteCH432Data( CH432_MCR1_PORT, BIT_MCR_OUT2);//| BIT_MCR_RTS | BIT_MCR_DTR );    /* 允许中断输出,DTR,RTS为1 */



您好,串口初始化部分没什么问题,432的串口接受数据时,您打印下IIR \LSR寄存器值,以及量一下INT#脚是否有正常的低电平产生,邮箱已给您发了一份可用的参考代码


1: Write 0x80, Read 80

2: Write 0xaa, Read BF

3: Write 0x01, Read 01

4: Write 0x55, Read 7F

5: Write 0x08, Read 0F

测试读写,读的和写的都不对,在InitCH432前读写的


说明你的SPI 通讯不正常,如果有相关工具,建议您抓时序看下,可以先适当降低SPI速率,确保主机SPI发送数据正常


只有登录才能回复,可以选择微信账号登录