注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
billbot501的个人空间 https://home.eeworld.com.cn/space-uid-274536.html [收藏] [复制] [分享] [RSS]
日志

分享ARM7学习经验—通用异步接收器UART(五)

已有 1329 次阅读2011-4-8 08:31 |个人分类:LPC21XX|

在介绍UART使用之前,先说下LPC2148还能使用串口0进行程序下载,下载工具都有以下几种,在网络上都能找到,个人感觉国外的FLASH MAGIC比较好用。下载地址为:http://www.flashmagictool.com/
然后我给大家介绍下KEIL自带的启动代码Startup.s,里面有关时钟的设置如图所示,当外部晶振为12M时,系统时钟60M,外设时钟15M

最后是UART0的编程:

第一步:设置管脚连接寄存器PINSEL0 = 0x00000005;开启RXD/TXD的功能。

第二步:设置UART0 线控制寄存器U0LCR,低2位是字长度选择,默认是005位字符长度,我们一般使用的是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);    

       }

}
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章