STM8S105使用外部晶振做串口通讯时,波特率变为设置值的一半。请问这是什么原因?程序种下:
使用内部时钟时,设置波特率为115200,电脑上也设置为115200能正常通讯,STM8S105端的配置如下: CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//直接使用内部时钟,并一分频。
UART2_DeInit();
//波特率,字节数,1个停止位,无奇偶效验位,非同步模式,允许接受和发送
UART2_Init((u32)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);
UART2_Cmd(ENABLE );
//设置内部高速时钟16M为主时钟
现在我改成使用外部时钟,晶振为8M,设置波特率为115200,电脑上要将波特率设置为57600时才能正常通讯,STM8S105端的配置如下:
CLK_DeInit(); //--> 时钟各变量初始化
CLK_HSECmd(ENABLE); //--> 外部高速晶振使能
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY)); //--> 测试外部高速晶振位是不是使能
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //--> 外部时钟预分频器,1分频
CLK_ClockSwitchCmd(ENABLE); //--> 使能时钟切换功能
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
UART2_DeInit();
//波特率,字节数,1个停止位,无奇偶效验位,非同步模式,允许接受和发送
UART2_Init((u32)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);
UART2_Cmd(ENABLE );
我想是因为使用外部时钟为8M时,导致波特率降低,请问要如何配置才能在外部时钟为8M的情况下,串口波特率也一样为115200?
谢谢。
|