USART_ITConfig(USART1,USART_IT_TEX ,ENABLE);使能串口发不了数

2019-03-23 15:24发布

USART_Init(USART1, &USART_InitStructure);

  USART_Cmd(USART1, ENABLE);
  USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
// USART_ITConfig(USART1,USART_IT_TEX ,ENABLE);
//不使能这个串口正常,使能就进不了while(1){};??

int main(void)
{
   uint8_t a[]="start";
    NVIC_Config();
        USART1_Config();
    putstr(a);
        putstr("good");
          while(1)
        {       
          putstr("good");
          } ;

}
//中断函数
void putch(uint8_t ch)
{
    USART_SendData(USART1, ch); /*发送一个字符函数*/

   /* Loop until the end of transmission */
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
}
void putstr(uint8_t *str)
{
   uint16_t i;
   for(i=0;str!='';i++)
   {
          putch(str);
   }
   USART_SendData(USART1, ' '); /*发送一个字符函数*/
   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
   USART_SendData(USART1, ' '); /*发送一个字符函数*/
   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
}
void USART1_IRQHandler(void)
{
    //处理接收到的数据
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
               USART_ClearITPendingBit(USART1, USART_IT_RXNE);
        //temp =        USART_ReceiveData(USART1);
        putstr(sdata);
    }
    //发送中断
    if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
    {           
        USART_ClearITPendingBit(USART1,USART_IT_TXE);  
  }

}
这是什么原因呢?? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
三叶半
1楼-- · 2019-03-24 12:30
 精彩回答 2  元偷偷看……
xwj_lang231
2楼-- · 2019-03-24 15:03
本帖最后由 xwj_lang231 于 2015-7-1 15:18 编辑

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
USART_FLAG_TC需要软件清除,你的里面好像没有清除,没有清除就没有等待,发完一个就直接下一个。
最好还是用USART_FLAG_TXE
梦幻的帅帅
3楼-- · 2019-03-24 20:52
楼主怎么解决的
我使能USART_ITConfig(USART3, USART_IT_TC, ENABLE)程序就不跑了

一周热门 更多>