新建的UART0通讯波特率不一致的问题(波特率降低4倍)
扫描二维码
随时随地手机看文章
如果用Keil ARM的话自动生成的Startup.s中默认VPBDIV=0X00000000,这就导致Fpclk为4分频。导致波特率下降四倍。以下为keil中的Startup.s中默认设定的值。;//
;// Peripheral Bus Clock Rate
;//
;// <0=> VPB Clock = CPU Clock / 4
;// <1=> VPB Clock = CPU Clock
;// <2=> VPB Clock = CPU Clock / 2
;//
;// <0=> XCLK Pin = CPU Clock / 4
;// <1=> XCLK Pin = CPU Clock
;// <2=> XCLK Pin = CPU Clock / 2
;//
VPBDIV_SETUP EQU 0VPBDIV_Val EQU 0x00000000我们将其修改为:
VPBDIV_SETUPEQU1
VPBDIV_ValEQU0x00000001
问题解决。
#include
#include"Config.H"
#defineUART_BAUD(baud)(unsignedint)((FOSC*PLL_M)/(baud*16))
voidInit_Uart0(unsignedintBaud)
{
/*initializetheserialinterface*/
PINSEL0=0x00000005;/*EnableRxD0andTxD0*/
U0LCR=0x83;/*8bits,noParity,1Stopbit*/
U0DLM=(unsignedchar)(Baud>>8);
U0DLL=(unsignedchar)Baud;
U0LCR=0x03;/*DLAB=0*/
}
voiddelay(unsignedinti){/*Delayfunction*/
unsignedintn;
while(i>1)
{
for(n=65535;n>1;n--);
i--;
}
}
voidSent_Byte(unsignedchardata)
{
U0THR=data;//发送数据
while((U0LSR&0x40)==0);//等待数据发送完毕
}
voidSent_Str(unsignedcharconst*str)
{while(1)
{if(*str=='/0')break;
Sent_Byte(*str++);//发送数据
}
}
voidmain(void)
{
Init_Uart0(UART_BAUD(115200));
for(;;)
{
Sent_Str("www.dnp.cn/n");
delay(200);
}
}