CortexM0开发 —— LPC11C14的UART使用方法

本文详细介绍了使用Cortex-M0微控制器LPC11C14进行UART通信的方法,包括UART特性、寄存器描述、初始化步骤、数据发送和接收。通过实验步骤解析了UART的配置,如波特率设置、中断使能等,以及发送和接收数据的函数实现。此外,还提供了其他操作辅助函数的示例。
摘要由CSDN通过智能技术生成

LPC1100系列微控制器UART  LPC1100系列Cortex-M0微控制器具有一个符合16C550工业标准的异步串行口(UART)。此口同时增加了调制解调器(Modem)接口,DSR、DCD和RI Modem信号是只用于LQFP48和PLCC44封装的管脚配置。 

 特性  

 16字节收发FIFO; 

 寄存器位置符合16C550工业标准;  

 接收器FIFO触发点可为1、4、8和14字节; 

 内置波特率发生器;  

  用于精确控制波特率的小数分频器,并拥有赖以实现软件流控制的自动波特率检测能力和机制;  

 支持软件或硬件流控制执行;  

 包含标准Modem接口信号(CTS、DCD、DTS、DTR、RI、RTS); 

 支持RS-458/EIA-485的9位模式和输出使能。


【实验步骤】:

先看一下板子上UART的原理图

PL-2303HX是一款UART-USB芯片,这里先不管其原理,我们只学习如何将数据从CPU发送到这个TXD RXD处。


一、LPC11C14 UART 寄存器描述



这里只贴出部分



具体寄存器分析,这里不再阐述,先看一下在头文件中我们这样定义

[cpp]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. /*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/  
  2. /** @addtogroup LPC11xx_UART LPC11xx Universal Asynchronous Receiver/Transmitter  
  3.   @{  
  4. */  
  5. typedef struct  
  6. {  
  7.   union {  
  8.   __I  uint32_t  RBR;                   /*!< Offset: 0x000 Receiver Buffer  Register (R/ ) */  
  9.   __O  uint32_t  THR;                   /*!< Offset: 0x000 Transmit Holding Register ( /W) */  
  10.   __IO uint32_t  DLL;                   /*!< Offset: 0x000 Divisor Latch LSB (R/W) */  
  11.   };  
  12.   union {  
  13.   __IO uint32_t  DLM;                   /*!< Offset: 0x004 Divisor Latch MSB (R/W) */  
  14.   __IO uint32_t  IER;                   /*!< Offset: 0x000 Interrupt Enable Register (R/W) */  
  15.   };  
  16.   union {  
  17.   __I  uint32_t  IIR;                   /*!< Offset: 0x008 Interrupt ID Register (R/ ) */  
  18.   __O  uint32_t  FCR;                   /*!< Offset: 0x008 FIFO Control Register ( /W) */  
  19.   };  
  20.   __IO uint32_t  LCR;                   /*!< Offset: 0x00C Line Control Register (R/W) */  
  21.   __IO uint32_t  MCR;                   /*!< Offset: 0x010 Modem control Register (R/W) */  
  22.   __I  uint32_t  LSR;                   /*!< Offset: 0x014 Line Status Register (R/ ) */  
  23.   __I  uint32_t  MSR;                   /*!< Offset: 0x018 Modem status Register (R/ ) */  
  24.   __IO uint32_t  SCR;                   /*!< Offset: 0x01C Scratch Pad Register (R/W) */  
  25.   __IO uint32_t  ACR;                   /*!< Offset: 0x020 Auto-baud Control Register (R/W) */  
  26.        uint32_t  RESERVED0;  
  27.   __IO uint32_t  FDR;                   /*!< Offset: 0x028 Fractional Divider Register (R/W) */  
  28.        uint32_t  RESERVED1;  
  29.   __IO uint32_t  TER;                   /*!< Offset: 0x030 Transmit Enable Register (R/W) */  
  30.        uint32_t  RESERVED2[6];  
  31.   __IO uint32_t  RS485CTRL;             /*!< Offset: 0x04C RS-485/EIA-485 Control Register (R/W) */  
  32.   __IO uint32_t  ADRMATCH;              /*!< Offset: 0x050 RS-485/EIA-485 address match Register (R/W) */  
  33.   __IO uint32_t  RS485DLY;              /*!< Offset: 0x054 RS-485/EIA-485 direction control delay Register (R/W) */  
  34.   __I  uint32_t  FIFOLVL;               /*!< Offset: 0x058 FIFO Level Register (R) */  
  35. } LPC_UART_TypeDef;  
  36. /*@}*/ /* end of group LPC11xx_UART */  

相关宏定义(部分)

[cpp]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. ****************************************************************************/  
  2. #ifndef __UART_H   
  3. #define __UART_H  
  4.   
  5. #define RS485_ENABLED   0  
  6. #define TX_INTERRUPT    0       /* 0 if TX uses polling, 1 interrupt driven. */  
  7. #define MODEM_TEST      0  
  8.   
  9. #define IER_RBR         (0x01<<0)  
  10. #define IER_THRE        (0x01<<1)  
  11. #define IER_RLS         (0x01<<2)  
  12.   
  13. #define IIR_PEND        0x01  
  14. #define IIR_RLS         0x03  
  15. #define IIR_RDA         0x02  
  16. #define IIR_CTI         0x06  
  17. #define IIR_THRE        0x01  
  18.   
  19. #define LSR_RDR         (0x01<<0)  
  20. #define LSR_OE          (0x01<<1)  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值