打印
[技术问答]

串口中断只能收一次

[复制链接]
1802|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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[USART2_RX_STA]=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 | 只看该作者
串口居然卡住了,唉

使用特权

评论回复
5
chenjun89| | 2022-4-7 20:35 | 只看该作者
中断函数里面不用清中断标志位嘛?

使用特权

评论回复
6
chenqianqian| | 2022-4-8 07:59 | 只看该作者
退出中断前没有清中断标志位?

使用特权

评论回复
7
ex7s4| | 2022-5-6 16:25 | 只看该作者
你好像没清除标记吧

使用特权

评论回复
8
su1yirg| | 2022-5-7 10:52 | 只看该作者
这个你要是清除标记位之后,才能再次进入

使用特权

评论回复
9
cen9ce| | 2022-5-7 11:39 | 只看该作者
你看看代码例程吧,对比一下

使用特权

评论回复
10
q1ngt12| | 2022-5-7 12:56 | 只看该作者
你可能缺了2条语句,也就是清除标记的语句

使用特权

评论回复
11
y1n9an| | 2022-5-7 13:33 | 只看该作者
你找个串口例程,你这个是原子的例程吧

使用特权

评论回复
12
zhizia4f| | 2022-5-7 14:56 | 只看该作者
串口你还是没用对,不过别着急,看看程序代码,看看之前参考的代码

使用特权

评论回复
13
liu96jp| | 2022-5-10 17:18 | 只看该作者
你就是因为没有清除标记,导致现在串口收不到新数据了

使用特权

评论回复
14
t1ngus4| | 2022-5-10 17:43 | 只看该作者
看看串口操作流程吧,不然你不理解的

使用特权

评论回复
15
d1ng2x| | 2022-5-12 08:34 | 只看该作者
串口还是比较简单的,你可以参考一下原子或者野火的代码,学习学习

使用特权

评论回复
16
b5z1giu| | 2022-5-12 09:25 | 只看该作者
正常不会接收一次就不收了,除非你串口代码写错了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

607

帖子

1

粉丝