本帖最后由 一座城 于 2015-1-20 09:57 编辑
第四章 宝马1768—— UART
开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板
4.1 UART
4.2 硬件描述
4.3 程序说明
4.4 实验现象
1、UART: 说到串口,相信大家都不会感到陌生了。UART英文全称为:Universal Asynchronous Receiver/Transmitter,即通用异步收发传输器。几乎任何一款单片机上都有串口,LPC17xx系列多达4个UART,非常适合需要多个UART的应用场合。 2、硬件描述:本节实验用的是UART0和UART2, 3、程序说明:初始化串口(UART): 从原理图我们可以看到 RXD0与P0.3和AD0.6复用 TXD0与P0.2和AD0.7复用 这两根引脚默认的情况下是作P0.2和 P0.3,并且是输入状态。 我们首先要把这两根引脚设置成RXD和TXD LPC_PINCON->PINSEL0 |= (1 << 4); //把P0.2设置成TXD0 LPC_PINCON->PINSEL0 |= (1 << 6); //把P0.3设置成RXD0 配置完引脚后,就该操纵UART的寄存器了。首先,我们设置串口通信的传输格式,最常用的是8位数据,1个停止位,无奇偶校验。格式设置在LCR寄存器里面。 除了格式设置外,LCR的Bit7还控制着能否对除数锁存器进行访问。(除数锁存器是设置波特率要用到的除数) 根据我们的要求: //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\wps15C.tmp.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps15D.tmp.png
LPC_UART0->DLM = usFdiv / 256; // 写除数锁存器高位 LPC_UART0->DLL = usFdiv % 256; // 写除数锁存器低位 设置好了波特率,为了稳定,我们不希望程序意外修改这个值,所以我们把除数锁存器的允许访问位bit7置0。根据官方数据手册,访问THR(发送保持寄存器)或RBR(接收器缓冲寄存器),LCR中的除数锁存器访问位bit7(DLAB)都必须为0。 LPC_UART0->LCR = 0x03; // 禁止访问除数锁存器
LPC1768与PC通信,数据是在RxFIFO 、TxFIFO进出的,其默认情况下是关闭的,我们把它打开。
FIFO控制寄存器(FCR)
LPC_UART0->FCR = 0x07; // 允许FIFO、清空UART0 RxFIFO 、TxFIFO 到了这里,我们的初始化就完成了,接下来就可以发送和接收数据。 LPC1768是怎样知道数据有没有发送出去,或者有没有接收到数据呢?通过查阅数据手册知道,它是通过读“发送接收状态寄存器(LSR)”来判断的。
读LSR的bit0可以知道有没有数据接收到 0为空,1为接收到数据 while (!(LPC_UART0->LSR & 0x01));
读LSR的bit5可以知道有没有发送完数据 0有数据,1为空 while (!(LPC_UART0->LSR & 0x20));
发送数据到PC:
从PC接收数据:
4、实验现象:打开“串口调试助手”,设置好波特率115200,选择和电脑对应的COM口。
例程附件:
【04】宝马1768_UART(2014.05.10).rar
(224.59 KB, 下载次数: 73)
|