打印
[STM32F1]

USSRT3发送有问题

[复制链接]
785|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DAZHOU0503|  楼主 | 2016-1-25 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 DAZHOU0503 于 2016-1-25 10:12 编辑

同样的程序,串口1发送没有问题,串口3发送就出现问题。
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); 问题出在发送寄存器空TXE标志位检测处,仅仅是看程序的话,串口3和串口1的程序是一样的,不同之处就是两个串口接的外设不同。请教这个问题是不是跟串口3接的外设有关。
在下边附上源码

int32_t DrvUART_Write(uint8_t uartId, uint8_t *pData, uint32_t dataLen)
{
        uint32_t        idx = 0;
        
        if (uartId == 1)        
        {
                if(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                {
                        for (idx=0; idx<(dataLen - 1); idx++)
                        {
                                USART_SendData(USART1, pData[idx]);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                        }
                }
                USART_SendData(USART1, pData[dataLen - 1]);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        }
        else if (uartId == 2)
        {
                UART2_485CTRL_On();
                if(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
                {
                        for (idx=0; idx<(dataLen - 1); idx++)
                        {                                                                                                                                            
                                USART_SendData(USART2, pData[idx]);
                                while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
                          }
                }
                USART_SendData(USART2, pData[dataLen - 1]);
                while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
                UART2_485CTRL_Off();
        }
        else if (uartId == 3)        
        {
                if(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
                {
                        for (idx=0; idx<(dataLen - 1); idx++)
                        {
                                USART_SendData(USART3, pData[idx]);
                                while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
                        }
                }
                USART_SendData(USART3, pData[dataLen - 1]);
                while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
        }  
        return 0;                                                                                                   
}
沙发
JY-DX-JY| | 2016-1-25 12:03 | 只看该作者
接的什么外设?

使用特权

评论回复
板凳
DAZHOU0503|  楼主 | 2016-1-25 13:14 | 只看该作者

一个OBD模块板子,买别人家公司的。

使用特权

评论回复
地板
qq4988| | 2016-1-25 14:49 | 只看该作者
你也在做OBD产品啊,你用的哪家的啊,串口3,是不是初始化的问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

59

帖子

1

粉丝