九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 5090|回复: 2
打印 上一主题 下一主题

串口输出问题

[复制链接]
跳转到指定楼层
楼主
发表于 2017-9-14 19:22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用朱老师的串口打印程序可以正常打印,他用uart0口,我自己改了他的uart.c文件,用uart2口输出,我就改了串口驱动的地址,然后开发板改为uart2口接串口就出现
not boot imagne

程序如下:
#define GPA1CON                0xE0200020
#define UCON2                 0xE2900804
#define ULCON2                 0xE2900800
#define UMCON2                         0xE290080C
#define UFCON2                 0xE2900808
#define UBRDIV2         0xE2900828
#define UDIVSLOT2        0xE290082C
#define UTRSTAT2        0xE2900810
#define UTXH2         0xE290820       
#define URXH2                0xE2900824       

#define rGPA1CON        (*(volatile unsigned int *)GPA1CON)
#define rUCON2                (*(volatile unsigned int *)UCON2)
#define rULCON2                (*(volatile unsigned int *)ULCON2)
#define rUMCON2                (*(volatile unsigned int *)UMCON2)
#define rUFCON2                (*(volatile unsigned int *)UFCON2)
#define rUBRDIV2        (*(volatile unsigned int *)UBRDIV2)
#define rUDIVSLOT2        (*(volatile unsigned int *)UDIVSLOT2)
#define rUTRSTAT2                (*(volatile unsigned int *)UTRSTAT2)
#define rUTXH2                (*(volatile unsigned int *)UTXH2)
#define rURXH2                (*(volatile unsigned int *)URXH2)

// 串口初始化程序
void uart_init(void)
{
        // 初始化Tx Rx对应的GPIO引脚
        rGPA1CON &= ~(0xff<<0);                        // 把寄存器的bit0~7全部清零
        rGPA1CON |= 0x00000022;                        // 0b0010, Rx Tx
       
        // 几个关键寄存器的设置
        rULCON2 = 0x3;
        rUCON2 = 0x5;                              
        rUMCON2 = 0;
        rUFCON2 = 0;
       
        // 波特率设置        DIV_VAL = (PCLK / (bps x 16))-1
        // PCLK_PSYS用66MHz算                余数0.8
        //rUBRDIV0 = 34;       
        //rUDIVSLOT0 = 0xdfdd;
       
        // PCLK_PSYS用66.7MHz算                余数0.18
        // DIV_VAL = (66700000/(115200*16)-1) = 35.18
        rUBRDIV2 = 35;
        // (rUDIVSLOT中的1的个数)/16=上一步计算的余数=0.18
        // (rUDIVSLOT中的1的个数 = 16*0.18= 2.88 = 3
        rUDIVSLOT2 = 0x0888;                // 3个1,查官方推荐表得到这个数字
}


// 串口发送程序,发送一个字节
void uart_putc(char c)
{                         
        // 串口发送一个字符,其实就是把一个字节丢到发送缓冲区中去
        // 因为串口控制器发送1个字节的速度远远低于CPsU的速度,所以CPU发送1个字节前必须
        // 确认串口控制器当前缓冲区是空的(意思就是串口已经发完了上一个字节)
        // 如果缓冲区非空则位为0,此时应该循环,直到位为1
        while (!(rUTRSTAT2 & (1<<1)));
        rUTXH2 = c;           //输出c字符变量
}

// 串口接收程序,轮询方式,接收一个字节
char uart_getc(void)
{
        while (!(rUTRSTAT2 & (1<<0)));
        return (rURXH2 & 0x0f);
}

回复

使用道具 举报

沙发
 楼主| 发表于 2017-9-14 19:31:27 | 只看该作者
补充:用朱老师的程序,接uart0,终端接com3;我的程序,接uart2,终端还是接com3,换了串口终端不是该改接com吗,可是终端还是只认com3。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-5-19 19:36 , Processed in 0.018301 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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