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

PIC24F串口传输;

[复制链接]
1952|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
青鸟的虚像|  楼主 | 2015-9-21 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,小弟最近在做PIC串口传输的内容。目前是实现了发出的功能,但通过“串口猎人”发送数据时却发现单片机无法接收(通过LED状态)来判断的。
目前有两个疑问:1.我的程序是哪里错了:dizzy:;2.即便我把串口传输通道拔掉,仍然会默认进入我定义的ISR(没有数据传输过去的话应该不可能触发中断的啊)
具体程序如下,希望大虾们路过帮我看下:
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

#define FCY        4000000
#define BAUDRATE   38400
#define BRGVAL     (((FCY+2*BAUDRATE)/BAUDRATE/4)-1)
#define LED_GREEN_PORT _RF5  
#define LED_GREEN_TRIS _TRISF5

int a=0;
unsigned char command;

//UART1接收中断服务程序
void _ISR _U1RXInterrupt(void)
{
    IEC0bits.U1RXIE = 0;   //UART1接收器中断关闭
    IFS0bits.U1RXIF = 0;  //中断标志清零

    //缓冲器溢出
    if(U1STAbits.OERR == 1)
    {
        U1STAbits.OERR = 0;
    }
    //接收数据
    if(U1STAbits.URXDA == 1)
    {
        command = U1RXREG;
        a++;
        if(a==2)
            LED_GREEN_PORT = 1;
    }
    IEC0bits.U1RXIE = 1;   //UART1接收器中断允许
}

int main()
{
    LED_GREEN_PORT = 0;   //LED初始化为输出低电平(灯灭)。
    LED_GREEN_TRIS = 0;  //设置LED灯端口为输出状态。

    CLKDIVbits.RCDIV = 0;//2分频,分频后频率为4M

    //Configure UART1 input and output.
    RPINR18bits.U1RXR = 6;                 //Assign U1RX  to pin RP6;
    RPOR9bits.RP18R   = 3;                //Assign U1TX  to pin RP18;

    //Configure UART1.
    U1BRG = BRGVAL;         //configure UART1 Baud Rate.
    U1MODEbits.USIDL  = 1;  //模块空闲模式下不工作
    U1MODEbits.UEN     = 0;  //使能U1TX,U1RX,禁用CTS、RTS引脚
    U1MODEbits.BRGH   = 1;  //高速模式
    U1MODEbits.PDSEL  = 0;  //8位数据位,无奇偶校验
    U1MODEbits.STSEL   = 0;  //1停止位
    U1MODEbits.ABAUD  = 0;  //禁用自动波特率
    U1STAbits.URXISEL   = 1;  //缓冲器收到数据马上中断
    IFS0bits.U1RXIF        = 0;  //中断标志清零
    IEC0bits.U1RXIE       = 1;  //UART1接收器中断允许
    IPC2bits.U1RXIP       = 7;  //UART1接收中断优先级为7

    U1MODEbits.UARTEN = 1;  //使能串口
    U1STAbits.UTXEN   = 1;  //使能发送

    while(1);

    return 0;
}

沙发
青鸟的虚像|  楼主 | 2015-9-21 12:28 | 只看该作者
找到问题了!!!
虽然不知道是为什么,不过刚才突然突发奇想,烧录好程序后,把PICKiT3拔掉,然后再用串口猎人发送数据,居然!!!!就可以了!!!!
如果有人知道具体为什么,欢迎继续交流。

使用特权

评论回复
板凳
青鸟的虚像|  楼主 | 2015-9-21 13:33 | 只看该作者
修改一下刚才的说法,不拔掉PICKiT3也可以,不过就是串口USB必须在烧录好后拔掉,重插。
(另外,本帖未结,希望有什么灵感的大虾都能说说自己的看法,大家互相学习一下。)

使用特权

评论回复
地板
chenyu988| | 2015-9-21 14:27 | 只看该作者
不应该啊,照你这么说开了uart都没办法debug了。

使用特权

评论回复
5
青鸟的虚像|  楼主 | 2015-9-22 15:00 | 只看该作者
chenyu988 发表于 2015-9-21 14:27
不应该啊,照你这么说开了uart都没办法debug了。

这个问题的确困扰着我,在做串口传送时感觉调式功能根本没用,调试时无论串口猎人输送什么程序都跑不下去。所以我都是没有调试直接烧录,通过一些LED的亮和灭来确定有没有收到数据,或者通过串口猎人接收数据来确定程序跑偏了没的。

使用特权

评论回复
6
青鸟的虚像|  楼主 | 2015-9-22 15:14 | 只看该作者
chenyu988 发表于 2015-9-21 14:27
不应该啊,照你这么说开了uart都没办法debug了。

目前遇到的新瓶颈是,虽然通过上述的烧录程序后“拔掉USB口再重插回去”操作是可以正常通过UART口进行收发了,但是如果我收录的程序里使用了配置字设置的话,这种操作就无法奏效,目前也还没找到设置配置字后的解决方法。

使用特权

评论回复
7
chenyu988| | 2015-9-22 15:43 | 只看该作者
具体芯片型号?

使用特权

评论回复
8
青鸟的虚像|  楼主 | 2015-9-24 09:32 | 只看该作者

PIC24FJ128gc006。
哈哈,谢谢你的帮忙啦,配置字部分已经找到发现错误的所在了,原来是得把JTAG端口打开才可以。不过后期貌似还是得把它关掉,具体解决方法还没想到。

使用特权

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

本版积分规则

8

主题

37

帖子

1

粉丝