综合技术
直播中

刘建国

8年用户 204经验值
私信 关注
[问答]

串口用buffer发送超过8个字节时发送顺序会乱

u8 TxBuffer[1024];
u8 TxCounter=0;
u8 count=0;
void UART1_ReportMotion(int16_t ax,int16_t ay,int16_t az,int16_t gx,int16_t gy,int16_t gz,
int16_t hx,int16_t hy,int16_t hz)
{
    unsigned int temp=0xaf+9;
    char ctemp;
    UART1_Put_Char(0xa5);
    UART1_Put_Char(0x5a);
    UART1_Put_Char(0x16);
    UART1_Put_Char(0xa2);
    UART1_Put_Char(0x01);
    UART1_Put_Char(0x02);
    UART1_Put_Char(0x03);
    UART1_Put_Char(0x04);
    UART1_Put_Char(0xaa);
}
void UART1_Put_Char(unsigned char DataToSend)
{
    TxBuffer[count++]=DataToSend;
    USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
}
// ***********interupt******/
void USART1_IRQHandler(void)
{
    if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)
    {
        USART_SendData(USART1,TxBuffer[TxCounter++]);
        USART_ClearITPendingBit(USART1,USART_IT_TXE);  
        if(TxCounter==count) USART_ITConfig(USART1,USART_IT_TXE,DISABLE);
    }
}

回帖(5)

王宁

2019-5-7 10:07:34
楼主少了一个判断那就是溢出判断,这里1024个字符,但是变量极有可能会直接超出最终导致不可预知的后果,且这里楼主计数变量用了u8并不能完全利用完1024个字节的缓冲
举报

罗宏达

2019-5-7 10:27:08
有没有判断“发送已经完成”?
发送一个字节需要一定时间。所以,相邻字节之间必须插入间隔。
举报

连伴叙

2019-5-7 10:37:24
需要判断是否发送完成TC标志,SR寄存器第6位
举报

李富贵

2019-5-7 10:50:19
u8 TxBuffer[256];
void UART1_Put_Char(unsigned char DataToSend)
{
    TxBuffer[count++]=DataToSend;
    USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
    if(count==255) count=0;
}
还是不行,串口接收顺序还是乱的,如下:
01 A5 5A 16 04 AA 01 02 5A 16 A2 AA A5 02 03 16 A2 01 A5 5A 03 04 AA 01 02 5A 16 04 AA A5 02 03 16 A2 AA A5 5A 03 04 A2 01 02 5A 16 04 AA 01 02 03 16 A2 AA A5 02 03 04 A2 01 A5 5A 03 04 AA 01 02 5A 16 A2 AA A5 02 03 16 A2 01 A5 5A 03 04 A2 01 02 5A 16 04 AA 01 02 03 16 A2 AA A5 5A 03 04 A2 01 A5 5A 16 04 AA 01 02 5A 16 A2 AA A5 02 03 04 A2 01 A5 5A 03 04 AA 01 02 5A 16 04 AA A5 02 03 16 A2 AA A5 5A 03 04 A2 01 02 5A 16 04 AA 01 02 03 16 A2 AA A5 02 03 04 A2 01 A5 5A 16 04 AA 01 02 5A 16 A2 AA A5 02 03 16 A2 01 A5 5A 03 04 A2 01 02 5A 16 04 AA A5 02 03 16 A2 AA A5 5A 03 04 A2 01 A5 5A 16 04 AA 01 02 5A 16 A2 AA A5 02 03 04 A2 01 A5 5A 03 04 AA 01 02 5A 16 04 AA A5 02 03 16 A2 01 A5 5A 03 04 A2 01 02 5A 16 04 AA 01 02 03 16 A2 AA A5 02 03 04 A2 01 A5 5A 16 04 AA 01 02 5A 16 A2 AA A5 02 03 16 A2 01 A5 5A 03
举报

更多回帖

发帖
×
20
完善资料,
赚取积分