前言:最近在搞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 = 72MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
/*
*@对system_stm32f10x.c中的源代码修改如下
*@修改后的代码对应的外部晶振为16M
*/
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_Div2 | RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
解释:通过对比发现,修改后的代码多了一句话。
RCC_CFGR_PLLXTPRE_Div2
那么,这句有什么作用呢?
RCC_CFGR:时钟配置寄存器,偏移地址为:0x04,复位值为:0x0000 0000。
PLLXTPRE:PREDIV1分频因子的低位。
Div2:二分频
所以增加的这句代码的意思就是对(3~25MHz)HSE振荡器进行二分频,而我们所使用的晶振为16M的晶振,二分频之后为8M,所以修改之后,波特率就一一对应了,而不再是二倍的关系了。
那么,这个bug就到此为止,解决了吗?No,这样程序还是有bug,那么bug在哪呢?又是如何解决呢?
2)修改stm32f10x.h文件
/*
*@stm32f10x.h中的源代码部分
*/
#define HSE_VALUE ((uint32_t)8000000)
/*
*@对stm32f10x.h做如下修改
*/
#define HSE_VALUE ((uint32_t)16000000)
解释:这句代码应该就不用解释了吧,很明显,就是将HSE的值由8M修改为16M。
通过解决Bug,下面来对STM32的HSE时钟做一个简单的总结。
三、HSE时钟总结
1、高速外部时钟HSE的时钟源
1)HSE外部晶体/陶瓷谐振器
2)HSE用户外部时钟
2、高速外部时钟HSE的范围
HSE时钟的范围为3~25MHz。
3、HSE时钟树
3、寄存器配置
略。感兴趣的读者可以阅读手册。
上一篇:STM32 HAL HSE_VALUE
下一篇:第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列
设计资源 培训 开发板 精华推荐
- LT3970IMS-5 5V 降压转换器的典型应用
- LTM8053IY 15Vout 19.5 至 40Vin 降压转换器的典型应用电路
- EVAL-AD7622CB,AD7622 评估板,16 位,2 Msps PulSAR 模数转换器
- AM6TW-4815DH35Z ±15V 6 瓦双输出 DC/DC 转换器的典型应用
- LT6656AIDC-3、3V 精密电流和升压电压基准的典型应用
- FRDM-17511EV-EVB: Freedom扩展板 - MPC17511,H桥,有刷直流电机驱动器,2.0-6.8V,1A,16VMFP
- NCP1729电压逆变器的典型应用
- STM32F411-BOARD
- 触控环形工作灯
- AM1D-0509SH30-RZ 9V 1W DC/DC 转换器的典型应用
- 来英飞凌旗舰店,探寻秋日好物!
- Maxim 利用nanoPower创新技术,致力于降低系统的静态功耗 看视频答题赢好礼! 还有免费开发板等你拿
- 重磅上线!尼吉康技术子站专区只等你来!
- 【EEWORLD第三十四届】2012年01月社区明星人物揭晓!
- 希望一月 爱上EEWORLD——论坛推广月(恩智浦全程赞助)
- 最后一周:免费获取Pasternack《RF产品选型指南》2018 印刷版!
- 年终大冲关!第二期光荣榜活动震撼登场!
- phyBOARD-i.MX 8M Plus 开发板来袭 免费申请进行时!
- 是德科技有奖直播:如何使用UXR系列高端示波器
- 发帖赢好礼 | MPS 工程师为您解决DC-DC设计难题