STM32使用非8M晶振时如何修改代码
2016-10-13 13:06
197 查看
目前能找到的大部分代码都是默认8M外部晶振的,若使用的晶振不是8M则需要作一些修改。例如这次我使用的外部晶振是12M的,作如下修改。
1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)处的值(改为12MHz)。此处修改影响Debug时观察到的时钟数值。
2.在system_stm32f10x.c开头的注释里有:
根据描述,将stm32f10x.h中大约在0121行找到,修改掉。
不过很奇怪的是,即使修改了此处的值,PLL的时钟还是不正确(程序依旧讲PLL按9倍频配置)。此处有待进一步探究(目前暂时只知道编译的代码没有用到HSE_VALUE)。
3.顺着代码寻找原因,最后发现真正起作用的部分在system_stm32f10x.c里的SetSysClockTo72(void)函数(0993行,这里假设我们希望MCU工作在72MHZ)。
在1058行有这样一段代码:
注释部分是函数自带的,真正起作用的部分在这里,因此把RCC_CFGR_PLLMULL9改为RCC_CFGR_PLLMULL6。
1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)处的值(改为12MHz)。此处修改影响Debug时观察到的时钟数值。
2.在system_stm32f10x.c开头的注释里有:
* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on * the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. * When HSE is used as system clock source, directly or through PLL, and you * are using different crystal you have to adapt the HSE value to your own * configuration.
根据描述,将stm32f10x.h中大约在0121行找到,修改掉。
#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 */
不过很奇怪的是,即使修改了此处的值,PLL的时钟还是不正确(程序依旧讲PLL按9倍频配置)。此处有待进一步探究(目前暂时只知道编译的代码没有用到HSE_VALUE)。
3.顺着代码寻找原因,最后发现真正起作用的部分在system_stm32f10x.c里的SetSysClockTo72(void)函数(0993行,这里假设我们希望MCU工作在72MHZ)。
在1058行有这样一段代码:
#else /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ 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);
注释部分是函数自带的,真正起作用的部分在这里,因此把RCC_CFGR_PLLMULL9改为RCC_CFGR_PLLMULL6。
相关文章推荐
- STM32使用不同的晶振需修改的代码
- 如何使用修改的开源代码 - 基于 Maven
- 如何使用ASP.NET代码查看、修改AD用户信息
- 如何修改本地代码,并更新到github,及其他使用技巧
- 如何使用git精确定位代码的出处,作者,时间,SHA,并精确查看代码的修改记录
- 使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
- stm32变更外部晶振时如何配置时钟、以及HSI的使用
- 如何在maven里配置使用本地修改的代码
- 如何在WeX5中使用自己的tomcat并在修改代码后自动同步
- 当手头上没有示波器,如何通过代码测试stm32外部晶振是否工作
- 如何修改本地代码,并更新到github,及其他使用技巧
- 手机使用了QWERTY keypad,想要在idle home screen时长按SHIFT键进行静音模式切换,该如何修改代码
- 如何使用dnSpy反编译unity代码并修改
- STM32系列修改外部晶振以及代码的修改(f103、f105为例)
- STM32使用外部16MHZ晶振修改程序点
- xib中使用Autolayout进行布局,在代码里面如何进行修改布局
- 在storyboard中设置一个一个button,只进行了位置设置,没有使用约束,发现用代码修改不了如何解决
- 如何使用SmartGit快速上传下载新建分支修改代码
- 右键点击修改Grid的单列值,及修改全表的值,还有相同点击事件的代码简化,及如何双击关闭一个tabsheet