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标准外设库。
推荐阅读:
1.关于STM32时钟配置的那些坑
2.STM32标准外设库SPL转换成Cube LL
5最后
若觉得文章对你有帮助,随手点赞、分享,也是对我莫大的支持和鼓励。
扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!
长按识别图中二维码关注
赞赏是对作者的认可与支持!
STM32片上外设时钟使能、失能和复位的区别相关推荐
- STM32填坑:时钟使能必须在外设初始化之前
最近在STM32上写了一份串口通信的程序,但下载复位后串口却不能工作,初始化的代码如下: //发送/接收的GPIO.串口和中断的初始化结构体 GPIO_InitTypeDef GPIO_InitStr ...
- 初涉STM32之浅谈时钟使能问题
作为一个STM32的菜鸟级人物,我刚开始接触STM32时,其实和当年开始学习51单片机的心理是一样的.茫然,谁说不是呢?但是,正常的学习途径无非就是看书,然后敲代码,最后烧程序,有问题就check,然 ...
- stm32外设的使能,失能,复位的区别
首先明确的是,在STM32中所有外设正常工作的前提是使能了相应的外设,有的可能只用使能一个(如GPIO),有的使能两个(如GPIO和USART),有的可能需要使能三个(如GPIO,AFIO,TIM). ...
- STM32 UART/USART初始化时钟使能
在学习STM32的过程中,我们通常会遇到使能时钟.例如在uart_init()的函数中,我们要使能串口: RCC->APB2ENR|=1<<4;//使能串口1的时钟 RCC-> ...
- 关于STM32的SPI外设时钟分频对应的SCK速率
以STM32F103为例, 经过system_stm32f10x.c文件中的SystemInit()函数之后,这里是指的默认时钟配置如下图所示: STM32F103的系统框架图如下所示: 可见:SPI ...
- STM32理论 —— 定时器、时钟
文章目录 1. 定时器 1.1 分类与简介 1.1.1 分类与主要功能特点 1.1.2 三种常用的定时器简介 1.1.3 三种计数模式 1.1.4 定时器计数原理 1.1.5 如何快速定位定时器对应I ...
- STM32F4 HAL库开发 --时钟使能和配置
在STM32F4的HAL库中,外设时钟使能操作都是在RCC相关固件库文件头文件stm32f4xx_hal_rcc.h 定义的.外设时钟使能在HAL库中都是通过宏定义标识符来实现.首先,我们来看看GPI ...
- 《二》STM32时钟使能及应用总结
综述 STM32的新手,一般都会对一个问题很纠结.我也是,就是所谓的"时钟问题".我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟 ...
- 51与STM32单片机架构(内核和片上外设)的区别汇总+拓展
** 单片机简介** 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存).ROM(程序存储).输入输出设备(串口.并口等)和中断系统处于同一芯片的器件,在我们自己的 ...
最新文章
- 2021年大数据Spark(二十六):SparkSQL数据处理分析
- WinCE6.0 修改开机Logo方法集锦(二)
- 最新dnsmasq安装部署详解(centos6)
- linux终端出现bash: setup.bash: No such file or directory,和.bashrc文件的问题
- springmvc二十八:springmvc使用common-fileUpload实现文件上传
- 网络实用技术基础模拟测试2_网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(五)...
- linux开启多少到多少端口命令,Linux端口命令
- 为什么莫名其妙的就被调用了
- CSS外链怎么写,css外链式基本写法是什么
- [原创]:善用佳软(二)
- RINEX 3.04
- oracle select from dual,代码中误用select xxx from dual案例一则
- 量子算法入门资料个人小结
- 如何在区块链底层平台和应用场景中搭一个“桥梁”,他们推出了“中间件”
- Grep命令常见用法
- 你想了解ADSS和OPGW光缆之间的区别吗?
- STM32单片机蓝牙APP智能急救手表跌倒报警心率报警MAX30102
- C和指针 第5章 操作符和表达式 5.1 操作符
- 【DS with Python】 re模块与正则表达式
- ttest函数使用方法_用MATLAB做T检验(ttest)
热门文章
- 零基础ESP8266学习篇-认识esp8266
- CorelDRAW图片导出变色,如何解决?
- 【AI_数学知识】概率论
- 广州的11个辖区_广州市下辖11个区,其中GDP总值超过3000亿元的分别有哪些?
- 关于kindle使用的文章
- Kaldi 入门使用教程
- pythonmath库round计算_Python tensorflow.math.round()用法及代码示例
- java石头剪刀布界面_利用Java模拟石头剪刀布游戏
- [转]程序员收集整理的PHP资源大全,包含各种类库及框架等
- ios应用内下载并安装另一个应用