串口发送数据只能一个一个发送?不能连续发送???

最近在单片机实战项目中遇到一个问题,使用串口通信,采用一主多从MCU,让MCU之间能够通讯,并且数据包以8个字节为一组。

问题描述:当主机给MCU发送8位数据时,从MCU只能一个一个接收,当第一个数据被接收成功后,第二个数据才会再次触发中断,以此类推,直到第八个字节被成功接收,这样我的数据包接收就会存在问题。

例如:

主MCU想发送数据包: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 给从MCU,但是从MCU触发一次串口中断只能接收一个数据,连续触发八次,直到0x80被成功接收,这样违背了代码初衷,整个数据包就不会被正确的解析,导致数据接收异常。

(1)做了很多实验,一开始在串口写下面的代码,但是接收到的数据仍然为一次只能接收一个

void UART_WriteData(UART_T *uart,uint8_t pu8TxBuf[],uint32_t u32WriteBytes)
{
    uint8_t i;
    
    for(i=0;i<8;i++)
    {
        UART_WRITE(uart,pu8TxBuf[i]);
    }
}

(2)尝试在代码中加入printf函数进行打印数据,发现接收数据正常,能够接收到整个数据包。

void UART_WriteData(UART_T *uart,uint8_t pu8TxBuf[],uint32_t u32WriteBytes)
{
    uint8_t i;
    printf("Send data :");
    
    for(i=0;i<8;i++)
    {
        UART_WRITE(uart,pu8TxBuf[i]);
        printf(" %02X ",pu8TxBuf[i]);
    }
    printf("\n");
}

(3)尝试去掉printf,使用1ms延时函数,能够解决这个问题。

void UART_WriteData(UART_T *uart,uint8_t pu8TxBuf[],uint32_t u32WriteBytes)
{
    uint8_t i;
    System_Delay_ms(1);
    
    for(i=0;i<8;i++)
    {
        UART_WRITE(uart,pu8TxBuf[i]);
        System_Delay_ms(1);
    }
}

总结:数据不能完整的接收发送,本质还是数据收发时序的影响导致,发送的时序过快导致接收不能正常接收,能够尝试进行使用合适的延时,能够有效的解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值