ARM7學(xué)習(xí)---UART0練習(xí)
以下是調(diào)試成功的示例程序:
本文引用地址:http://m.butianyuan.cn/article/201611/316017.htm/**************ARM7(LPC2103)練習(xí)程序**************************/
/*************************************************************/
/*****File Function : UART test *****/
/*****Program Author : ZhengWen(ClimberWin) *****/
/*****MCU : LPC2103F 外部11.0592M晶振 *****/
/*****Compile Date : 2009/12/3 *****/
/*****Edition Info : V1.0 *****/
/*************************************************************/
//編譯環(huán)境 KEIL for ARM
//功能描述:串口練習(xí),使用UART0向串口發(fā)送字符和字符串
//接收串口數(shù)據(jù)并且+1后發(fā)回給串口
//修改日期 2010年2月8日。
//以前是系統(tǒng)的各部分時鐘沒配置好,所以導(dǎo)致波特率不對,現(xiàn)在可以正常工作。
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define baudrate 9600 //設(shè)置波特率
#define PE (U0LSR&0x40)//定義串口數(shù)據(jù)發(fā)送忙碌與否,PE=1忙碌;PE=0;不忙綠
#define Fosc(11059200)//晶振頻率,10MHz~25MHz,應(yīng)當(dāng)與實(shí)際一至
#define Fcclk(Fosc * 6) //66.3552 系統(tǒng)頻率,必須為Fosc的整數(shù)倍(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 da
void UART0_SendStr(unsigned char const *str);//串口發(fā)送字符串
void PLL_Init(void)
{
/* 設(shè)置系統(tǒng)各部分時鐘 */
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
}
/***********串口0初始化**********************/
void UART0_INT(void)
{ unsigned int U0DL;
U0LCR = 0x83; // DLAB = 1,可設(shè)置波特率;無奇偶校驗(yàn) 1位停止位 8位數(shù)據(jù)長度。
U0DL = (Fpclk/16)/baudrate;
U0DLM= U0DL/256; //高8位
U0DLL = U0DL%256; //低8位
U0LCR = 0x03; // DLAB = 0,設(shè)置好波特率;無奇偶校驗(yàn) 1位停止位 8位數(shù)據(jù)長度。
}
/***********串口發(fā)送字節(jié)**********************/
void UART0_SendByte(unsigned char da
{
U0THR = da
while( PE==0 ); //等待數(shù)據(jù)發(fā)送完畢 PE=1忙碌;PE=0;不忙綠
}
/***********串口發(fā)送字符串**********************/
void UART0_SendStr(unsigned char const *str)
{ while(1)
{ if( *str ==