请问下,
我用STM32 -1的UART3接收数据,然后在main函数里通过下面函数再把Uart3收到的数据通过UART1(485,波特率115200),
在丢个另一个STM32去接收。
为什么,要在下面红色字体那里加个延时,或直接UART3 收到在返回,另一个STM32 -2就能收到数据,如果两个都不加,则收不到
UART3发送的数据,为什么??
还有个问题:即使在下面函数加了延时(即红色字体部分),如果串口调试助手以小于300ms的时间间隔发送,
那么另一个STM32接收就会丢数据。。。why???
求指教,谢谢!
PS:这个 Delay函数当时只是做个debug使用加的。
/******************************
void Delay(vu32 nCount)
{
for (; nCount != 0; nCount--);
}
******************************/
STM32 -1 发送函数。
void uart3_tx_poll(void)
{
byte i, j = 0;
byte temp;
byte u3tx_buf[UART3_FIFO_SIZE + 3] = {0};
static byte u8start = 0;
if (uart3_rx_fifo.cnt >= (UART3_FIFO_SIZE)) /*last send has finished */
{
RS485_TX;
uart3_tx_i = 0;
u8start = uart3_rx_fifo.out_pos;
u3tx_buf[0] = U3_PAK_HEAD_1;
u3tx_buf[1] = U3_PAK_HEAD_2;
u3tx_buf[UART3_485TX_BUF_SIZE - 1] = U3_PAK_END;
do
{
u3tx_buf[j + 2] = uart3_rx_fifo.buf[uart3_rx_fifo.out_pos];
uart3_rx_fifo.out_pos++;
uart3_rx_fifo.out_pos = uart3_rx_fifo.out_pos % UART3_FIFO_SIZE_TEMP;
uart3_rx_fifo.cnt--;
j++;
}
while(j < UART3_PKT_DATA_SIZE);
/* start send */
USART_SendData(USART1, u3tx_buf[uart3_tx_i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USART1, USART_FLAG_TXE);
#if 0 ====<<<
USART_SendData(USART3, u3tx_buf[uart3_tx_i]);
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USART3, USART_FLAG_TXE);
#else
Delay(2001);
#endif
while (uart3_tx_i < (UART3_485TX_BUF_SIZE - 1))
{
uart3_tx_i++;
USART_SendData(USART1, u3tx_buf[uart3_tx_i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USART1, USART_FLAG_TXE);
#if 0
USART_SendData(USART3, u3tx_buf[uart3_tx_i]);
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USART3, USART_FLAG_TXE);
#else
//Delay(2001);
#endif
}
RS485_RX;
}
}
|