OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8609|回复: 1

还是串口处理的问题,求指点。

[复制链接]

21

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2012-8-28
在线时间
2 小时
发表于 2013-8-22 18:20:04 | 显示全部楼层 |阅读模式
请问下,

我用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;
    }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-22 22:38:13 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-17 01:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表