求助PIC32MX795F512H的UART5接收中断

2019-03-25 18:54发布

请教UART5的接收进不了中断,可以发送数据,UART1、2、3、4都调试完毕,只有UART5进不了接收中断,调试PIC32MX795F512L的时候UART5是可以进入接收中断的,直接移植到到512H上面就进不了接收中断了,原理图和程序如下:
恳请各位指点一二,谢谢!




#include <plib.h>
#include "uart5.h"
#include "coretime.h"

unsigned int actualDataRate;    //波特率
unsigned char U5RXData[10];     //存放接收到的数据
unsigned char U5RXFlag=0;       //接收数据完成标志
unsigned char U5_i=0;           //接收数据计数用

void UART5_Init(void)
{
    U5MODEbits.ON = 1;
    //U4MODEbits.UEN0 = 0;
    //U4MODEbits.UEN1 = 0;
    U5MODEbits.PDSEL0 = 0;
    U5MODEbits.PDSEL1 = 0;
    U5MODEbits.STSEL = 0;
    U5MODEbits.BRGH = 1;

    U5STAbits.UTXISEL0 = 1;
    U5STAbits.UTXISEL1 = 1;

    U5STAbits.UTXEN = 1;
    U5STAbits.URXEN = 1;
    U5STAbits.URXISEL0 = 0;
    U5STAbits.URXISEL1 = 0;


    U5BRG = 64;        //115200



    IFS2bits.U5TXIF = 0;
    IFS2bits.U5RXIF = 0;
    IFS2bits.U5EIF = 0;

    IEC2bits.U5EIE = 1;   
    IEC2bits.U5RXIE = 1;

    IPC12bits.U5IP = 2;
    IPC12bits.U5IS = 2;

//    UARTConfigure(UART5, UART_ENABLE_PINS_TX_RX_ONLY);
//    UARTEnable(UART5, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));  //
//    UARTSetFifoMode(UART5, UART_INTERRUPT_ON_TX_DONE|UART_INTERRUPT_ON_RX_NOT_EMPTY);   //控制UART模块TX和RX FIFO操作。
//    actualDataRate = UARTSetDataRate(UART5, 30000000, 9600);
//    UARTSetLineControl(UART5, UART_DATA_SIZE_8_BITS|UART_PARITY_NONE|UART_STOP_BITS_1); //8 bit ,不校验, 1个停止位
//   
//    INTSetVectorPriority(INT_UART_5_VECTOR, INT_PRIORITY_LEVEL_3);          //设置 UART5 中断优先级 3
//    INTSetVectorSubPriority(INT_UART_5_VECTOR, INT_SUB_PRIORITY_LEVEL_0);   //中断子优先级 0
//   
//    INTClearFlag(INT_U5E|INT_U5RX|INT_U5|INT_U5TX);
//    INTEnable(INT_U5RX, INT_ENABLED);   //使能发送中断
}

//
//发送一个字节
void U5SendAByte(unsigned char data)
{
    UARTSendDataByte(UART5, data);
    while(!UARTTransmissionHasCompleted(UART5));
}

//
//发送n个字节
//
void U5SendSomeByte(unsigned char *Buffer, unsigned char Num)
{
    unsigned char j;
    for(j=0;j<Num;j++)
    {
        U5SendAByte(Buffer[j]);
    }
}

void __ISR(_UART_5_VECTOR, IPL2SOFT) Uart5_Handler(void)
//void __ISR(_UART_5_VECTOR, IPL3) UART5_Handler(void)
{
   // if(IFS0bits.U1RXIF)
    if(INTGetFlag(INT_U5RX))
    {
        do
        {
            U5RXData[U5_i++] = U5RXREG;
        }while(U5STAbits.URXDA);
        if(U5_i>=10)
        {
            U5_i=0;
            D4_Open();
            U5RXFlag=1;  
        }
        INTClearFlag(INT_U5RX);
    }
}



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
dingzy_2002
2019-03-26 11:36
lzgztm521 发表于 2017-2-9 17:04
多谢,确实把RX引脚配置为输入,问题解决了,搞不明白其他的UART口不用设置IO的方向,手册也没讲到,这点 ...

可能是UART5与其它串口模块设计的功能有区别吧.
这在PIC芯片上较为常见,
比如我用的PIC8位单片机,同样的模块功能,其配置可能就不一样.

一周热门 更多>