本人使用这个函数发送时,串口调试助手接收首字节多了一个0x00,其他数据正常。
void Usart2_SendData(uint8_t *buffer, uint8_t length)
{
uint8_t i = 0;
RS485_USART2_TXCTRL;
for (i = 0; i < length; i++)
{
USART_SendData(USART2, buffer[i]);
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
}
RS485_USART2_RXCTRL;
}
比如:芯片发送 0x01 0x84 0x00 0x00 0x43,但是串口调试助手接收到的是:0x00 0x01 0x84 0x00 0x00 0x43。
本人使用这个函数发送时,串口调试助手接收的首字节多了一个0x00,同时末尾字节被修改为0x00
void Usart2_SendData(uint8_t *buffer, uint8_t length)
{
uint8_t i = 0;
RS485_USART2_TXCTRL;
for (i = 0; i < length; i++)
{
USART_SendData(USART2, buffer[i]);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
RS485_USART2_RXCTRL;
}
比如:芯片发送 0x01 0x84 0x00 0x00 0x43,但是串口调试助手接收到的是:0x00 0x01 0x84 0x00 0x00 0x00。
注意:上述两个函数的第9行的宏不一样,一个是USART_FLAG_TC,一个是USART_FLAG_TXE。
修改成下面这样试试:
RS485_USART2_TXCTRL;
for (i = 0; i < length; i++)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
USART_SendData(USART2, buffer[i]);
}
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
RS485_USART2_RXCTRL;
我写的这两个函数都是发送函数,接收数据部分是没有问题的。只是发送出去的数据使用USART_FLAG_TC时,上位机串口调试助手接收到的数据,首字节多了一个0x00;使用USART_FLAG_TXE时,上位机串口调试助手接收到的数据,不但首字节多了一个0x00,而且末尾字节被修改为0x00。