找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3345|回复: 8
收起左侧

单片机串口接收中断只进入一次?

[复制链接]
ID:500189 发表于 2021-4-27 17:32 | 显示全部楼层 |阅读模式
串口接收中断只进入一次,做的是摄像头循迹小车  串口sbuf长度只留了一个字节    接受完之后  传递到其他数组   并及时清0
回复

使用道具 举报

ID:752974 发表于 2021-4-28 08:36 | 显示全部楼层
读接收数据后要记着清中断标志位。
回复

使用道具 举报

ID:500189 发表于 2021-4-28 10:51 | 显示全部楼层
清除中断标志位试了,  也不行,   串口中断只进入一次,以0x0d 0x0a 结尾,

  1. void USART1_IRQHandler(void)                        //串口1中断服务程序
  2. {
  3.         u8 Res=0;
  4.         static u8 Rxbuf[10];
  5.         //u8 theta_err=0;

  6.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  7.         {
  8.                 Res = USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
  9.                
  10.                 if((USART_RX_STA&0x8000)==0)//接收未完成
  11.                 {
  12.                         if(USART_RX_STA&0x4000)//接收到了0x0d
  13.                         {
  14.                                 if(Res!=0x0A)
  15.                                         USART_RX_STA=0;//接收错误,重新开始
  16.                                 else
  17.                                         USART_RX_STA|=0x8000;        //接收完成了
  18.                                
  19.                                
  20.                                        
  21.                         }
  22.                         else //还没收到0X0D
  23.                         {       
  24.                                 if(Res==0x0d)USART_RX_STA|=0x4000;
  25.                                 else
  26.                                 {                               
  27.                                         USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
  28.                                         USART_RX_STA++;
  29.                                        
  30.                                         if(USART_RX_STA>(USART_REC_LEN-1))
  31.                                                 USART_RX_STA=0;//接收数据错误,重新开始接收          
  32.                                 }                 
  33.                         }
  34.                 }                    
  35.   }

  36. }
复制代码
回复

使用道具 举报

ID:332214 发表于 2021-4-28 17:08 | 显示全部楼层
1844952977 发表于 2021-4-28 10:51
清除中断标志位试了,  也不行,   串口中断只进入一次,以0x0d 0x0a 结尾,

没看出来你这有清中断的语法  加上下面的语句。试试
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
       USART_ClearITPendingBit(USART1, USART_IT_RXNE);  //这是清中断标准函数接口
回复

使用道具 举报

ID:889094 发表于 2021-4-28 23:56 | 显示全部楼层
中断服务程序后面的interrupt ?在哪里????
回复

使用道具 举报

ID:984836 发表于 2021-11-25 21:43 | 显示全部楼层
遇到了同样的问题不知道楼主怎么解决的
回复

使用道具 举报

ID:637144 发表于 2021-11-26 11:11 来自手机 | 显示全部楼层
清标志位
回复

使用道具 举报

ID:139866 发表于 2021-11-29 16:53 | 显示全部楼层
birdzhyli 发表于 2021-4-28 23:56
中断服务程序后面的interrupt ?在哪里????

这是32的程序,不用写
回复

使用道具 举报

ID:211994 发表于 2021-11-29 19:14 | 显示全部楼层
接收到数据进入中断,在中断程序中清除标志位,等下次接收到数据后再进入中断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表