拿到DX32板后,我依照学习8位单片机的经验,准备先把STM32的相关寄存器配置搞清楚 下。可是当我打开STM32的DS后,才发现它的寄存器比8位机不知多了多少倍,估计有几十 上百个吧。。。这得记得猴年马月啊?幸好,ST公司每款MCU都有相对应的库函数。嗯,对 于我这种还没入门的人来说,有库函数那简直就是鸟枪换大炮啊。。当然是在不求甚解的情况 下。。。呵呵。 ----------------------------------------------------------------------------------------------------------------------------------- 以下为本人参考STM32官方库(3.0版)及DATASHEET的理解,如有错误,还请不吝指点,谢谢! ----------------------------------------------------------------------------------------------------------------------------------- STM32的系统时钟来源可分为三个:HSI(高速内部时钟)、HSE(高速外部时钟)、PLL (经PLL倍频后的时钟信号)。 在设置系统时钟时,要先重置下RCC->CR 及 RCC->CFGR 寄存器,具体可参照STM32 的官方库,里面每个步骤都有详细说明的。下面大概地说一下关于系统时钟选择的设置: 1)以HSI作为系统时钟来源: RCC->CFGR [1:0] SW=00 ----------------------------------------------------------------------------------------------------------------------------------- 2))以HSE作为系统时钟来源: RCC->CFGR [1:0] SW=01 ----------------------------------------------------------------------------------------------------------------------------------- 3)以PLL作为系统时钟来源: (分三种时钟信号输入) A、以HSI 2分频作为PLL时钟输入: RCC->CFGR [1:0] SW=10 RCC->CFGR [16] PLLSRC=0 ----------------------------------------------------------------------------------------------------------------------------------- B、以HSE 全速作为PLL时钟输入: RCC->CFGR [1:0] SW=10 RCC->CFGR [16] PLLSRC=1 RCC->CFGR [17] PLLXTPRE=0 ----------------------------------------------------------------------------------------------------------------------------------- C、以HSE 全速作为PLL时钟输入: RCC->CFGR [1:0] SW=10 RCC->CFGR [16] PLLSRC=1 RCC->CFGR [17] PLLXTPRE=1 经过以上设置,基本上是设置完了系统时钟的来源,如果设置了是以PLL为系统时钟来 源,则要再通过 RCC->CFGR[21:18] PLLMUL 来选择PLL的倍频系数。设置好之后,就是 ENABLE PLL了:RCC->CR[24] PLLON,至此,系统时钟来源就设置并启动好了,通过读取 RCC->CFGR[3:2]来确认时钟来源是否已生效。(这一步最好在程序中要加上,以免出现系统 时钟未生效而不能正常启动的问题) 系统时钟启动完后,就可以来设置STM32内设(比如:APB1/APB2/ADC/TIM1……) RCC->CFGR的总线频率了。 |