关于CH582M的串口转发问题

我想使用CH582M的串口转发功能,代码如下:

uint8_t RxBuff[100];

int main()
{
    uint8_t len = 0;
    uint8_t keyvalue = 0;

    SetSysClock(CLK_SOURCE_PLL_80MHz);
    DelayMs(5);


    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();

    while(1)
    {
        len = UART1_RecvString(RxBuff);
        if (len != 0){
            keyvalue = RxBuff[2];
            UART1_SendString(RxBuff, len);
            UART1_SendByte(keyvalue);
        }
    }
}

基本的代码逻辑是,CH582M从串口1收到了数据以后,再从串口1转发出去。

其中CH582M串口1的RX引脚接了是ESP32的串口TX,CH582M的TX引脚接的树莓派的RX引脚。

ESP32发送端的buffer如下:

uint8_t buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};
uint8_t buffer1[8] = {0, 0, 0, 0, 0, 0, 0, 0};

buffer和buffer1间隔100ms发送。


按照我的理解,由CH582M转发出去的数据应该是:

read from uart:1 2 3 4 5 6 7 8
read from uart:3
read from uart:0 0 0 0 0 0 0 0
read from uart:0

但是,实际从树莓派上读出来的数据是:

read from uart:1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0
read from uart:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


请问,这是怎么回事,或者说我的配置少了些什么?

将贴的代码里面的这句话中的len打印出来看一下

UART1_SendString(RxBuff, len);

CH582m串口透传程序 - JayWell - 博客园 (cnblogs.com)可以参考一下本博客


 while(1)
    {
        len = UART1_RecvString(RxBuff);
        if (len != 0){
            UART1_SendByte(len);
        }
    }

我将代码修改后再次打印,输出如下:

read from uart:1 1 1 1 1 1 1 1
read from uart:1 1 1 1 1 1 1 1

看起来像是把一次发送的8个byte,当成了8次 1byte接收。


您好,可以参考二楼的博客,利用UART的中断超时来接收UART的一帧数据。

微信截图_20230403191439.png


谢谢楼上两位,已明白该如何修改。


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