你说的是3.0以上的固件库吗?
SystemInit()函数在主程序中被RCC_Configuration()函数调用,完成系统时钟的配置功能。我看过这个函数的具体内容,是直接操作寄存器来完成配置。如果使用stm32f10x_rcc.c文件中的函数来完成时钟配置,和SystemInit()的顺序和效果一样。
当然,为了保证兼容性,使低版本固件库写的程序运行,就还有stm32f10x_rcc.c存在,像早期版本的RCC_Configuration()函数就是使用这个文件中提供的函数来完成时钟配置的。
补充:是的,Systeminit()函数完成了时钟初始化的功能。另外systick的使用也变简单了,以前要几个函数完成初始化,现在只要一个就行。
你看看3.0版本固件system_stm32f10x.c中的代码是怎样的吧。其中是对RCC寄存器直接赋值操作,和stm32f10x_rcc.c中相关的函数作用一样。
如果在程序中要使用端口、外设等,由于这些东西需要时钟才能工作,所以还是需要stm32f10x_rcc.c中的函数来完成时钟的控制。
先定义你所用的芯片类型,然后主程序调用SystemInit();初始化系统时钟为72M,然后用RCC库函数配置外设时钟。
temp=RCC-CFGR2;
这个的意思是读取RCC-CFGR寄存器的值,然后将其右移2位后再保存在temp变量中。
temp=0x03;
这个的意思是除了最低两位保留之外,其他位清除。
这两个位(实际就是是RCC-CFGR寄存器的3:2位),名字是SWS[1:0],在参考手册上的解释是:
SWS[1:0]:系统时钟切换状态 (System clock switch status) 由硬件置’1’ 或清’0’ 来指示哪一个时钟源被作为系统时钟。
00:HSI作为系统时钟;
01:HSE作为系统时钟;
10:PLL 输出作为系统时钟;
11:不可用。
就是说当判断结果为2时,表示PLL输出已经稳定。
本文标签:stm32时钟初始化库函数