分享ARM7学习经验—通用异步接收器UART(五)
[复制链接]
在介绍UART使用之前,先说下LPC2148还能使用串口0进行程序下载,下载工具都有以下几种,在网络上都能找到,个人感觉国外的FLASH MAGIC比较好用。下载地址为:http://www.flashmagictool.com/
然后我给大家介绍下KEIL自带的启动代码Startup.s,里面有关时钟的设置如图所示,当外部晶振为12M时,系统时钟60M,外设时钟15M。
最后是UART0的编程:
第一步:设置管脚连接寄存器PINSEL0 = 0x00000005;开启RXD/TXD的功能。
第二步:设置UART0 线控制寄存器U0LCR,低2位是字长度选择,默认是00:5位字符长度,我们一般使用的是8位字符长度,所以设置为11。同时最高位DLAB=1,使能访问除数寄存器。
第三步:根据波特率和外设时钟设置除数寄存器U0DLM/U0DLL。
最后:设置DLAB=0,禁止修改波特率
主要代码如下:
#include <LPC214X.H>
#include <stdio.h>
#define Fpclk 15000000
//Startup.s启动代码里面设置了系统设置60M,外设时钟15M
#define BAUD 9600
void Uart0_Init(void)
{
unsigned int Fdiv;
/* initialize the serial interface */
PINSEL0 = 0x00000005; /* Enable RxD0 and TxD0 */
U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit*/
//DLAB=1,可以设置波特率
Fdiv=(Fpclk/16)/BAUD;
U0DLM =Fdiv/256;
U0DLL =Fdiv%256;
U0LCR = 0x03; /* DLAB = 0 */
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
U0THR = ch;
while( (U0LSR&0x40)==0 ); // 等待数据发送完毕
return ch;
}
void delay (unsigned int i)
{ /* Delay function */
unsigned int n;
while(i>1)
{
for(n=65535;n>1;n--);
i--;
}
}
int main(void)
{
Uart0_Init();
while(1)
{
puts("EEWORLD GOOD\r\n") ;
delay(200);
} }
|