我做的是LPC2132的串口实验,设置的波特率总出现问题当程序中Fclk的值为11059200时(红 {MOD}字体部分),按照LPC2132的手册计算的波特率应该是9600,但在
仿真的过程中波特率却为48000这相差太远了,把Hex文件下道板子里时在串口调试助手中出现的都是乱码;(在IAR和MDK3.5中没有出现这样问题,正常使用);当把程序中红 {MOD}字体改为#define Fclk (11059200*5)时仿真结果中的波特率才是9600;这时下到板子里没有出现乱码这样的问题了,感觉MDK422似乎给自己的晶振的频率增加了5倍,我想问一下,这是什么问题,这问题在MDK3.5中没出现啊!
/*******************************
File Name:UART0.c
Date:2011.11.20
Version: v1.0
Author: W R J
*******************************/
#include <lpc213x.h>
#define Fclk 11059200 //晶振频率11.0592MHz
#define BPS 9600 //设置波特率为9600
typedef unsigned int uint32;
typedef unsigned short uint16;
typedef unsigned char uint8;
uint8 Rcv_buf[] = {"Life is like this:See a need,Fill a need!!!"};
/*
延时函数
*/
void Delay(uint16 T)
{
uint16 i;
uint8 j = 120;
for(i=0;i<T;i++)
while(j--);
}
/*
UART0端口初始化函数
*/
void Port_Init(void)
{
uint16 Fdiv;
PINSEL0 = PINSEL0|0x05; //l连接UART功能
VPBDIV = 0x01; //不分频
U0LCR = 0x83; //使能DLL和DLM访问,8bits
Fdiv = (Fclk/16)/BPS; //设置波特率为9600
U0DLM = Fdiv/256;
U0DLL = Fdiv%256;
U0FCR = 0xc1; //14字符缓冲
}
/*
发送函数
*/
void Send_Bytes(uint8 *p)
{
while(*p !=' ')
{
U0LCR &= 0x7f;
while((U0LSR&0x40)==0);//等待发送完毕
U0THR = *p++;
}
}
/*f
接收函数
*/
void Rcv_Bytes(void)
{
uint8 i = 0;
U0LCR &= 0x7f;
while((U0LSR&0x01)==1) //不为空
Rcv_buf[i++] = U0RBR;
}
/*
主函数
*/
int main(void)
{
Port_Init();
while(1)
{
Send_Bytes(Rcv_buf);
Delay(5000);
Rcv_Bytes();
Delay(5000);
}
return 1;
}
-
-
Keil MDK422问题.doc
下载积分: 积分 -1 分
76 KB, 下载次数: 3, 下载积分: 积分 -1 分
一周热门 更多>