前言:最近在搞GPRS的时候,遇到了这么一个问题,所使用的单片机为STM32F103RBT6,刚开始先写了个串口打印的程序,波特率设置为19200,可是在上位机上输出的信息总是乱码,检查了好几遍的代码,硬件等等就是没找到问题。于是就在上位机上对波特率从115200往下一个一个的试,终于,当波特率设置为38400的时候,打印信息正确,额滴歌神啊,这是什么情况呢,我在程序中明明设置的波特率为19200,为什么上位机上波特率为19200的时候不对,而为38400的时候输出正确呢?于是,又回过头来检查电路原理图和代码,Oh,My god,原来问题在这里,因此这篇博客将以我遇到的问题为起点,对STM32的HSE时钟做一个总结。
一、问题
通过检查电路原理图,发现问题的根源所在,电路中所使用的晶振为16M,而我们经常使用的晶振为8M的,所以导致波特率变为2倍。
二、解决方法
因为使用的晶振为16M的,所以需要对程序中库函数要进行修改。那么,具体要修改哪呢?
1)修改system_stm32f10x.c文件。
/*
*@system_stm32f10x.c中的源代码部分
*@这部分代码为外部晶振为8M时的情况
*/
/*PLL configuration:PLLCLK = HSE * 9 = 72MH