stm32 F407 ,USART发送数据,TC不能置位

2019-07-21 07:53发布

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




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
秋天
1楼-- · 2019-07-21 08:20
USART_SendData(USART1 , buf[iLoop]);  这个是库里的吗
wfly
2楼-- · 2019-07-21 11:28
本帖最后由 wfly 于 2018-11-15 17:34 编辑

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data));

  /* Transmit Data */
  USARTx->DR = (Data & (uint16_t)0x01FF);
}
wfly
3楼-- · 2019-07-21 11:28
秋天 发表于 2018-11-15 17:29
USART_SendData(USART1 , buf);  这个是库里的吗

是库里的函数。
秋天
4楼-- · 2019-07-21 14:44
两个判断条件屏蔽任意一个试试

一周热门 更多>