无法进入串口接收中断
串口的发送是正常的,但是用串口助手发送数据给单片机,无法进入串口接收中断。在线调试能发现,只有烧写程序开始第一次,能进入接收中断。
具体什么原因引起,实在不清楚。 void USART_Init(uint16 baud)//设置串口为8bit,1stop bit,0奇偶校验
{
RPINR18bits.U1CTSR = 0;
RPINR18bits.U1RXR = 17;//配置RP17为串口1的RxD引脚,实际未用此功能
RPOR5bits.RP10R = 3;//配置RP10为串口1的TxD引脚
U1BRG = baud;
U1MODEbits.USIDL = 1;//模块空闲模式下不工作
U1MODEbits.UEN = 0;//使能U1TX,U1RX,禁用CTS、RTS引脚
#ifdef USART_HIGH_SPEED
U1MODEbits.BRGH = 1;//高速模式
#endif
U1MODEbits.PDSEL = 0;//8位数据位,无奇偶校验
U1MODEbits.STSEL = 0;//1停止位
U1MODEbits.ABAUD = 0;
U1STAbits.URXISEL = 0;//缓冲器收到数据马上中断
IFS0bits.U1RXIF = 0;//中断标志清零
IEC0bits.U1RXIE = 1;//UART1接收器中断允许
IPC2bits.U1RXIP = 7;
U1MODEbits.UARTEN = 1;//使能串口
U1STAbits.UTXEN = 1;//使能发送
}
初始化代码如上。 你的中断程序呢?
void _ISR _U1RXInterrupt(void)
{
static uint8 i = 0;
//static uint8 command_flag = 0;
// Timer1_Stop();
IEC0bits.U1RXIE = 0;//UART1接收器中断关闭
IFS0bits.U1RXIF = 0;//中断标志清零
if(U1STAbits.OERR == 1){//缓冲器溢出
U1STAbits.OERR = 0;
}
if(U1STAbits.URXDA == 1)//缓冲器有数据
{
Data_URX = U1RXREG;//获取数据,这句话非常重要
USART_TXD_Char(0xAB);
}
IEC0bits.U1RXIE = 1;//UART1接收器中断允许
}
你好,这个就是中断程序 有人知道为什么吗?
U1MODEbits.USIDL = 1;//模块空闲模式下不工作,改为0试过吗? 你好,有试过,也是一样,进入不了,只有设置环回模式下,能工正常进入。
串口挂了吧?
不会是输入与输出方向没有初始化?
解决了,不是软件的问题,是硬件问题。
我也出现这种问题,PIC24FJ256 我的是用串口3 改用串口1 就没问题。 不知楼主的啥问题解决?
lz能不能说一下硬件啥问题,我遇到和你一样的情况,自发自收可以,但是无法收到上位机的数据
问题解决了吗?可以分享一下吗?
1. 芯片是什么型号?2. IO口初始化是否 为 数字口, RX还需要设置为输入 有无PPS?端口是否印射到UART 的rx上. UART是使用的 polling?还是中断? polling 检查接受RX IF是否置位? 若为中断方式, 是否开全局中断?是否开外设中断. 我也遇到和你一样的问题,自收自发数据可以,上位机数据收不到,请问你后来怎么解决的?
页:
[1]
2