1
RCC时钟说明在STM32参考手册中,都有Reset and Clock Control(RCC)复位和时钟控制的章节。
在这一章节就可以看到有两类寄存器:peripheral reset register(RSTR)外设复位寄存器和peripheral clock enable register(ENR)外设时钟使能寄存器。
我们拿STM32F1参考手册为例,可以看到如下图寄存器:
一种是控制外设时钟的寄存器,一种是复位外设的寄存器。
2外设时钟使能和失能
我们都知道,配置STM32外设,会先开启对应的时钟(也就是使能外设时钟)。
比如使能USART1时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
失能USART1时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);
我之前分享过一篇文章《关于STM32时钟配置的那些坑》,里面有说:为什么我们要先开启STM32外设时钟。
从时钟使能和失能来说,这里再简单总结一下:使能外设时钟,我们就可以操作(读写)对应的外设;失能外设时钟,则我们无法操作对应的外设。
所以说,我们要操作外设,就必须要先开启(使能)其外设时钟。
3复位外设
复位外设相信大部分朋友都能理解,如果使用寄存器开发过的朋友,更应该明白。
简单来说,复位外设就是恢复外设所有寄存器为上电默认值,也可以说复位了我们的配置。
可能有些地方你会也会发现xx外设配置之前有“重新初始化”外设的操作,如:
USART_DeInit(USART1);
DMA_DeInit(DMA1_Channel1);
这重新初始化代码里面,其实就是调用了复位外设代码。
4失能外设时钟和复位外设会对外设有何影响
上面说了失能外设时钟,我们就不能操作外设了。那么复位外设,我们还能操作外设吗?外设的时钟也会被复位吗?
可能许多人没有深入分析过,我这里简单总结一下:
1.外设时钟未使能(失能状态),不能配置(读写)外设;
2.复位外设,会复位外设的所有寄存器,但外设时钟不会被复位;
3.外设时钟使能,复位外设,再清除复位外设,可以继续配置(读写)外设。如USART1重新初始化:
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
USART_Init(USART1, &USART_InitStructure);
4.复位外设,但不清除复位外设,则不能继续配置(读写)外设。
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
USART_Init(USART1, &USART_InitStructure);
在STM32的库函数中,外设复位和清除都是成对的,所以,我们用库开发的好处,就是相对不容易犯一些错误。
因为很多朋友使用寄存器开发,有很多细节问题没有深入研究过,就不知道问题到底处在哪里。
所以,建议用寄存器开发的朋友转向使用(SPL、HAL或CLL)库开发。如果你非要一步一步理解底层,建议使用SPL标准外设库。
上一篇:谈谈STM32(CM3)的Faults异常
下一篇:说说STM32调试DEBUG相关知识
推荐阅读最新更新时间:2024-11-17 03:15
设计资源 培训 开发板 精华推荐
- LT1800 的典型应用 - 80MHz、25V/us 低功率轨至轨输入和输出精密运算放大器
- OP184FSZ 具有限流功能的低压差稳压器的典型应用
- L78L15AB可调输出稳压器的典型应用
- SlimeVR Compact
- 具有 PWM 调光功能的 NSV45015WT1G LED 灯串的典型应用
- 采用 AES 参考设计的 SD/MMC 卡上的 USB 高速设备大容量存储
- 使用 Infineon Technologies AG 的 IRU1117-25 的参考设计
- DC751A-D,使用 LTC2233IUK 10 位、80Msps 高速 ADC 的演示板,VDD = +3.3V,1MHz
- LTC3544B 的典型应用 - 四路同步降压稳压器:2.25MHz、300mA、200mA、200mA、100mA
- EVAL-CN0385-FMCZ,基于 AD4003 18 位、2 MSPS、PulSAR ADC 的评估套件