本帖最后由 南河壹号 于 2023-8-14 10:24 编辑
#申请原创# #技术资源# https://blog.csdn.net/qq_43751565/article/details/132250669?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169183067616800222847054%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169183067616800222847054&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-132250669-null-null.142^v92^chatgptT0_1&utm_term=APM32F103%E4%BD%BF%E7%94%A8ST%E7%9A%84%E5%BA%93%E4%BF%AE%E6%94%B9%E6%97%B6%E9%92%9F%E5%92%8C%E8%AE%BE%E7%BD%AEFLASH%E4%BB%A3%E7%A0%81%E5%BB%B6%E8%BF%9F%E5%80%BC&spm=1018.2226.3001.4187
图片加载不出来可以去CSDN查看,链接见上
1、当系统复位信号发生的时候,程序将执行复位中断函数,而在复位中断函数中是先执行SystemInit函数后在执行__main函数,如下图所示:
 编辑
2、系统会调用SystemInit函数完成系统时钟的配置,系统时钟配置的过程如下所示:
 编辑
在系统时钟配置的第三步有多个函数可以选择,这里可以根据自己的需求选择相应的配置流程,只需要在system_stm32f10x.c文件中定义相应的宏即可(默认配置为72MHz),这里我们添加96MHz和120MHz
- 1、在system_stm32f10x.c如下位置添加这两行宏定义
 编辑
 编辑
 编辑
 编辑
- 5、再再再也是最重要的一步,复制static void SetSysClockTo72(void)整个函数在这个函数后面,注意条件编译函数,不然复制后会报错,再在里面进行相应的修改,重点修改两个位置,见下图,120MHz也是同样的道理
 编辑
 编辑
- 6、在第一个图片位置进行修改会提示没有定义,需要进行如下修改
1. 在stm32f10x.h里面添加如下几行
 编辑
2.在stm32f10x_flash.h里面添加如下几行
 编辑
- 7、到这里就大功告成了,看是否成功,下面是主函数代码,源码里面也给了使用库函数修改时钟的方法,最后面百度网盘自提
#include "stm32f10x.h" // Device header
#include "led.h"
#include "rcc.h"
void delay(u32 i)
{
while(i--);
}
int main()
{
RCC_ClocksTypeDef RCC_Clocks;
// RCC_HSI_Config(RCC_PLLMul_16);
// RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_12);
RCC_GetClocksFreq(&RCC_Clocks);
LED_Init();
while(1)
{
GPIO_ResetBits(LED0_PORT,LED0_PIN);
GPIO_ResetBits(LED1_PORT,LED1_PIN);
delay(6000000);
GPIO_SetBits(LED0_PORT,LED0_PIN);
GPIO_SetBits(LED1_PORT,LED1_PIN);
delay(6000000);
}
}
最后看编译结果,结果是16进制的96MHz,成功
 编辑
至于为什么需要设置成3等待周期,见下图
 编辑
最后再补充一点:如果使用的外部晶振不是8MHz,需要在stm32f10x.h里面如下位置进行修改
 编辑
附件给源码,有需要自取,新手只有2MB附件上传,给百度网盘链接吧
链接:https://pan.baidu.com/s/1vDZDyVVCsXV3d9UmD_OEog 提取码:1234 --来自百度网盘超级会员V5的分享
|