• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32单片机接受完一帧数据后关闭接收中断?

liuxiaofei126 2018-10-15 浏览量:1659
void USART1_IRQHandler()  
{  
    if(USART_GetITStatus(USART1USART_IT_RXNE) != RESET) //读中断产生 
    {    
         USART_ClearITPendingBit(USART1USART_IT_RXNE); //清除中断标志 
         RxBuffer1[Rx_Num] = USART_ReceiveData(USART1); 
         Rx_Num++; 
         if(Rx_Num == MAX_BUF)//接收数据数量完成
         {   
              USART_ITConfig(USART1 USART_IT_RXE DISABLE); //关闭接收中断
         }    
    }
    if(USART_GetITStatus(USART1 USART_IT_TXE) != RESET)//发送中断产生
    {   
         USART_SendData(USART1 TxBuffer1[Tx_Num--]);
         if(Tx_Num == 0)//发送数据数量完成
         {   
              USART_ITConfig(USART1 USART_IT_TXE DISABLE); //关闭发送中断
         }    
     }

}

比如一帧数据有5个字节,Rx_Num为4时​,全部接受完成,就关闭接受中断,去判断这5个字节?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 接收中断不用关吧,一直开着也可以的,这样不会丢数据的。

    发送中断在发完后,是要关掉的

    • 发布于 2018-11-06
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 你如果是定长接收的话就必须有5个字节进来才会进中断 。不定长接收,接收到一个字节就会进入一次中断,你要自己做个全局变量来计数接收几个就清零然后读数组。还有串口发送最好不要放在中断里面。
    • 发布于2018-10-15
    • 举报
    • 评论 1
    • 0
    • 0
liuxiaofei126 回复了 chenlei1910 :不对吧,串口接受一个字节就会触发中断的, 回复

  • 你说的没错,程序就是这个意思,每当接收到MAX_BUF+1数目的字节数时,就会关闭串口的接收中断。
    • 发布于2018-10-16
    • 举报
    • 评论 2
    • 0
    • 0
liuxiaofei126 回复了 奇迹12 :如果再过来一帧数据不就接受不到了 回复
奇迹12 回复了 liuxiaofei126 :你可以设置开启条件,比如这一帧数据处理完,就会开启串口接收中断。 回复

  • 这种串口中断都是接受到数据就会产生一个对应的中断
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 接收中断默认情况是不能关闭的,或者你可以用空闲中断来接收不定长数据。
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 接收中断关了怎么再接收数据呢,要换成查询的方式么
    • 发布于2018-11-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 接收中断是不能关闭的,不然你接收到数据后不能再次接收串口数据
    • 发布于2018-11-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种不能关闭的中断,中断不在是不能接受到数据
    • 发布于2018-11-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 关闭了中断要再次打开,不然不能正常通信
    • 发布于2018-11-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32单片机接受完一帧数据后关闭接收中断?