本帖最后由 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;
} |