请选择 进入手机版 | 继续访问电脑版
查看: 118|回复: 2

[求助] stm32 F407 ,USART发送数据,TC不能置位

[复制链接]

该用户从未签到

1

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2018-11-16
发表于 2018-11-15 17:24:45 | 显示全部楼层 |阅读模式
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;
}


1542273288(1).png
  ST全新域名已上线,大家奔走相告>>                    
回复

使用道具 举报

该用户从未签到

133

主题

4222

帖子

106

蝴蝶豆

版主

最后登录
2018-12-11
发表于 2018-11-16 08:32:21 | 显示全部楼层
我一般是这样使用的,没有判断TC这个寄存器。
USART_SendData(USART1, ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET )
{
}

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

34

帖子

3

蝴蝶豆

中级会员

最后登录
2018-12-11
发表于 2018-11-16 10:42:43 | 显示全部楼层
执行USART_SendData(USART1 , buf[iLoop]); 后,数据会传送到发送数据寄存器中,TXE会被置位,发送完才会置位TC。而你这里,数据没有传送到发送数据寄存器,此时TXE是RESET的状态,所以你得程序是在第一句 while(RESET == USART_GetFlagStatus(USART1 , USART_FLAG_TXE));处进入死循环了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

  ST全新域名已上线,大家奔走相告>>                    
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|意法半导体STM32/STM8技术社区

GMT+8, 2018-12-12 01:01 , Processed in 0.095048 second(s), 12 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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