历史上的今天
今天是:2025年01月04日(星期六)
2021年01月04日 | STM32F103的时钟配置源码学习记录
2021-01-04 来源:eefocus
本文记录下看完正点原子战舰版的时钟配置视频后的理解,仅用作备忘。
时钟的配置源码在文件system_stm32f10x.c中。程序先通过判断使用的f10芯片的种类,选择你要的系统时钟频率SYSCLK。我用的芯片系统频率最高为72Mhz,芯片容量为大容量型,所以预编译后选择的是SYSCLK_FREQ_72MHz 72000000。

下面这段代码在时钟配置中没什么用,只是在以后的程序中可以通过SystemCoreClock来读出系统时钟的频率。

下面代码通过宏定义来选择配置系统时钟的函数,上边函数定义了SYSCLK_FREQ_72MHz,所以程序执行void SetSysClockTo72(void)。跳转到这个函数

下面这段函数不重要,直接跳过

这三行代码首先是讲AHB总线时钟等于系统时钟,再将APB2上时钟等于HCLK的一分频,APB1时钟等于HCLK的二分频。结果即为HCLK=72MHz,PCLK2=72MHz,PCLK1=36MHz.。刚好为各自总线上允许的最高频率。

再看下图,跳过它上面的代码。else下的代码是通过配置寄存器设置锁相环,从锁相环出来的频率为9倍的频外部高速时钟。

最后使能锁相环PLL,等PLL准备好后,将PLL作为系统时钟的来源。

看懂时钟配置源代码,首先要弄懂时钟系统框图,两个时钟图差不多,但标注有点区别





史海拾趣
|
**** 如果你在EVC中用过浏览网页的控件的话请进来帮帮我?(很简单的,得到答案后立即赠分) **** 我在EVC下用到了浏览网页的控件 HWND m_hCtlHtml = ::CreateWindow(TEXT(\"DISPLAYCLASS\"), NULL, WS_VISIBLE, 0, 0, 100, 100, m_hWnd, NULL, g_hInst, NULL); 网页已经可以打开了,但是我现在想实现的功能是,不通过拖动滚动条, 而 ...… 查看全部问答> |
|
我总感觉它有内存泄漏,然后过不了多久,资源就耗尽了……有时编辑器还出现文字丢失,开始是注释全没了,然后是其它文字也没了,再滚动几下,可能就死掉了,我晕……难道是我的系统有问题………………… 查看全部问答> |
|
此帖内容为2年前所发,二姨打扫卫生时把旧货全扔了,我跑到千里之外把它捡回来了。ST7的C编译器主要是COSMIC 和HIWARE(现在叫METROWERKS)。这两种C编译器的早期免费版本功能太弱(1~2k的程序量),基本没甚么实用价值。 COSMIC最 ...… 查看全部问答> |
|
STM32用SWD调试时要烧写FLASH是不是一定要接RESET? 一直在核心板上玩 103ZE 都是些小程序 都是在RAM中调试的 而且只接三根线GND SWDIO SWCLK (VCC 直接接JLINK内部的) 很爽利 不过今天要试IIS 要放一个大的数据进去 于是要烧到FLASH中去 发现很快进度条走完 & ...… 查看全部问答> |
|
#include \"msp430x14x.h\" void main (void){ WDTCTL = WDTPW + WDTHOLD; //unsigned char i; /*------选择系统主时钟为8MHz-------*/ /*BCSCTL1 &= ~XT2OFF; &nb ...… 查看全部问答> |
|
直线位移传感器是通过电位器元件将机械位移转换成与之成线性或任意函数关系的电阻或电压输出的装置。普通直线电位器和圆形电位器都可以分别用作直线位移和角位移传感器。但是,为实现测量位移目的而设计的电位器,就一定要要求在位移变化和电 ...… 查看全部问答> |




