利用串口中断发送数据,板子一上电就不停的进中断发送数据

2019-07-20 22:45发布

初始化部分
USART_ITConfig(USART1, USART_IT_TC, ENABLE);//Tramsimssion Complete后,才产生中断. 开TC中断必须放在这里,否则还是会丢失第一字节
USART_Cmd(USART1, ENABLE);                    //使能串口1
----------------------------------
void USART_SendTime(void)
{
        USART_ClearFlag(USART1, USART_FLAG_TC);                           //清除传输完成标志位,否则可能会丢失第1个字节的数据.  
        USART_SendData(USART1, USART_TX_BUF[USART_TXptr++]);              //向串口1发送数据
}
-----------------------------------
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
          if( USART_GetITStatus(USART1, USART_IT_TC) == SET  )
         {
                 USART_SendData(USART1, USART_TX_T1BUF[USART_TXptr]);      //向串口1发送数据
                USART_TXptr++;
          }
        if(USART_TXptr >=20)                                                         
        {
                USART_ClearFlag(USART1, USART_FLAG_TC);                   //不然TC一直是set, TCIE也是打开的,导致会不停进入中断. clear掉即可,不用关掉TCIE
                USART_TXptr = 0;
        }   
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
梦幻的帅帅
1楼-- · 2019-07-21 00:26
已经解决问题
void USART_SendTime(void)
{
          USART_ClearFlag(USART1, USART_FLAG_TC);                                      //清除传输完成标志位,否则可能会丢失第1个字节的数据.
          USART_ITConfig(USART1, USART_IT_TC, ENABLE);                              //写在清除标志位后面 这样发送的数组第一位就不会丢失了
          USART_SendData(USART1, USART_TX_T1BUF[USART_TXptr++]);      //向串口1发送数据
}
void USART1_IRQHandler(void)                                                                          //串口1中断服务程序
{
          if( USART_GetITStatus(USART1, USART_IT_TC) == SET  )
         {
                  USART_SendData(USART1, USART_TX_T1BUF[USART_TXptr]);      //向串口1发送数据
                 USART_TXptr++;
          }
        if(USART_TXptr >=20)                                                          //
        {
                USART_ITConfig(USART1, USART_IT_TC, DISABLE);
                USART_TXptr = 0;
        }  
}
梦幻的帅帅
2楼-- · 2019-07-21 04:23
现在是板子一上电就进中断发送数据,都没有经过触发事件,明明已经USART_ClearFlag(USART1, USART_FLAG_TC)为什么还是不行
梦幻的帅帅
3楼-- · 2019-07-21 06:05
 精彩回答 2  元偷偷看……
梦幻的帅帅
4楼-- · 2019-07-21 08:11
新手求大神指导
梦幻的帅帅
5楼-- · 2019-07-21 13:12
 精彩回答 2  元偷偷看……
梦幻的帅帅
6楼-- · 2019-07-21 16:21
梦幻的帅帅 发表于 2019-7-12 14:59
把USART_ClearFlag(USART1, USART_FLAG_TC)换成USART_ITConfig(USART1, USART_IT_TC, DISABLE)
USART_ITCo ...

准确来说应该是  发送的数组 第一位为00

一周热门 更多>