请教 大哥们“:
使用PIC24FJ256GA106 做USART3串口 端口映射问题,
RPINR17bits.U3RXR = 8;
RPOR4bits.RP9R = 28;
这样配置, 串口3发送数据正常, 但接收不到数据,出现了一上电就会进入一次接收中断,之后就没发进到接收中断里面。用示波器查看输入引脚 RB8 已有信号到了这个脚上。
死活不进中断,只有一上电进入一次, 。
void PIC24_Uart3Init(unsigned long Baud, uchar mode)
{
uchar BDiv;
U3MODE = 0;
// 波特率设置
U3BRG = 103; //波特率. FCY = FOSC /2 9600
//$$$. 校验,停止位
//---------------------------------------------------------------
U3MODEbits.PDSEL = 0;//00 = 8 位数据,无奇偶校验
U3MODEbits.STSEL = 0; // Bit0 停止位选择位
//$$$. 状态和控制寄存器
//---------------------------------------------------------------
U3STA = 0;
//$$$. 中断标志状态寄存器
//---------------------------------------------------------------
IFS5bits.U3TXIF = 0; //清除UARTn 发送器中断标志状态位
IFS5bits.U3RXIF = 0; //清除UARTn 接收器中断标志状态位
//中断标志状态寄存器
//---------------------------------------------------------------
//IPC20bits.U3RXIP = 6; //UART3接收中断优先级为7
IFS5bits.U3TXIF = 0; //清除UARTn 发送器中断标志状态位
IEC5bits.U3TXIE = 1 ;
IFS5bits.U3RXIF = 0; //清除UARTn 接收器中断标志状态位
IEC5bits.U3RXIE = 1 ; //允许接收中断
//
U3MODEbits.UARTEN = 1; //UARTn 使能
U3STAbits.UTXEN = 1; //发送使能
//----------端口映射-------------------------------------
RPINR17bits.U3RXR = 8; //Assign U3RX to pin RP8;
RPOR4bits.RP9R = 28; //Assign U3TX to pin RP9;
IFS5bits.U3TXIF = 0; //清除中断标志
IFS5bits.U3TXIF = 0; //清除中断标志
IFS5bits.U3RXIF = 0;//清除中断标志
IFS5bits.U3RXIF = 0;//清除中断标志
U3_EN_485_INIT(); //485初始 处于接收状态
}
/**********************************************
功 能:串口3接收中断
参 数:
说明: 中断名称写法,可参考<<dspic_c30使用手册>>,P96,P97
**********************************************/
void __attribute__((__interrupt__, auto_psv)) _U3RXInterrupt(void)
{
IFS5bits.U3RXIF=0; //清除UARTn 接收器中断标志状态位
IEC5bits.U3RXIE = 0; // 中断关闭
// 一上电进来一次就再没进来过,收不到数据
//发生溢出或帧错误
while (U3STAbits.OERR)
{
//(清零先前置 1 的 OERR 位(1 → 0 的跳变) ,将使接收缓冲区和 RSR 复位为空状态)
U3STAbits.OERR = 1;
asm("nop");
U3STAbits.OERR = 0;
return;
}
LED1_OUT=!LED1_OUT;
IEC5bits.U3RXIE = 1;//接收器中断允许
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>