【入门总结2】STM32入门之RCC与复位

【入门总结2】STM32入门之RCC与复位

本内容来自STM32F10X参考手册2008年12月第7版摘要,以及MDK5库函数总结。
RCC(reset and clock control),复位与时钟不可分割,从另一个角度理解,大多数复位条件需要系统时钟参与。

1、复位

系统复位

1.NRST管脚上的低电平(外部复位),外部硬件复位,常接复位按键使用
2.窗口看门狗计数终止(WWDG复位),窗口看门狗喂狗时间不正确时产生的复位。
3.独立看门狗计数终止(IWDG复位),看门狗定时喂狗超时产生的的复位。
4.软件复位(SW复位),对寄存器置位进入复位。
5.低功耗管理复位,系统进入低功耗模式时进行复位,与待机模式、停止模式有关。

电源复位

1.上电/掉电复位(POR/PDR复位)
2.从待机模式中返回
复位过程中reset引脚保持低电平,此现象可用来测试系统是否进入电源复位。

备份域复位

目前感觉没啥用,也不是很理解,不描述。

2、时钟

HSI

内部8MHz的RC振荡器产生,精度较差(也就是说不需要特别准的时钟的情况下可以用),启动比HSE短(需要特别快启动的情况下能用)快多少待测试,可通过寄存器调整。在HSE失败情况下,作为备用时钟源。

HSE

●HSE外部晶体/陶瓷谐振器(4-16MHz)
●HSE用户外部时钟(最大25MHz),又称旁路,就是外接时钟信号进去,可能有些场景多个系统需要时钟同步。

LES

32.768kHz的低速外部晶体或陶瓷谐振器,可用来产生RTC时钟。
可接32.768kHz的外部时钟源。

LSI

40kHz左右,低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。大容量产品可以进行LSI校准,通过TIM5实现。

PLL

倍频器,时钟来源是HSI或者HSE,可以将两者时钟倍频输出,输出后的时钟给系统和各种外设使用。

SYSCLK

系统时钟,只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。读寄存器判断时钟是否准备好。

CSS

时钟安全系统,不知道啥用,暂时不研究

RTC时钟

RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。

看门狗时钟

LSI振荡器稳定后,时钟供应给IWDG。

3、配置

大部分配置方式在RCC寄存器描述中已经说明的非常详细,针对MDK5库函数版本,至今没找到好看懂的说明文档,大部分函数可以在“stm32f10x_rcc.c”中查看。
整体配置流程如下:


RCC_DeInit();//1、时钟复位
RCC_HSEConfig(RCC_HSE_ON);//配置外部HSE开启
while( RCC_WaitForHSEStartUp()!=SUCCESS);
//判断HSE开启是否成功
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
 /*
 开启PLL倍频根据函数描述: 
RCC_PLLSource_HSE_Div1: HSE oscillator clock 
selected as PLL clock entry
RCC_PLLMul: specifies the PLL multiplication factor.
other_STM32_devices, this parameter can be 
RCC_PLLMul_x where x:[2,16]
*/
RCC_PLLCmd(ENABLE);// Enable PLL 
/*
ENABLE来自头文件定义
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
*/
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)  ;
/*
 Wait till PLL is ready 
RCC_FLAG_PLLRDY定义来自函数描述:
     @arg RCC_FLAG_HSERDY: HSE oscillator clock ready
*/
 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);         
 /* 
 RCC_SYSCLKSource_PLLCLK定义来自函数描述:
   *     @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock
   */
 while(RCC_GetSYSCLKSource() != 0x08);
 /*0x08定义来自函数描述:
   *     - 0x08: PLL used as system clock
 */

4、总结

至此基础时钟定义结束,在MDK5的库函数内大部分参数的定义可以通过函数描述找到,只要熟悉时钟设置流程就能把相应的时钟使能,大部分流程在官方数据手册中都有描述。
如果出现其他问题,可以在官方参考手册中查找寄存器的基本用法,对照库函数内容以作参考,真的找不到就直接用寄存器写也是可行的。
时钟配置流程总结:
1、时钟复位(初次)
2、时钟设置
3、判断设置是否成功

注:所有外设第一次使用前都需要打开时钟,属于那个时钟可以在在库函数中找到,也可以查看数据手册寄存器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值