ch582的uart1,接收数据的最高位固定是1

用串口给uart1发送了一个0x03,但是UART1_RecvString(RxBuff);这个代码读出来的数据最高位永远是1,不管发送的数据是几,调试的时候代码读出来最高位都是1这是什么问题

image.png

image.png

__INTERRUPT
__HIGH_CODE
void UART1_IRQHandler(void)
{
    volatile uint8_t i;
    switch(UART1_GetITFlag())
    {
        case UART_II_LINE_STAT: // 线路状态错误
        {
            // UART0_GetLinSTA();
            break;
        }

        case UART_II_RECV_RDY: // 数据达到设置触发点
            break;

        case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成
            i = UART1_RecvString(RxBuff);
            LOG_INFO("shoudao%d",RxBuff[0]);
            break;

        case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送
            break;

        case UART_II_MODEM_CHG: // 只支持串口0
            break;

        default:
            break;
    }

}


您好,您是如何配置串口的,串口数据长度是配置了7个数据位吗,重新解压一份EVT,运行例程会有问题吗。

您可以检查一下R8_UART1_LCR寄存器,最低2位是否为10b。

如果是配置为7个数据位,需要将上位机串口助手也选择7位发送。

image.png


我这个是在官方给的三模键盘上加的art1接收的中断函数,其他地方都没动,就加了接收uart1数据的代码就有这个问题,我在其他例程上接收数据都是正常的,在这个项目上就是最高位一直为1,下面是main函数里的初始化代码。

#ifdef DEBUG
    GPIOA_SetBits(bTXD1);
    GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();

    UART1_ByteTrigCfg(UART_7BYTE_TRIG);
    UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
    PFIC_EnableIRQ(UART1_IRQn);
#endif

下面是库函数没有做过修改,是8位数据位

void UART1_DefInit( void )
{	
    UART1_BaudRateCfg( 921600 );
    R8_UART1_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN;		// FIFO打开,触发点4字节
    R8_UART1_LCR = RB_LCR_WORD_SZ;	
    R8_UART1_IER = RB_IER_TXD_EN;
    R8_UART1_DIV = 1;	
}

这个是项目文件

icon_rar.gifThree-mode_kbd.rar



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