本帖最后由 yuchengze 于 2016-12-27 11:17 编辑
不论STM8还是STM32系列的MCU,芯片复位后默认时钟源都是内部HSI,要使用外部时钟源HSE的话,得通过软件对相关控制寄存器进行使能配置才行。
如果使用外部HSE的话,一般有两种模式:
1、外部晶体/陶瓷谐振器(HSE晶体)模式
这种模式用得比较常见,HSE晶体可以为系统提供较为精确的时钟源。在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置’1’,时钟才被释放出来。HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。
该时钟源是由外部无源晶体与MCU内部时钟驱动电路共同配合形成,有一定的启动时间,精度较高。为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容必须尽可能地靠近振荡器引脚。负载电容值必须根据所选择的晶体来具体调整。手册里明确地写明了这句,很多时候似乎被无视了。关于这点,ST官方有专门出了个应用笔记,编号为AN2867。可以去www.stmcu.com.cn 或者www.st.com 搜索下载。
整体上讲,陶瓷晶体和石英晶体的主要区别就在于精度和温度稳定性上。石英晶体比陶瓷晶体精度要高,温度稳定性要好。
2、外部时钟源(HSE旁路)模式
该模式下必须提供外部时钟。用户通过设置时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN引脚,此时OSC_OUT引脚对外呈高阻态。
所谓HSE旁路模式,是指无需上面提到的使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。
不过,在使用该模式时,经常有人出现配置错误,即使用跟HSE晶体模式一样的配置。这点在STM8/STM32应用中都有人发生。 所幸的是使用这个旁路模式的情形不像使用外部晶体模式那么多,不然可能更多人在这里遇到麻烦。
我们不妨以STM3F4系列芯片为例。
关于寄存器位上面已经提到了,旁路模式除了配置HSEON还得配置HSEBYP位。
对于标准库函数voidRCC_HSEConfig(uint32_t RCC_HSE)
或CUBE库函数__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState)里的相关参数可能是:RCC_HSE_ON、 RCC_HSE_Bypass或RCC_HSE_OFF的其中之一。 |