[技术问答] 串口中断只能收一次

[复制链接]
 楼主| match007 发表于 2022-4-6 16:14 | 显示全部楼层 |阅读模式
  1. void USART2_IRQHandler(void)                        //串口2中断服务程序
  2. {
  3.     u8 Res;
  4.     if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断
  5.            {
  6.                   Res=USART_ReceiveData(USART2);        //读取接收到的数据
  7.                    if((USART2_RX_STA&0x8000)==0)     //接收未完成
  8.                          {
  9.                               USART2_RX_BUF[USART2_RX_STA]=Res;//读取接收到的数据
  10.                                     USART2_RX_STA++;
  11.                                if(USART2_RX_STA>14)        //接收到了15个数据
  12.                               USART2_RX_STA|=0x8000;//接收数据完成
  13.                          }                              
  14.              }                    

  15. }
复制代码
接受完第一次数据后,第二次就出问题了,接收不到了,总感觉是串口接收中断程序的问题,能帮忙看下吗

SDLin 发表于 2022-4-6 18:13 | 显示全部楼层
你这是通过一个字节、一个字节的方式进行接收的吗?如是,一般接收到一个字节后中断函数里面的处理是:通过检查RXNE确认有接收到数据,然后清零相关标志位,然后读取接收寄存器的值,退出中断函数。
weifeng90 发表于 2022-4-6 20:35 来自手机 | 显示全部楼层
没有清中断标志位
 楼主| match007 发表于 2022-4-7 16:12 | 显示全部楼层
串口居然卡住了,唉
chenjun89 发表于 2022-4-7 20:35 来自手机 | 显示全部楼层
中断函数里面不用清中断标志位嘛?
chenqianqian 发表于 2022-4-8 07:59 来自手机 | 显示全部楼层
退出中断前没有清中断标志位?
ex7s4 发表于 2022-5-6 16:25 | 显示全部楼层
你好像没清除标记吧
su1yirg 发表于 2022-5-7 10:52 | 显示全部楼层
这个你要是清除标记位之后,才能再次进入
cen9ce 发表于 2022-5-7 11:39 | 显示全部楼层
你看看代码例程吧,对比一下
q1ngt12 发表于 2022-5-7 12:56 | 显示全部楼层
你可能缺了2条语句,也就是清除标记的语句
y1n9an 发表于 2022-5-7 13:33 | 显示全部楼层
你找个串口例程,你这个是原子的例程吧
zhizia4f 发表于 2022-5-7 14:56 | 显示全部楼层
串口你还是没用对,不过别着急,看看程序代码,看看之前参考的代码
liu96jp 发表于 2022-5-10 17:18 | 显示全部楼层
你就是因为没有清除标记,导致现在串口收不到新数据了
t1ngus4 发表于 2022-5-10 17:43 | 显示全部楼层
看看串口操作流程吧,不然你不理解的
d1ng2x 发表于 2022-5-12 08:34 | 显示全部楼层
串口还是比较简单的,你可以参考一下原子或者野火的代码,学习学习
b5z1giu 发表于 2022-5-12 09:25 | 显示全部楼层
正常不会接收一次就不收了,除非你串口代码写错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

607

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部