请选择 进入手机版 | 继续访问电脑版
查看: 1292|回复: 3

[求助] LPC1114的串口配置

[复制链接]

该用户从未签到

2

主题

3

帖子

0

注册会员

Rank: 2

积分
72
最后登录
2021-6-10
发表于 2020-11-14 11:18:52 | 显示全部楼层 |阅读模式
LPC1114外接晶振是12MHz,串口打印一直乱码???能看下配置是否有问题?

************************************************/
/* 函数功能:初始化UART口                       */
/************************************************/
void UART_init(uint32_t baudrate)
{
        uint32_t DL_value,Clear=Clear;   // (用这种方式定义变量解决编译器的Warning)                       
       
        LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟
        LPC_IOCON->PIO1_6 &= ~0x07;   
        LPC_IOCON->PIO1_6 |= 0x01; //把P1.6脚设置为RXD
        LPC_IOCON->PIO1_7 &= ~0x07;       
        LPC_IOCON->PIO1_7 |= 0x01; //把P1.7脚设置为TXD
        LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟

        LPC_SYSCON->UARTCLKDIV = 0x1;        //时钟分频值为1
//        LPC_SYSCON->UARTCLKDIV = 0x5;        //时钟分频值为5
        LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);//允许UART时钟
        LPC_UART->LCR = 0x83;   //8位传输,1个停止位,无几偶校验,允许访问除数锁存器
        DL_value = SystemCoreClock/16/baudrate ;  //计算该波特率要求的除数锁存寄存器值
        LPC_UART->DLM = DL_value>>8;           //写除数锁存器高位值                       
        LPC_UART->DLL = DL_value;          //写除数锁存器低位值
//        LPC_UART->DLM = 0;           //写除数锁存器高位值                       
//        LPC_UART->DLL = 4UL;          //写除数锁存器低位值
//        LPC_UART->FDR|=(8UL<<4)|5UL;   //小数分频为1.625,则波特率为12M/(16*4*1.625)=115384,与115200误差为0.16%
        LPC_UART->LCR = 0x03;    //DLAB置0
        LPC_UART->FCR = 0x07;    //允许FIFO,清空RxFIFO 和 TxFIFO
        Clear = LPC_UART->LSR;   //读UART状态寄存器将清空残留状态
}

/************************************************/
/* 函数功能:串口接收字节数据                       */
/************************************************/
uint8_t UART_recive(void)
{       
        while(!(LPC_UART->LSR & (1<<0)));//等待接收到数据
        return(LPC_UART->RBR);                         //读出数据
}

/************************************************/
/* 函数功能:串口发送字节数据                       */
/************************************************/
void UART_send_byte(uint8_t byte)
{
        while ( !(LPC_UART->LSR & (1<<5)) );//等待发送完
        LPC_UART->THR = byte;//把待发的数据给了THR寄存器
}

/************************************************/
/* 函数功能:串口发送数组数据                   */
/************************************************/
void UART_send(uint8_t *Buffer, uint32_t Length)
{
        while(Length != 0)
        {
                while ( !(LPC_UART->LSR & (1<<5)) );//等待发送完
                LPC_UART->THR = *Buffer;//把待发的数据给了THR寄存器
                Buffer++;//取下一个字节
                Length--;//字节长度减1
        }
}


我知道答案 目前已有3人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 1334 天

    [LV.10]以坛为家III

    88

    主题

    4290

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9022
    最后登录
    2024-3-29
    发表于 2020-11-15 11:25:05 | 显示全部楼层
    我建议楼主把寄存器配置写入LPC1114后,通过调试器查看已经配置的寄存器值,对比datasheet,就较为容易发生哪个寄存器失败了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    648

    主题

    6301

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19555
    最后登录
    2024-3-29
    发表于 2020-11-16 11:01:54 | 显示全部楼层
    正如楼上所说,调试,结合user manual 和寄存器的值,计算。
    https://cache.nxp.com.cn/secured ... a3&fileExt=.pdf   
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-3-24 09:39
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    12

    主题

    94

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    299
    最后登录
    2021-12-28
    发表于 2020-11-16 15:50:55 | 显示全部楼层
    还有个小方法:通过串口写 0X55 或者 0XAA, 示波器直接读一下波特率,再和软件里面设置的对一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-29 23:19 , Processed in 0.115760 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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