社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 675|回复: 4

[求助] 求助PIC32MX795F512H的UART5接收中断

[复制链接]

12

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-8 16:26:14 | 显示全部楼层 |阅读模式
请教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);
    }
}



此帖出自PIC单片机论坛

原理图

原理图

回复

使用道具 举报

379

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-8 22:41:09 | 显示全部楼层
帮顶,没用过这个片子

回复

使用道具 举报

474

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-2-9 10:22:59 | 显示全部楼层
如果调试是通过官方的调试器完成的,那么实际移植到产品上要注意:
1.看原理图,UART5是不是与CAN模块复用的?是否存在相互的干扰?(UART5RX与CAN2TX;UART5TX与CAN2RX一个是发送,另一个是接收,而接在一个管脚上?)
2.接收中断是在完成数据接收动作才会出现,那么UART5RX的IO配置为输入否?硬件部分是否正常连接?此IO是否有其它模块使用?

回复

使用道具 举报

12

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2017-2-9 17:04:58 | 显示全部楼层
dingzy_2002 发表于 2017-2-9 10:22
如果调试是通过官方的调试器完成的,那么实际移植到产品上要注意:
1.看原理图,UART5是不是与CAN模块复用的? ...

多谢,确实把RX引脚配置为输入,问题解决了,搞不明白其他的UART口不用设置IO的方向,手册也没讲到,这点有点郁闷

点评

可能是UART5与其它串口模块设计的功能有区别吧. 这在PIC芯片上较为常见, 比如我用的PIC8位单片机,同样的模块功能,其配置可能就不一样.  详情 回复 发表于 2017-2-10 13:22

回复

使用道具 举报

474

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-2-10 13:22:01 | 显示全部楼层
lzgztm521 发表于 2017-2-9 17:04
多谢,确实把RX引脚配置为输入,问题解决了,搞不明白其他的UART口不用设置IO的方向,手册也没讲到,这点 ...

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-10-23 06:40 , Processed in 0.231551 second(s), 17 queries , Redis On.

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