STM32F103外部晶振由8M变为12M
来源:互联网 发布:大数据研发算法工程师 编辑:程序博客网 时间:2024/05/04 16:41
STM32官方提供的库文件中,HSE(外部高速时钟)默认为8MHz,最高主频为8*9=72MHz,如果将HSE变为12MHz,不修改库文件的话,最高主频则变为12*9=108MHz,最典型的问题就是USART可以通信,但是接收到的数据与发送的不一致,并且找不到啥原因,害的我瞎折腾了一整天,下面列举需要修改的地方。
1、修改stm32f10x.h中的HSE_VALUE,原本的代码如下:
#if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */#endif /* HSE_VALUE */
#if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */#endif /* HSE_VALUE */
2、修改system_stm32f10x.c中的时钟配置,先找到void SystemInit(void)---》SetSysClock()---》SetSysClockTo72(),将9倍频改为6倍频,12*6=72MHz,原本代码如下:
#ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); /* Enable PLL2 */ RCC->CR |= RCC_CR_PLL2ON; /* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY) == 0) { } /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9); #else /* PLL configuration: PLLCLK = <span style="color:#ff0000;">HSE * 9 = 72 MHz</span> */ 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);#endif /* STM32F10X_CL */
修改后的如下:
#ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); /* Enable PLL2 */ RCC->CR |= RCC_CR_PLL2ON; /* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY) == 0) { } /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9);#else /* PLL configuration: PLLCLK = <span style="color:#ff0000;">HSE * 6 = 72 MHz</span> */ 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_PLLMULL6);#endif /* STM32F10X_CL */
1 0
- STM32F103外部晶振由8M变为12M
- STM32F103外部晶振由8M变为12M
- STM32F103 的晶振由8M改为了12M,串口该怎么配置
- STM32外部晶振8M更改为25M
- stm32f105使用12M外部晶振
- stm32f103使用16M(非8M)晶振
- IAR下stm32使用12M外部晶振
- IAR下stm32使用12M外部晶振
- 通过修改SystemInit匹配12M外部晶振
- STM32F103系列 HSI 48M
- [OpenWrt] Flash 由4M改8M(或者16M), openwrt源码的修改
- STM32F407ZG单片机晶振由例程默认推荐的8M换为自定义的4-26M时的注意事项
- STM32F407ZG单片机晶振由例程默认推荐的8M换为自定义的4-26M时的注意事项
- STM32F407ZG单片机晶振由例程默认推荐的8M换为自定义的4-26M时的注意事项
- STM32库文件systemInit 晶振更改默认晶振8M到12M方法
- RAM由512M改成256M
- M
- m
- Spring配置文件头解析
- std::list
- Android帧动画animation-list在ProgressBar上失效的解决办法
- log4j
- tomcat结合nginx使用小结
- STM32F103外部晶振由8M变为12M
- 下拉刷新实现步骤分析及RefreshListView的使用步骤说明
- 8.2.1.4 Index Merge Optimization 索引合并优化:
- Java-IO之超类OutputStream
- Java文件下载(excel)
- HDU 4027Can you answer these queries? (线段树变着花样让你区间更新)
- 解决KEIL搜索不能跳转的问题
- 图灵access数据库恢复大师v1.3.10.11无捆绑绿色版
- SAP原因代码