打印
[LPC]

NXP LPC1768宝马开发板 第四章UART

[复制链接]
913|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第四章    宝马1768—— UART
开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板

4.1 UART
4.2 硬件描述
4.3 程序说明
4.4 实验现象


1UART
    说到串口,相信大家都不会感到陌生了。UART英文全称为:Universal Asynchronous Receiver/Transmitter,即通用异步收发传输器。几乎任何一款单片机上都有串口,LPC17xx系列多达4UART,非常适合需要多个UART的应用场合。
2、硬件描述:
本节实验用的是UART0UART2
3、程序说明:
初始化串口(UART)
从原理图我们可以看到
RXD0P0.3AD0.6复用
TXD0P0.2AD0.7复用
这两根引脚默认的情况下是作P0.2P0.3,并且是输入状态。
我们首先要把这两根引脚设置成RXDTXD
  LPC_PINCON->PINSEL0 |= (1 << 4);     //P0.2设置成TXD0
  LPC_PINCON->PINSEL0 |= (1 << 6);     //P0.3设置成RXD0
    配置完引脚后,就该操纵UART的寄存器了。首先,我们设置串口通信的传输格式,最常用的是8位数据,1个停止位,无奇偶校验。格式设置在LCR寄存器里面。
    除了格式设置外,LCRBit7还控制着能否对除数锁存器进行访问。(除数锁存器是设置波特率要用到的除数)
根据我们的要求:
//8个数据位,1个停止位,无奇偶校验
LPC_UART0->LCR  = 0x83;   
设置完数据传输格式,再设置波特率
UART0/2/3波特率的计算(n =0/2/3):
ø
小数分频寄存器(FDR)
有上图寄存器的值可知,在默认情况下的波特率为:
   
    在一般情况下,我们不必要用小数分频器,只需确定除数锁存器的值就可以设置波特率了。在应用的时候,我们要求在一定的波特率下通信,所以波特率是已知的,求除数锁存器usFdiv的值。
usFdiv = (FPCLK / 16) / file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps104.tmp.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps105.tmp.png
LPC_UART0->DLM  = usFdiv / 256;                                 // 写除数锁存器高位
LPC_UART0->DLL  = usFdiv % 256;                          // 写除数锁存器低位
设置好了波特率,为了稳定,我们不希望程序意外修改这个值,所以我们把除数锁存器的允许访问位bit70。根据官方数据手册,访问THR(发送保持寄存器)RBR(接收器缓冲寄存器)LCR中的除数锁存器访问位bit7(DLAB)都必须为0
LPC_UART0->LCR  = 0x03;                 // 禁止访问除数锁存器
    LPC1768PC通信,数据是在RxFIFO TxFIFO进出的,其默认情况下是关闭的,我们把它打开。
  FIFO控制寄存器(FCR)
LPC_UART0->FCR  = 0x07;          // 允许FIFO、清空UART0 RxFIFO TxFIFO
到了这里,我们的初始化就完成了,接下来就可以发送和接收数据。
LPC1768是怎样知道数据有没有发送出去,或者有没有接收到数据呢?通过查阅数据手册知道,它是通过读“发送接收状态寄存器(LSR)”来判断的。
LSRbit0可以知道有没有数据接收到     0为空,1为接收到数据   
               while (!(LPC_UART0->LSR & 0x01));
LSRbit5可以知道有没有发送完数据    0有数据,1为空
           while (!(LPC_UART0->LSR & 0x20));
发送数据到PC:
PC接收数据:
4、实验现象:
打开“串口调试助手”,设置好波特率115200,选择和电脑对应的COM口。

相关帖子

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

本版积分规则

个人签名:专业生产销售STM32开发板,仿真器,http://openmcu.taobao.com/

71

主题

283

帖子

11

粉丝