STM32片上外设时钟使能 失能和复位的区别

发布者:GoldenSerenity最新更新时间:2023-07-26 来源: elecfans关键字:STM32  片上外设  时钟使能  复位 手机看文章 扫描二维码
随时随地手机看文章

今天分享的关于时钟知识,可能很多人没有在意过。这也是之前有朋友问过的问题,这里就简单给大家普及一下吧。


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  片上外设  时钟使能  复位 引用地址:STM32片上外设时钟使能 失能和复位的区别

上一篇:基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法
下一篇:STM32Cube HAL库中断处理机制 以及回调函数实现原理

推荐阅读最新更新时间:2024-11-04 05:04

stm32 adc dma多通道采样 数据错位 的解决方法
解决方法:不要采用连续转换模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 需要时才实施转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); 转换后取消转换 ADC_SoftwareStartConvCmd(ADC1, DISABLE); 经过测试能够解决stm32 adc dma多通道采样 数据错位
[单片机]
STM32系列单片机命名规则
示例: STM32 F 100 C 6 T 6 B XXX 1 2 3 4 5 6 7 8 9 从上面的料号可以看出以下信息: ST品牌ARM Cortex-Mx系列内核32位超值型MCU,LQFP -48封装 闪存容量32KB 温度范围-40℃-85℃; 1.产品系列: STM32代表ST品牌Cortex-Mx系列内核(ARM)的32位MCU; 2.产品类型: F:通用快闪(Flash Memory); L:低电压(1.65~3.6V);F类型中F0xx和 F1xx系列为2.0~3.6V; F2xx和F4xx系列为1.8~3.6V;W:无线系统芯片,开发版. 3.产品子系列
[单片机]
<font color='red'>STM32</font>系列单片机命名规则
STM32学习第一周之 循环显示RGBLED的七种颜色
连接 RGB LED模块,使得该模块能够依次显示 7 种颜色的光,并且可以循环显示。 注意:添加一个 RGBLED.c 和 RGBLED.h 文件 RGBLED.h 文件里面,对 RGBLED 使用的引脚和端口进行宏定义 RGBLED.c 文件里面,设计一个 RGBLED_Init 函数,一个 RGBLED_Display(颜色值) 函数 RGBLED.h #ifndef __RGBLED_H #define __RGBLED_H #include sys.h #define R PEout(7) #define G PEout(8) #define B PEout(9) #define RED 1 #de
[单片机]
stm32 霍尔传感器接口
13.3.18 与霍尔传感器的接口 使用高级控制定时器(TIM1或TIM8)产生PWM信号驱动马达时,可以用另一个通用TIMx(TIM2、TIM3、TIM4或TIM5)定时器作为 接口定时器 来连接霍尔传感器,见图93,3个定时器输入脚(CC1、CC2、CC3)通过一个异或门连接到TI1输入通道(通过设置TIMx_CR2寄存器中的TI1S位来选择), 接口定时器 捕获这个信号。 从模式控制器被配置于复位模式,从输入是TI1F_ED。每当3个输入之一变化时,计数器从新从0开始计数。这样产生一个由霍尔输入端的任何变化而触发的时间基准。 接口定时器 上的捕获/比较通道1配置为捕获模式,捕获信号为TRC(见图76)。捕获值反映了两个输入变
[单片机]
<font color='red'>stm32</font> 霍尔传感器接口
stm32的内存分布
一、MDK下的概念 1)Code:代码段,存放程序的代码部分。 2)RO-data:只读数据段,存放定义的常量。 3)RW-data:读写数据段,存放初始化为非0值的全局变量和静态变量。 4)ZI-data:零数据段,存放未初始化及初始化为0的全局变量和静态变量。 所以在stm32中:flash的容量是前三项相加(RW-data的初始值也要存在flash里),RAM的容量是后两项相加等。 static变量(函数内静态局部变量和函数外静态全局变量)初始化的、未初始化的分别在RW-data、ZI-data; 全局变量初始化的、未初始化的分别在RW-data、ZI-data; 局部变量(函数内)在栈段,动态分配的空间在堆中,
[单片机]
<font color='red'>stm32</font>的内存分布
STM32每次下载后正常运行,但是断电或复位后程序运行就无法正常运行的解决办法
STM32每次下载程序后能正常运行,但是断电或复位后程序运行就无法正常运行,大概解决办法如下 1、查看boot0和boot1是否都正常接地 2、查询其他外设是否卡死在其中一个里面了, 我遇到的问题是有一个模块有电源控制部分,因为接的电容容量比较大,充电的时间比较长,所以需要进行延时,等待充电完成,才能对模块进行一些列的操作
[单片机]
STM32 usb_init.c和usb_int.c文件分析
usb_init.c这个文件是主要是初始化。函数很简单: /******************************************************************************* * Function Name : USB_Init * Description : USB系统初始化 * Input : None. * Output : None. * Return : None. *******************************************************************************/ void USB_In
[单片机]
基于STM32的植物浇水系统开发
1.总体功能实现 本文设计的一款基于STM32的植物浇水系统,主要由STM32单片机、土壤湿度传感器、温湿度传感器、Wi-Fi模块、水泵系统、继电器以及OLED液晶显示屏等构成,实现手动或自动浇水和远程监控。当土壤湿度传感器检测到土壤中的湿度较低时,自动启动浇水系统浇水,直到土壤湿度达标。同时,用户可以通过手机App实时查看土壤湿度数据与空气温湿度数据、设置浇水模式等。该系统硬件电路成本低,运行稳定,实现了智能浇水。 机智云物联网平台 在技术高速发展的今天,物联网系统开发模式已经发生了大幅度的转变。在传统物联网系统开发模式中,需要搭建一台高性能服务器,在服务器上搭建物联网后台,把相关项目以及数据部署在服务器上,通过服务器向用
[单片机]
基于<font color='red'>STM32</font>的植物浇水系统开发
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved