目前在很多单片机中,都提供了帧错标志位。就是当串口发生错误时,如没有收到停止位、缓冲区溢出等,给出特定错误标志位,提示串口出现了问题。
在大部分单片机中,不处理帧错是没有关系的,并不会产生其他影响。但是在PIC单片机中(包括PIC18系列和PIC24系列)却不是这样的,如果不处理帧错,那么串口将停止工作,不能接收发送数据,直到处理了帧错问题后才恢复。
在PIC24单片机中,处理帧错是比较简单的,它有专门的帧错中断。比如对于串口1(串口号从0开始计算),对应的帧错中断是:
_U2ErrInterrupt
先在初始化中允许串口中断和帧错中断:
_U2RXIE = 1; // 允许串口1接收中断
_U2TXIE = 1; // 允许串口1发送中断
_U2ERIE = 1; // 允许串口1帧错中断
然后在中断理重新设置一下串口:
#define ISR(mode) __attribute__((interrupt, mode))
void ISR(auto_psv) _U2ErrInterrupt()
{
_U2ERIF = 0
U2MODE = 0; // 停止串口
Nop();
UART1_init(); // 重新初始化串口
}
哪些情况下容易产生帧错呢?一个是上电的时候;在就是在有干扰的环境下以及线缆接触不好的情况(插拔线缆的时候)。
文章评论(0条评论)
登录后参与讨论