新建的UART0通讯波特率不一致的问题(波特率降低4倍)

如果用Keil ARM的话自动生成的Startup.s中默认VPBDIV=0X00000000,这就导致   Fpclk 为4分频。导致波特率下降四倍。以下为keil中的Startup.s中默认设定的值。
;// <e> VPBDIV Setup
;// <i> Peripheral Bus Clock Rate
;//   <o1.0..1>   VPBDIV: VPB Clock
;//               <0=> VPB Clock = CPU Clock / 4
;//               <1=> VPB Clock = CPU Clock
;//               <2=> VPB Clock = CPU Clock / 2
;//   <o1.4..5>   XCLKDIV: XCLK Pin
;//               <0=> XCLK Pin = CPU Clock / 4
;//               <1=> XCLK Pin = CPU Clock
;//               <2=> XCLK Pin = CPU Clock / 2
;// </e>
VPBDIV_SETUP    EQU     0
VPBDIV_Val      EQU     0x00000000
我们将其修改为:

VPBDIV_SETUP    EQU     1

VPBDIV_Val      EQU     0x00000001

问题解决。

  1. #include <LPC213X.H>
  2. #include "Config.H"
  3. #define UART_BAUD(baud) (unsigned  int)((FOSC*PLL_M) / (baud * 16))
  4. void Init_Uart0(unsigned int Baud)
  5.  {
  6.    /* initialize the serial interface   */
  7.   PINSEL0 = 0x00000005;           /* Enable RxD0 and TxD0                     */
  8.   U0LCR = 0x83;                   /* 8 bits, no Parity, 1 Stop bit            */
  9.   U0DLM=(unsigned char)(Baud>>8);
  10.   U0DLL = (unsigned char)Baud;                     
  11.   
  12.   U0LCR = 0x03;                   /* DLAB = 0     */
  13.  }
  14. void delay (unsigned int i) {                      /* Delay function */
  15. unsigned int n;
  16. while(i>1)
  17. {
  18.     for(n=65535;n>1;n--);
  19.     i--;
  20. }
  21. }
  22. void  Sent_Byte(unsigned char data)
  23. {  
  24.     U0THR = data;                   // 发送数据
  25.    while( (U0LSR&0x40)==0 );        // 等待数据发送完毕
  26. }
  27. void  Sent_Str(unsigned char const *str)
  28. {  while(1)
  29.    {  if( *str == '/0' ) break;
  30.       Sent_Byte(*str++);        // 发送数据
  31.    }
  32. }
  33.  void main(void)
  34.  {
  35.     
  36.      Init_Uart0(UART_BAUD(115200));
  37.     
  38.      for(;;)
  39.      {
  40.         Sent_Str("www.dnp.cn /n") ;
  41.         delay(200);
  42.      }
  43.  }

你可能感兴趣的:(新建的UART0通讯波特率不一致的问题(波特率降低4倍))