置顶/星标公众,不错过每一条消息!

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

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片上外设时钟使能、失能和复位的区别相关推荐

  1. STM32填坑:时钟使能必须在外设初始化之前

    最近在STM32上写了一份串口通信的程序,但下载复位后串口却不能工作,初始化的代码如下: //发送/接收的GPIO.串口和中断的初始化结构体 GPIO_InitTypeDef GPIO_InitStr ...

  2. 初涉STM32之浅谈时钟使能问题

    作为一个STM32的菜鸟级人物,我刚开始接触STM32时,其实和当年开始学习51单片机的心理是一样的.茫然,谁说不是呢?但是,正常的学习途径无非就是看书,然后敲代码,最后烧程序,有问题就check,然 ...

  3. stm32外设的使能,失能,复位的区别

    首先明确的是,在STM32中所有外设正常工作的前提是使能了相应的外设,有的可能只用使能一个(如GPIO),有的使能两个(如GPIO和USART),有的可能需要使能三个(如GPIO,AFIO,TIM). ...

  4. STM32 UART/USART初始化时钟使能

    在学习STM32的过程中,我们通常会遇到使能时钟.例如在uart_init()的函数中,我们要使能串口: RCC->APB2ENR|=1<<4;//使能串口1的时钟 RCC-> ...

  5. 关于STM32的SPI外设时钟分频对应的SCK速率

    以STM32F103为例, 经过system_stm32f10x.c文件中的SystemInit()函数之后,这里是指的默认时钟配置如下图所示: STM32F103的系统框架图如下所示: 可见:SPI ...

  6. STM32理论 —— 定时器、时钟

    文章目录 1. 定时器 1.1 分类与简介 1.1.1 分类与主要功能特点 1.1.2 三种常用的定时器简介 1.1.3 三种计数模式 1.1.4 定时器计数原理 1.1.5 如何快速定位定时器对应I ...

  7. STM32F4 HAL库开发 --时钟使能和配置

    在STM32F4的HAL库中,外设时钟使能操作都是在RCC相关固件库文件头文件stm32f4xx_hal_rcc.h 定义的.外设时钟使能在HAL库中都是通过宏定义标识符来实现.首先,我们来看看GPI ...

  8. 《二》STM32时钟使能及应用总结

    综述 STM32的新手,一般都会对一个问题很纠结.我也是,就是所谓的"时钟问题".我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟 ...

  9. 51与STM32单片机架构(内核和片上外设)的区别汇总+拓展

    ** 单片机简介** 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存).ROM(程序存储).输入输出设备(串口.并口等)和中断系统处于同一芯片的器件,在我们自己的 ...

最新文章

  1. 2021年大数据Spark(二十六):SparkSQL数据处理分析
  2. WinCE6.0 修改开机Logo方法集锦(二)
  3. 最新dnsmasq安装部署详解(centos6)
  4. linux终端出现bash: setup.bash: No such file or directory,和.bashrc文件的问题
  5. springmvc二十八:springmvc使用common-fileUpload实现文件上传
  6. 网络实用技术基础模拟测试2_网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(五)...
  7. linux开启多少到多少端口命令,Linux端口命令
  8. 为什么莫名其妙的就被调用了
  9. CSS外链怎么写,css外链式基本写法是什么
  10. [原创]:善用佳软(二)
  11. RINEX 3.04
  12. oracle select from dual,代码中误用select xxx from dual案例一则
  13. 量子算法入门资料个人小结
  14. 如何在区块链底层平台和应用场景中搭一个“桥梁”,他们推出了“中间件”
  15. Grep命令常见用法
  16. 你想了解ADSS和OPGW光缆之间的区别吗?
  17. STM32单片机蓝牙APP智能急救手表跌倒报警心率报警MAX30102
  18. C和指针 第5章 操作符和表达式 5.1 操作符
  19. 【DS with Python】 re模块与正则表达式
  20. ttest函数使用方法_用MATLAB做T检验(ttest)

热门文章

  1. 零基础ESP8266学习篇-认识esp8266
  2. CorelDRAW图片导出变色,如何解决?
  3. 【AI_数学知识】概率论
  4. 广州的11个辖区_广州市下辖11个区,其中GDP总值超过3000亿元的分别有哪些?
  5. 关于kindle使用的文章
  6. Kaldi 入门使用教程
  7. pythonmath库round计算_Python tensorflow.math.round()用法及代码示例
  8. java石头剪刀布界面_利用Java模拟石头剪刀布游戏
  9. [转]程序员收集整理的PHP资源大全,包含各种类库及框架等
  10. ios应用内下载并安装另一个应用