PIC单片机串口接收进不了中断,发送正常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIC单片机串口接收进不了中断,发送正常相关的知识,希望对你有一定的参考价值。

unsigned char temp;
void main(void)

TRISA=0xfe;
PORTA=0x00;
/*串口波特率及中断配置*/
TRISB=0XFD;//RB1是TX,RB4是RX。
PORTB=0;
TXSTA=0X20;//异步低速,TXEN置位,使能发送
RCSTA=0X90;//使能串行端口SPEN置1,使能接收器CREN置1
BRG16 =1;//十六位波特率寄存器使能
SPBRGH = 0x00;
SPBRG = 0x33;//配置波特率为9600
RCIE=1;//串口接收中断使能
RCREG=0;
TXIE=0;
/*总的中断开启配置*/
GIE=1;
PEIE=1;
TXREG=0X18;
while(!TRMT);//发送完成查询,发送没问题。
while(1)



void interrupt isr(void)//PIC中断

TXREG=0X18;
temp=RCREG;
while(!TRMT);//发送完成查询,发送没问题。
LED=~LED;

参考技术A 接收中断要在中断函数内用RCIF查询 参考技术B 你的全局中断,GIE没见啊 参考技术C 发送也不正常

STM32 USART接收中断程序问题

我自己编程学习,提取串口发送的5个字节中的第三个字节,用来作判断。现在我用串口调试助手发送5个16进制的字节,试验了好几次,发现串口接收中断一直在循环,存在问题,调不到我所想要的结果,希望各位高手帮忙!我对串口的配置如下:

void USART1_IRQHandler(void)接收中断函数中一直循环,可能是你中断函数的处理
程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!追问

我发现USART_ClearITPendingBit(USART1,USART_IT_RXNE)指令,清不掉RXNE标志位,导致RXNE=1,一直在进接收中断去,你遇到过这情况么?

追答

之所以清不掉中断标记,很可能是它中断间隔太短了,导致清掉了,之后又马上进入中断了!

追问

应该不会的,我是用Keil单步执行,进行检测的,当我执行过USART_ClearITPendingBit函数后,清不掉,但我发现另一个发送的TXE标志位能软件清除

追答

那你可以自己对这个USART_ClearITPendingBit函数用寄存器操作的方式实现,再看效果

追问

没有效果,感觉这个库函数USART_ClearITPendingBit()有问题。。。。。。

参考技术A

用这个试试:

 

if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)

      USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR其实就是清除标志
      USART_ReceiveData(USART2);    //读DR

追问

谢谢你!问题已经找到了,是之前对串口配置的程序顺序出错了,无奈只能采纳一个人的答案

参考技术B 在哪个函数里循环? 你只发一次,结果串口一直中断?追问

void USART1_IRQHandler(void)接收中断函数中一直循环,我即使不从串口助手发数据,这中断函数也一直在循环,怎样配置使得我发完一个字节,接收中断收到后就停下来?

追答

你用示波器看一下,你的RX口是不是电平不稳定?

追问

汗啊!没有示波器,看不起来~我经过调试程序,发现USART_ClearITPendingBit(USART1,USART_IT_RXNE)指令,清不掉RXNE标志位,导致RXNE=1,一直在进接收中断去,你遇到过这情况么?

追答

试一下:
把USART_ClearITPendingBit(USART1,USART_IT_RXNE) 放到 if(buffer_size == 0)的前面

追问

谢谢你!问题已经找到了,是之前对串口配置的程序顺序出错了,无奈只能采纳一个人的答案

以上是关于PIC单片机串口接收进不了中断,发送正常的主要内容,如果未能解决你的问题,请参考以下文章

电脑串口一直接收不了单片机发送过来的数据啊...

为啥用串口调试助手和pic单片机相连发的指令都没有反应呢。

单片机串口发送的数据一直是00;求解

STM8S单片机串口UART2接收中断一直在运行,出不来,怎么回事?

准备用PIC 3.3V的单片机通过串口与电脑通信,采用RS232芯片进行转换,请问:1〉RS232的供电是5V吧!

串口中断优先级最高的是