[STM32F1] 8m换成12m系统延时函数如何更改

[复制链接]
680|8
 楼主| 1988020566 发表于 2023-5-30 19:00 | 显示全部楼层 |阅读模式


  1. 通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。 第一步,打开stm32f10x.h,将
  2. #define HSE_VALUE ((uint32_t)8000000) 修改为:
  3. #define HSE_VALUE ((uint32_t)12000000)
  4. 第二步,打开system_stm32f10x.c,修改PLL参数,将

  5. RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  6. RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); 修改为:

  7. RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
  8. RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); 至此,原文件已经修改完成,如果你想将主频修改至其他频率,请自行修改。但是,到现在,如果您直接编译调试的话,就会出现上文所说的USART的波特率不正确,Systick走时不准等问题,原因就是我们需要进行第三部的修改,这个修改不是在原文件中,而是在编译环境中。我们已Keil MDK为例说明。

  9. 第三步,打开你已经建立的STM32工程,选择Projects-〉Options for target ***,找到Target标签,你会发现,外接的晶振默认还是8MHz,我们将外接的晶振参数修改为12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设置波特率为9600,它也不会跑到14400,设置Systick为1ms中断,它不会1.5ms中断。


jtracy3 发表于 2023-6-8 07:25 | 显示全部楼层
通过 rcc_getclocksfreq 函数获取系统频率的。
backlugin 发表于 2023-6-8 15:23 | 显示全部楼层
系统时钟频率的变化会影响延时函数的执行时间,需要对延时函数进行适当修改。
macpherson 发表于 2023-6-14 10:52 | 显示全部楼层
在修改延时函数时,需要根据具体应用需求和系统资源来进行权衡和选择,并进行充分的测试和验证,确保延时函数的正确性和可靠性。
pixhw 发表于 2023-6-14 11:04 | 显示全部楼层
RCC_CFGR_PLLMULL9"改为"RCC_CFGR_PLLMULL6"
qiufengsd 发表于 2023-6-15 22:50 | 显示全部楼层
所有定时器的时钟和定时值,你的系统时钟变了,而定时器时钟是系统时钟分频来的
AloneKaven 发表于 2023-6-17 23:37 | 显示全部楼层
cubeMX里面可以配置
Jacquetry 发表于 2023-6-18 22:27 | 显示全部楼层
把外部晶振频率改成12 cubemx会自动计算倍数的
saservice 发表于 2023-6-19 13:09 | 显示全部楼层
如果系统时钟频率发生了变化,可以使用定时器来实现精确的延时。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

423

主题

11031

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部