MDK4中出现的问题

2019-07-16 10:44发布

我做的是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 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。