打印
[STM32F4]

STM32F4深入学习【RCC】

[复制链接]
1366|79
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
o88ne|  楼主 | 2023-8-27 01:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
复位系统复位

系统复位将所有寄存器复位,除了时钟控制寄存器CSR中的复位标志和备份域寄存器

复位条件:

  • 外部复位:NRST引脚电平拉低

  • WWDG复位:窗口看门狗计数结束

  • IWDG复位:独立看门狗计数结束



使用特权

评论回复
沙发
o88ne|  楼主 | 2023-8-27 01:25 | 只看该作者
软件复位(内核软复位):将Cortex-M4内核的应用中断和复位控制寄存器(SCB_AIRCR)中的SYSRESEREQ(sys_reset_eq)位 置1

在以下三种情况下会产生内核复位:

使用特权

评论回复
板凳
o88ne|  楼主 | 2023-8-27 01:25 | 只看该作者
上电复位:MCU通电时内核自动将所有组成部件复位
系统复位:只复位处理器和外设,不会复位内核debug部分(常用来进行debug)
处理器复位:仅复位处理器
上电复位和系统复位持续时间取决于MCU设计,在一些情况下,复位会持续数毫秒来等待晶振时钟稳定。在复位后、处理器运行程序之前,Cortex-M处理器将从内存中读取前两个字,即 位于中断向量表之前的主栈顶指针(MSP Main Stack Pointer)和复位向量初始值,其中复位向量就是复位句柄的起始地址。在这两个字被处理器读取以后,处理器会以这两个值建立主堆栈指针MSP和程序计数器PC

提前建立MSP的原因:上电后可能会出现系统错误以至于处理器调用NMI或硬件错误相关服务函数,就需要栈内存和MSP把一些处理器状态信息压栈来处理系统错误相关的中断

使用特权

评论回复
地板
o88ne|  楼主 | 2023-8-27 01:25 | 只看该作者
注意:Cortex-M4的SP初始化和传统ARM核的初始化不相同,它必须被在软件中初始化,而中断向量表存储的是中断向量的地址,因为M4的栈是自顶向下生长的,初始化的SP值应该被设置到栈顶以下的第一个内存,如下图所示:中断向量表之前的SP初始值是一个指向栈顶的指针

使用特权

评论回复
5
o88ne|  楼主 | 2023-8-27 01:25 | 只看该作者

使用特权

评论回复
6
o88ne|  楼主 | 2023-8-27 01:25 | 只看该作者
下面是arm提供的core_cm4.h文件中有关系统复位的程序,以C内嵌汇编代码写成

使用特权

评论回复
7
o88ne|  楼主 | 2023-8-27 01:25 | 只看该作者
__STATIC_INLINE void NVIC_SystemReset(void)
{
  __DSB();/* Ensure all outstanding memory accesses included
                          buffered write are completed before reset */
  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |
                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
                            SCB_AIRCR_SYSRESETREQ_Msk    );/* Keep priority group unchanged */
  __DSB();/* Ensure completion of memory access */

  for(;;)/* wait until reset */
  {
    __NOP();
  }
}

使用特权

评论回复
8
o88ne|  楼主 | 2023-8-27 01:26 | 只看该作者
低功耗管理复位

引发低功耗复位的方式:

进入待机时复位:清零用户选项字节中的nRST_STDBY位。使能后,只要成功执行进入待机模式序列,MCU就不会进入待机,而是进行复位
进入停止模式时产生复位:清零用户选项字节中的nRST_STOP位。使能后,只要成功执行进入停止模式序列,MCU就不会进入停止模式,而是进行复位

使用特权

评论回复
9
o88ne|  楼主 | 2023-8-27 01:26 | 只看该作者
电源复位
将除备份域内的寄存器外,其他所有寄存器复位

MCU内部的复位信号会在NRST引脚上输出,脉冲发生器会确保每个内部复位源的复位脉冲都至少持续20us

使用特权

评论回复
10
o88ne|  楼主 | 2023-8-27 01:26 | 只看该作者
条件:

上电/掉电/欠压复位
退出待机模式复位

使用特权

评论回复
11
o88ne|  楼主 | 2023-8-27 01:26 | 只看该作者
复位电路如下:

使用特权

评论回复
12
o88ne|  楼主 | 2023-8-27 01:27 | 只看该作者
备份域复位
备份域复位会将所有RTC寄存器和RCC_BDCR寄存器复位,但BKPSRAM不受影响

BKPSRAM的唯一复位方式是通过FLASH接口将FLASH保护等级从1切换到0

复位条件:

软件复位:将RCC备份域控制寄存器(RCC_BDCR)中的BDRST位 置1
在V D D V_{DD}V
DD

和V B A T V_{BAT}V
BAT

都掉电后,其中任意一个又再上电
即 备份域靠V B A T V_{BAT}V
BAT

来维持断电情况下的运行,但如果V B A T V_{BAT}V
BAT

掉电则备份域无法保存数据

使用特权

评论回复
13
o88ne|  楼主 | 2023-8-27 01:27 | 只看该作者
时钟控制(RCC)
时钟源
系统时钟由HSI时钟、HSE时钟、主PLL时钟三者之一来驱动

同时,MCU可接入**32kHz低速内部RC(LSI RC)驱动IWDG,也可用于RTC在停机/待机模式下的自动唤醒;还可接入32.768kHz低速外部晶振(LSE晶振)**来驱动RTC时钟

每个时钟源都可以独立打开或关闭,同时开启的时钟源越少,功耗越低

使用特权

评论回复
14
o88ne|  楼主 | 2023-8-27 01:27 | 只看该作者
时钟树
stm32f4的内部时钟相当复杂,呈多输入-多输出的树形结构,可分为以下几个主要组成部分

使用特权

评论回复
15
o88ne|  楼主 | 2023-8-27 01:28 | 只看该作者
总线时钟
所有内部总线都可以通过多个预分频器进行时钟配置

AHB最大频率168MHz

高速APB2最大频率84MHz

低速APB1最大频率42MHz

使用特权

评论回复
16
o88ne|  楼主 | 2023-8-27 01:28 | 只看该作者
特殊外设时钟

使用特权

评论回复
17
o88ne|  楼主 | 2023-8-27 01:28 | 只看该作者
下图为特殊外设时钟树

使用特权

评论回复
18
o88ne|  楼主 | 2023-8-27 01:28 | 只看该作者
系统定时器(SysTick)时钟
使用8分频的AHB时钟(HCLK)或直接使用AHB时钟(HCLK)

可在SysTick控制和状态寄存器中配置

使用特权

评论回复
19
o88ne|  楼主 | 2023-8-27 01:29 | 只看该作者
硬件定时器时钟
stm32f42xxx和43xxx的定时器时钟频率由硬件自动设置

根据RCC_CFGR寄存器中TIIMPRE位的取值分为两种情况

TIMPRE=0

APB预分频器分频系数为1,则设定定时器时钟TIMxCLK=PCLKx;否则,TIMxCLK=2*PCLKx

使用特权

评论回复
20
o88ne|  楼主 | 2023-8-27 01:29 | 只看该作者
TIMPRE=1

APB预分频器分频系数为1、2或4,则设定定时器时钟TIMxCLK=HCLK;否则,TIMxCLK=4*PCLKx

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

418

帖子

3

粉丝