void sndMsg(const char *buf , int count)
{
int iLoop;
for(iLoop = 0 ; iLoop < count ; iLoop++)
{
while(RESET == USART_GetFlagStatus(USART1 , USART_FLAG_TXE));
USART_SendData(USART1 , buf[iLoop]);
while(RESET == USART_GetFlagStatus(USART1 , USART_FLAG_TC)); //程序在这里死循环
}
}
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
FlagStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_FLAG(USART_FLAG));
/* The CTS flag is not available for UART4 and UART5 */
if (USART_FLAG == USART_FLAG_CTS)
{
assert_param(IS_USART_1236_PERIPH(USARTx));
}
if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET) //原因:SR寄存器值为0x80,TXE置位,但此时TC没有置位,移位寄存器数据没有发送完成
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>