match007 发表于 2022-4-6 16:14

串口中断只能收一次

void USART2_IRQHandler(void)                        //串口2中断服务程序
{
    u8 Res;
    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收中断
         {
                  Res=USART_ReceiveData(USART2);      //读取接收到的数据
                   if((USART2_RX_STA&0x8000)==0)   //接收未完成
                         {
                              USART2_RX_BUF=Res;//读取接收到的数据
                                    USART2_RX_STA++;
                               if(USART2_RX_STA>14)      //接收到了15个数据
                              USART2_RX_STA|=0x8000;//接收数据完成
                         }                              
             }                  

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

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

正常不会接收一次就不收了,除非你串口代码写错了
页: [1]
查看完整版本: 串口中断只能收一次