打印
[PIC®/AVR®/dsPIC®产品]

求教,Uart能发不能收问题

[复制链接]
1759|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhengdahai2017|  楼主 | 2017-4-21 20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCU:PIC24FJ16GA002
Uart1,波特率 9600 Pickit3调试
现状:发送数据正常,串口助手能接收。
        MCU无接收,上电调一次RX中断,之后不跳RX中断。
第一次使用PIC,上网查了很多资料,未能解决,求大神指教。感谢!

代码:
/******************************************************
函数名: RemapUart1
功  能: RP14,RP5 管脚映射为Uart1专用引脚         
参  数: 无
返回值: 无               
******************************************************/
void RemapUart1(void)
{
    unlockIO();
    RPOR2bits.RP5R = 3;               //TXD配置
    RPINR18bits.U1RXR = 14;         //RXD配置
    lockIO();
}

/******************************************************
函数名: ConfigUart1
功  能:配置Uart1
参  数: 无
返回值:  无               
******************************************************/
void ConfigUart1(void)
{
    RemapUart1();
   
    UART_RXD_n_TRIS = 1;        //RXD 输入 ,说明文档好像不用配置输入输出
    UART_TXD_n_TRIS = 0;
  
    U1MODE = 0x0000;            //Uart 配置, 8bit 、1bit stop

    #if 1
        U1BRG = 12;             //9600  U1BRG = Fcy/(16*波特率) - 1
    #else
        _BRGH = 1;              //Uart 配置, 16分频, 8bit 、1bit stop BRGH = 1
        U1BRG = 51;
    #endif
   
    U1STA = 0x0000;             //TX/RX 中断方式配置,异步
   
    _U1TXIP = 3;                //优先级
    _U1RXIP = 7;                //优先级

    _U1TXIF = 0;                //清中断标志位
    _U1TXIE = 1;                //TX中断使能
   
    _U1RXIF = 0;                //清中断标志位   
    _U1RXIE = 1;                //RX中断使能

    _UARTEN = 1;              //UART使能
    _UTXEN = 1;
}

void UartSendByte(unsigned char dat)
{
    while(1 == _UTXBF)
        ;
    U1TXREG = dat;
}

/******************************************************
函数名: __U1RXInterrupt()
功  能:Uart1 接收数据中断服务函数
参  数: 无
返回值: 无              
******************************************************/
void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void)
{
    unsigned char dat=0;

    if(_OERR == 1)
        _OERR = 0;
        
    if(1 == _U1RXIF)
        _U1RXIF = 0;    //清中断标志位
        
    dat = U1RXREG;
    buff[count++] = dat;
}

/******************************************************
函数名: __U1TXInterrupt()
功  能:Uart1 发射数据中断服务函数
参  数: 无
返回值: 无              
******************************************************/
void __attribute__((interrupt,no_auto_psv)) _U1TXInterrupt(void)
{
    _U1TXIF = 0;    //清中断标志位
}

沙发
zhengdahai2017|  楼主 | 2017-4-22 11:26 | 只看该作者
本帖最后由 zhengdahai2017 于 2017-4-24 19:36 编辑

换个IO作为RX,UART正常工作。RP14不能作为Uart RX脚吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝