打印
[STM32F1]

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

[复制链接]
379|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1988020566|  楼主 | 2023-5-30 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


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

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

第三步,打开你已经建立的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 | 只看该作者
在修改延时函数时,需要根据具体应用需求和系统资源来进行权衡和选择,并进行充分的测试和验证,确保延时函数的正确性和可靠性。

使用特权

评论回复
5
pixhw| | 2023-6-14 11:04 | 只看该作者
RCC_CFGR_PLLMULL9"改为"RCC_CFGR_PLLMULL6"

使用特权

评论回复
6
qiufengsd| | 2023-6-15 22:50 | 只看该作者
所有定时器的时钟和定时值,你的系统时钟变了,而定时器时钟是系统时钟分频来的

使用特权

评论回复
7
AloneKaven| | 2023-6-17 23:37 | 只看该作者
cubeMX里面可以配置

使用特权

评论回复
8
Jacquetry| | 2023-6-18 22:27 | 只看该作者
把外部晶振频率改成12 cubemx会自动计算倍数的

使用特权

评论回复
9
saservice| | 2023-6-19 13:09 | 只看该作者
如果系统时钟频率发生了变化,可以使用定时器来实现精确的延时。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

402

主题

10655

帖子

6

粉丝