搜索
bottom↓
回复: 2

PIC24FJ 串口3 接收中断问题

[复制链接]

出0入0汤圆

发表于 2016-7-4 14:36:19 | 显示全部楼层 |阅读模式
请教 大哥们“:
使用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;//接收器中断允许  
}

出0入0汤圆

发表于 2016-7-4 16:53:03 来自手机 | 显示全部楼层
把那个半道return屏掉

出0入0汤圆

 楼主| 发表于 2016-7-5 14:49:09 | 显示全部楼层
问题找到  ,因为 RB8,RB9  是AD转换接口复用  ,需要配置 AD1PCFG=0xffff;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 01:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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