一、复位
STM32F支持三种复位形式,分别为系统复位、上电复位和备份区域复位。
1、系统复位
系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器。
当以下事件中的一件发生时,产生一个系统复位:
- NRST管脚上的低电平(外部复位)。
- 窗口看门狗计数终止( WWDG复位)。
- 独立看门狗计数终止( IWDG复位)。
- 软件复位( SW复位)。
- 低功耗管理复位。
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位来确认复位事件来源。复位后CPU都会被强制到复位向量中去执行程序。
2、电源复位
当以下事件中之一发生时,产生电源复位:
- 上电/掉电复位( POR/PDR复位)。
- 从待机模式中返回(因为待机模式会断掉电源)。
3、备份域复位
当以下事件中之一发生时,产生备份区域复位:
- 软件复位,备份区域复位可由设置备份区域控制寄存器RCC_BDCR中的BDRST位产生。
- 在VDD和VBAT两者掉电的前提下, VDD或VBAT上电将引发备份区域复位。
复位电路图:
二、时钟
1、STM32的时钟总体设计
- 时钟源:纯内部、内外部、纯外部 。
- 纯内部:CPU内部集成,使用方便,但是精度不高。
- 内外部:就是晶振加CPU内部震荡电路的组合。
- 纯外部:外部直接产生一个时钟,通过一个引脚直接传给CPU。
- PLL(锁相环电路),功能就是倍频 。
- 时钟通道与流向、分频 。
- 完全独立的多个时钟。
2、时钟树
STM32的时钟树图如下:
1)、总体配置
- 两套独立时钟:HSx和LSx;
- 纯内部:HSI(8MHz)、LSI(40KHz)->内部时钟是通过RC振荡电路产生;
- 内外部:HSE(4-16MHz)、LSE(32.768KHz)->需要接外部晶振;
- 纯外部:OSC_IN、OSC32_IN->外部时钟。
2)、PLL
- 两个可选PLL源-> HSI 和HSE->由PLLSRC控制选择哪个;
- 倍频可设置->由PLLMUL控制。
3)、分频
时钟节点名称:HSI、HSE、LSI、LSE、PLLCLK、SYSCLK、USBCLK、HCLK、FCLK、PCLK1、PCLK2、ADCCLK、RTCCLK、IWDGCLK。
4)、systick和MCO
- systick:系统滴答时钟,是操作系统用来调度任务时用的计时器。RCC通过AHB时钟8分频后供给Cortex系统定时器的外部时钟。 通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex AHB时钟作为SysTick时钟。
- MCO:Main Clock Output,单片机作为一个时钟源,将内部时钟输出到外部。
5)、时钟相关的寄存器
寄存器 | 基地址 | 地址偏移量 |
---|---|---|
RCC_CR | 0x40021000 | 0x00 |
RCC_CFGR | 0x40021000 | 0x04 |
RCC_CIR | 0x40021000 | 0x08 |
RCC_APB2RSTR | 0x40021000 | 0x0C |
RCC_APB1RSTR | 0x40021000 | 0x10 |
RCC_AHBENR | 0x40021000 | 0x14 |
RCC_APB1ENR | 0x40021000 | 0x1C |
RCC_BDCR | 0x40021000 | 0x20 |
RCC_CSR | 0x40021000 | 0x24 |