为了保证我一批产品UART波特率的一致性,我使用了 DCO_Library.s43 的库 函数,代码在下面,但是测试下来,3块板子,一个SMCLK 输出1.93M ,一个1.66M 一个1.87M UART口根本没办法配置才能保证3个板子UART都出9600的波特率,请问一下,我程序哪里不对么,
WDTCTL = WDTPW + WDTHOLD;
Init_Clk();
Init_IO();
// BCSCTL3 = LFXT1S1;
// P1DIR |= 0x1; // P1.1 and P1.4 outputs
// P1SEL |= 0x01;//P1.4 SMCLK output
// P1SEL2= 0x01;// P1.4 SMCLK output
Delay_ms(100);
result = TI_SetDCO(TI_DCO_5MHZ);
if( result == TI_DCO_SET_TO_SLOWEST ) // returned result if DCO registers hit min
{
while(1); // trap the CPU if hit
}
else if( result == TI_DCO_SET_TO_FASTEST ) // returned result if DCO registers hit max
{
while(1); // trap the CPU if hit
}
else if( result == TI_DCO_TIMEOUT_ERROR ) // result if DCO takes >10000 loops
{
while(1); // trap the CPU if hit
}
Init_Uart();
//****************************************************
//Shanghai GanKun Co., Ltd.
//designed by hank
//Main fuction
//****************************************************
void Init_Clk(void)
{
// DCOCTL = DCO0 + DCO1 ; // DCO = 3
// BCSCTL1 = XT2OFF + RSEL2 + RSEL3 ; // RSEL= 12 CLK = 5.8MHZ XT2 OFF
DCOCTL = DCO0 + DCO1 + DCO2 ; // DCO = 3
BCSCTL1 = XT2OFF + RSEL0 + RSEL1 + RSEL2 + RSEL3 ; // RSEL= 12 CLK = 5.8MHZ XT2 OFF
BCSCTL2 = 0; // SMCLK = DCO MCL = DCO
BCSCTL3 =LFXT1S1; //LFXT = VLOCLK
}
//****************************************************
//Shanghai GanKun Co., Ltd.
//designed by hank
//Main fuction
//****************************************************
void Init_IO(void)
{
P1DIR =BIT0+BIT3+BIT4;
P1REN = 0;
P1SEL = BIT0+ BIT3+BIT4; // P1.3,P1.4 = USART0 TXD/RXD
P1SEL2 = BIT0;
P2DIR = 0X01;
P2REN = 0X00;
P2SEL = 0X00;
P2SEL2 = 0X00;
P2OUT = 0x00;
SET_RS485_READ;
}