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

发布者:Meshulun最新更新时间:2024-08-01 来源: elecfans关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

在STM32参考手册中,都有Reset and Clock Control(RCC)复位和时钟控制的章节。

在这一章节就可以看到有两类寄存器

peripheral reset register(RSTR)外设复位寄存器。

peripheral clock enable register(ENR)外设时钟使能寄存器。

我们拿STM32F1参考手册为例,可以看到如下图寄存器:

wKgaomUD8YCAXiLmAASaLTuRZnU158.png

一种是控制外设时钟的寄存器,一种是复位外设的寄存器。

外设时钟使能和失能

我们都知道,配置STM32外设,会先开启对应的时钟(也就是使能外设时钟)。

比如使能USART1时钟:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);


失能USART1时钟:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);


前面分享过一篇文章《STM32为什么要先开启外设时钟?》,里面有说:为什么我们要先开启STM32外设时钟。

从时钟使能和失能来说,这里再简单总结一下:使能外设时钟,我们就可以操作(读写)对应的外设;失能外设时钟,则我们无法操作对应的外设。

所以说,我们要操作外设,就必须要先开启(使能)其外设时钟。

复位外设

复位外设相信大部分朋友都能理解,如果使用寄存器开发过的朋友,更应该明白。

简单来说,复位外设就是恢复外设所有寄存器为上电默认值,也可以说复位了我们的配置。

可能有些地方你会也会发现xx外设配置之前有“重新初始化”外设的操作,如:


USART_DeInit(USART1);DMA_DeInit(DMA1_Channel1);


这重新初始化代码里面,其实就是调用了复位外设代码。

失能外设时钟和复位外设区别

上面说了失能外设时钟,我们就不能操作外设了。那么复位外设,我们还能操作外设吗?外设的时钟也会被复位吗?

可能许多人没有深入分析过,我这里简单总结一下:

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失能时钟和复位外设的区别

上一篇:巧用 STM32CubeIDE 之编译警告
下一篇:STM32Cube到底包含哪些工具 ?

推荐阅读最新更新时间:2024-11-12 11:21

STM32 HAL库与标准库的区别
前言   相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好、黑猫也好,抓到耗子就是好猫。 STM32三种开发方式   通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发。   网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发方式彼此之间的区别,所以笔者想以一种非常直白的方式,用自己的理解去将这些东西表述出来,如果有描
[单片机]
<font color='red'>STM32</font> HAL库与标准库的区别
解决STM32 不能读RAM 下载的问题
制作了两个ARM-OB下载器,原以为会很快搞定,谁知道,在最后一步出现了如下的问题: ERROR: RAM check failed @ address 0x20000000. - ERROR: Write: 0xE7FEBE00 E07CE062 - ERROR: Read: 0x0000000 000000000 - ERROR: (0 bytes of RAM have been checked successfully) - ERROR: Failed to read back target memory 我感觉好奇怪啊,三个月前我制作ARM-OB下载器的时候还没有这个问题出现,为什么呢? 百度该问
[单片机]
stm32 ADXL345传感器
加速度灵敏度轴 沿敏感轴加速时相应输出电压增加 寄存器映射 寄存器定义 0x31—DATA_FORMAT SELF_TEST位:设置为1,自测力应用至传感器,造成输出数据转换。值为0时,禁用自测力 SPI位:值为1,设置器件为3线式SPI模式,值为0,则设置为4线式SPI模式 INT_INVERT位:值为0,设置中断至高电平有效,值为1,则设置至低电平有效 FULL_RES位:设置为1,该器件为全分辨率模式,输出分辨率随着范围位设置的g范围,以4 mg/LSB的比例因子而增加。 FULL_RES位设置为0时,该器件为10位模式,范围位决定最大g范围和比例因子 对齐位:设置为1,选择左对齐(MS
[单片机]
<font color='red'>stm32</font> ADXL345传感器
STM32_内存管理
1:内存管理简介 内存管理,是指软件运行时动态的对MCU内存资源的分配和使用的技术。最主要的目的是:如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种。 2:分块式内存管理 分块式内存管理由内存池和内存管理表两部分组成 ,内存池被等分为n块,对应的内存管理表,大小也为n,内存管理表的每一个项对应内存池的一块内存。 当该项值为0的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为10,那么说明包括本项对应的内存块在内,总共分配了10个内存块给外部的某个指针。 内存分配方向:是从顶-》底的分配方向。即首先从最末
[单片机]
STM32_内存管理
STM32 用ST-Link V2下载程序、仿真
1.Option Debug 选择ST-Link Debugger 2.点Setting 选SW模式 3.Flash Download选项页选Erase Full Chip模式,把Reset and Run勾上 这样下载直接运行程序就OK。 遇到的问题: no st-link detected: 到Keil MDK 安装目录下的运行ARM/STLink 下的ST-LinkUpgrade.exe升级你的ST-LInk V2固件解决问题。
[单片机]
<font color='red'>STM32</font> 用ST-Link V2下载程序、仿真
ST公布STM32物联网设计竞赛多个赛区的获奖名单
中国,2014年12月16日 —— 意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)公布了STM32物联网设计竞赛 (STM32 Internet-of-Things Design Challenge) 欧洲、中东及非洲 (EMEA) 赛区的获奖名单。本次竞赛旨在鼓励物联网相关的发明创造,由意法半导体及其合作伙伴ARM,Farnell Element14,Würth Elektronik 和 Rubik’s Futuro Cube 公司等主办。 基于STM32系列微控制器的能效、性能、庞大的开发生态系统和产品价值,大约100名参赛者提交了物联网相关的应用设计。此次设计竞赛激发
[物联网]
ST公布<font color='red'>STM32</font>物联网设计竞赛多个赛区的获奖名单
STM32:定时器中断与优先级
前言 利用HAL库开发实现功能:使用TIM2实现定时,每隔1秒实现双闪功能 一、基础知识 1、常见的定时器资源 1.系统滴答定时器 SysTick 集成在Cortex M3内核的定时器,主要目的是给RTOS提供时钟节拍做时间基准。比如HAL库函数中的HAL_Delay()就是基于这个定时器开发的。如果要做嵌入式Linux的相关项目,要和上位机进行通讯的话,这个函数就不能用了。 2.看门狗定时器 WatchDog 3.实时时钟 RTC 4.基本定时器 TIM6、TIM7 5.通用定时器 TIM2、TIM3、TIM4、TIM5 在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时
[单片机]
<font color='red'>STM32</font>:定时器中断与优先级
玩转STM32CubeMX | STM32内部FLASH
1.内部FLASH简介 之前的文章中介绍过STM32F1利用SPI与外部FLASH(W25QXX芯片)通讯的例程,本例程将介绍STM32F1的内部FLASH,通过内部FLASH实现数据读写操作。 不同型号的STM32,其FLASH容量也有所不同,最小的只有16K字节,最大的则达到了1024K字节。此处我们使用的是STM32F103ZET6,其FLASH容量为512K字节,属于大容量产品,大容量产品的闪存模块组织图如下图示 STM32F1的闪存模块由:主存储器、信息块和闪存存储器接口寄存器3部分组成 *主存储器:用来存放代码和数据常量,起始地址是0x08000000,BOOT0和BOOT1都接GND时,就是从该起始地址运行
[单片机]
玩转STM32CubeMX | <font color='red'>STM32</font>内部FLASH
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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