ARM7学习---UART0练习

发布者:科技奇才最新更新时间:2016-09-06 来源: eefocus关键字:ARM7  UART0 手机看文章 扫描二维码
随时随地手机看文章
前段时间在练习ARM7的时候遇到一个问题,就是串口通信一直没成功,数据总是出错,好像是波特率没设置好。但是我找了很久都没找出原因。昨天又看数据手册,后来找到了原因,是LPC2103的PLL等时钟没配置好,所以导致了波特率和我设置的不一样。

以下是调试成功的示例程序:

/**************ARM7(LPC2103)练习程序**************************/
/*************************************************************/
/*****File  Function :  UART test                        *****/
/*****Program Author :  ZhengWen(ClimberWin)             *****/
/*****MCU            : LPC2103F 外部11.0592M晶振        *****/
/*****Compile Date   :  2009/12/3                        *****/
/*****Edition Info   :  V1.0                             *****/
/*************************************************************/
//编译环境 KEIL for ARM 
//功能描述:串口练习,使用UART0向串口发送字符和字符串
//接收串口数据并且+1后发回给串口

//修改日期 2010年2月8日。
//以前是系统的各部分时钟没配置好,所以导致波特率不对,现在可以正常工作。      
#include
#include
#define   uint    unsigned int
#define   uchar    unsigned char

#define    baudrate   9600     //设置波特率
#define    PE        (U0LSR&0x40) //定义串口数据发送忙碌与否,PE=1忙碌;PE=0;不忙绿

#define Fosc (11059200)  //晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk (Fosc * 6)   //66.3552 系统频率,必须为Fosc的整数倍(1~32),且<70MHZ
#define Fcco (Fcclk * 4)  //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk (Fcclk / 4) * 1 //016.5888,VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍


void delayms(unsigned int count);            //延时程序
void UART0_INT(void);                        //串口初始化
void UART0_SendByte(unsigned char data);     //串口发送字节
void UART0_SendStr(unsigned char const *str);//串口发送字符串

void PLL_Init(void)
{
  /* 设置系统各部分时钟 */
    PLLCON = 1;
 #if ((Fcclk / 4) / Fpclk) == 1
  VPBDIV = 0;
 #endif
 #if ((Fcclk / 4) / Fpclk) == 2
  VPBDIV = 2;
 #endif
 #if ((Fcclk / 4) / Fpclk) == 4
  VPBDIV = 1;
 #endif
 #if (Fcco / Fcclk) == 2
  PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
 #endif
 #if (Fcco / Fcclk) == 4
  PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
 #endif
 #if (Fcco / Fcclk) == 8
  PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
 #endif
 #if (Fcco / Fcclk) == 16
  PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
 #endif
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  while((PLLSTAT & (1 << 10)) == 0);
  PLLCON = 3;
  PLLFEED = 0xaa;
  PLLFEED = 0x55; 
}

/*************延时程序***************/
void delayms(unsigned int count)
{
 unsigned int i,j;
 for(i=0;i  for(j=0;j<5000;j++);
}
/***********串口0初始化**********************/
void UART0_INT(void)
{ unsigned  int U0DL;
 
  U0LCR = 0x83;                 // DLAB = 1,可设置波特率 ;无奇偶校验  1位停止位 8位数据长度。
  U0DL =  (Fpclk/16)/baudrate;
  U0DLM=  U0DL/256;       //高8位
  U0DLL = U0DL%256;       //低8位
  U0LCR = 0x03;           // DLAB = 0,设置好波特率;无奇偶校验 1位停止位 8位数据长度。
}
/***********串口发送字节**********************/
void UART0_SendByte(unsigned char data)

  U0THR = data;                    //发送数据
  while( PE==0 );                 //等待数据发送完毕 PE=1忙碌;PE=0;不忙绿

}
/***********串口发送字符串**********************/
void UART0_SendStr(unsigned char const *str)
{   while(1)
  { if( *str == '\0' ) break;
     UART0_SendByte(*str++);        //发送数据
  }
}
/*************串口接收字符*************************/

unsigned char UART0_GetChar(void)
{                         

  while (!(U0LSR & 0x01));
  return (U0RBR);
}
/////////////主程序///////////////////
int main(void)

  unsigned char temp;

  PINSEL0 = 0x00000005;            //设置I/O连接到UART0
  PINSEL1 = 0x00000000;

   PLL_Init();//系统时钟配置,必须设置
  UART0_INT(); //串口初始化
   UART0_SendStr("LPC2103 UART0 Test OK!");  //向串口发送字符串
   delayms(1000); 
  while(1)    
  {
   temp=UART0_GetChar();   //接收串口数据
   UART0_SendByte(temp+1); //串口数据+1后发回到电脑串口 
  }
  return(0);
}

关键字:ARM7  UART0 引用地址:ARM7学习---UART0练习

上一篇:ARM7学习---GPS练习
下一篇:ARM9学习---虚拟机中LINUX与主XP系统数据通信

推荐阅读最新更新时间:2024-03-16 15:08

ARM7嵌入式LPC21XX系列LED灯
LPC2106点亮 一个LED灯 仿真图: 代码: #include config.h #define LEDCON 0x00000200 void DelayNS(uint32 dly) { uint32 i; for( ;dly 0;dly--) for(i=0;i 50000;i++); } int main(void) { PINSEL0=0x00000000; PINSEL1=0x00000000; IODIR=LEDCON; IOSET=LEDCON; while(1) { IOCLR=LEDCON; DelayNS(30); IOSET=LEDCON; DelayNS(30
[单片机]
<font color='red'>ARM7</font>嵌入式LPC21XX系列LED灯
基于ARM7 TDMI的SoC语音处理系统的设计
   引 言   随着微电子和计算机技术的高速发展,许多嵌入式应用系统应运而生。其中,各种语音处理系统不断被开发出来,在各行业得到广泛应用,如语音报站器、自动解说装置、采访录音笔等,为人类的生产、生活提供了极大的便利。本文基于东南大学国家专用集成电路的32位嵌入式SoC——SEP3203处理器,采用G.721标准ADPCM算法,实现了语音信号的软件实时编解码,为语音处理应用提供了一种有效的嵌入式解决方案。    1、G.721标准概述   1937年,A.H.Reeves提出脉冲编码调制(PCM),开创了语音数字化通信的历程。CCITT在20世纪80年代初,开始研究低于64 Kb/s的非PCM编码算法,先后制定通过了
[单片机]
基于<font color='red'>ARM7</font> TDMI的SoC语音处理系统的设计
ARM7用户模式下禁止/使能中断的一种方法-使用软中断forKeilMDK
最近写一个程序,需要在用户模式下关中断,但ARM 7的体系结构决定了中断必须在特权模式下才可以更改,所以想到使用ARM的软中断来实现关中断和开中断. 使用软中断,首先要有硬件指令的支持.ARM有条指令是SWI. SWI 指令的格式为: SWI {条件} 24 位的立即数 SWI 指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在 SWI 的异常处理程序中提供相应的系统服务,指令中 24 位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中 24 位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器 R0 的内容决定,同时,参数通过其他通用寄存器传递。 指令示例: SWI
[单片机]
采用ARM7的S3C44BOX的嵌入式定量分析系统设计方案
  煤矸石是采煤和洗煤过程中排放的固体废物,是一种在成煤过程中与煤层伴生的黑灰色岩石。全国现有矸石山1500余座,堆积量30亿吨以上,占中国工业固体废物排放总量的40%以上。煤矸石的大量堆放,不仅占用土地资源,而且造成环境污染。用洗中煤和矸石混烧发电,是解决污染的有效途径。2009年,煤矸石综合利用量3.9亿吨以上,利用率达到70%以上。如何快速、精确地定量分析混合燃料中煤与矸石的搭配比例,就成为监管部门及企业需要解决的问题。为解决上述问题,本文基于ARM7芯片S3C44BOX,设计了一个集数据采集、处理、显示为一体的嵌入式定量分析系统,并可以通网络将数据传送到远程PC。   1 系统原理及总体方案设计   1.1 系统原理
[单片机]
采用<font color='red'>ARM7</font>的S3C44BOX的嵌入式定量分析系统设计方案
ARM7系统中实现CF卡存储的文件系统设计
随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。 目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。 另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得不
[单片机]
<font color='red'>ARM7</font>系统中实现CF卡存储的文件系统设计
ARM7 VS Cortex-M3
要使用低成本的32位处理器,开发人员面临两种选择,基于Cortex-M3内核或者ARM7TDMI内核的处理器。如何做出选择?选择标准又是什么?本文主要介绍了ARM Cortex-M3内核微控制器区别于ARM7的一些特点,帮助您快速选择。 1.ARM实现方法 ARM Cortex-M3是一种基于ARM7v架构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线(冯诺伊曼结构下,数据和指令共用一条总线)。从本质上来说,哈佛结构在物理上更为复杂,但是处理速度明显加快。根据摩尔定理,复杂性并不是一件非常重要的事,而吞吐量的增加却极具价值。 ARM公司对Cortex-M3的定位是:向专业嵌入式市场提供低成本、低功耗的
[单片机]
实时操作系统µC/OS-II在ARM7上的移植
1 引言 目前,嵌入式系统在家电、移动电话、PDA等各种领域的应用日益广泛,程序设计也越来越复杂,这就需要采用一个通用的嵌入式操作系统来对其进行管理和控制。移植了操作系统的嵌入式系统开发,可大大减轻程序员的负担,操作系统提供了多任务的管理功能,只需专注于每个任务的管理。对于不同的应用,可以按照相同的步骤完成系统设计。如果更换硬件平台,则只需要对操作系统进行少量的移植工作,与硬件无关的应用代码完全无需修改,同时,可增强代码的可读性、可维护性和可扩展性。 µC/OS-II是一种专门为微处理器设计的抢占式实时多任务操作系统,具有源代码公开、可移植性和可靠性高等特点。由于µC/OS-II是为嵌入式应用编写的通用软件,故在具体应用时需根
[单片机]
实时操作系统µC/OS-II在<font color='red'>ARM7</font>上的移植
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved