0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 15:31 次阅读

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

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标准外设库。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5304

    浏览量

    119886
  • STM32
    +关注

    关注

    2265

    文章

    10858

    浏览量

    354440
  • 时钟
    +关注

    关注

    10

    文章

    1716

    浏览量

    131302
  • 复位
    +关注

    关注

    0

    文章

    169

    浏览量

    24188
收藏 人收藏

    评论

    相关推荐

    TPA3255在复位引脚禁用和使的时候会出现啪嗒声,怎么解决?

    TPA3255芯片我参考官方的EVM电路做了2款PCB,购买了2TPA3255芯片,现在无法解决复位引脚在使和禁用时的啪嗒声。 电路前级是PCM5242,TPA3255处于BTL
    发表于 09-29 06:25

    STM32复位电路用复位芯片和阻容复位电路区别

    STM32是一款广泛使用的微控制器,其复位电路设计对于系统的稳定性和可靠性至关重要。本文将详细介绍STM32复位电路中使用复位芯片和阻容
    的头像 发表于 08-06 10:26 1035次阅读

    伺服开启使ON接什么点

    伺服电机是一种高精度、高响应速度的电机,广泛应用于自动化设备、机器人、数控机床等领域。在伺服电机的控制中,使信号(Enable Signal)是一个非常重要的信号,它用于控制伺服电机的启动和停止
    的头像 发表于 06-14 10:21 1789次阅读

    STM32CubeMX中怎么使CRC时钟

    请教各位大侠,STM32CubeMX中,怎么使CRC时钟
    发表于 05-16 07:04

    时钟使的八边三格D型触发器数据表

    电子发烧友网站提供《带时钟使的八边三格D型触发器数据表.pdf》资料免费下载
    发表于 05-15 10:42 0次下载
    带<b class='flag-5'>时钟</b><b class='flag-5'>使</b><b class='flag-5'>能</b>的八边三格D型触发器数据表

    stm32辅助时钟AFIO,什么时候使时钟?其作用是什么?

    一直不知道AFIO,请指点一下,什么时候使时钟。其作用是什么?
    发表于 05-15 08:01

    STM32F070选择内部时钟后外部复位有时点亮不了灯怎么解决?

    STM32F070F6P6选择内部时钟后,外部复位,有时点亮不了灯(外部晶振拆了);(20次有1到2次会出现)使用外部晶振是没有问题的。 配置信息如下: static void
    发表于 04-18 06:05

    stm32F429串口采用DMA方式发送,数据流使失败的原因?

    最近项目要使用F429的DMA进行串口发送数据,烧录之后程序无法正常运行,仿真发现在执行完DMA_Cmd(DMA2_Stream7, ENABLE)之后并没有被使,反而多了两个错误中断标志,一个是
    发表于 04-17 07:05

    STM32H7想把PA5作为SP1的时钟输出,结果只要使DAC2就不能用PA5,为什么?

    问题描述:我把DAC连接到运放,从PE7输出。想把PA5作为SP1的时钟输出,结果只要使DAC2就不能用PA5。 手册上有一句话:如果 DAC 输出与输出焊盘断开连接并连接到
    发表于 04-03 06:00

    STM32G070 SPI主机只接收模式关闭SPI使后为什么还有时钟输出?

    使用STM32G070,一个板子实现主机只接收,另一个板子实现从机只发送,通信波形发现主机SPI关闭使后,选信号已经置高,仍然有8个
    发表于 03-28 07:08

    STM32无法进入Bootloader的处理方法

    STM32无法进入Bootloader的处理方法  当STM32芯片无法进入Bootlo
    的头像 发表于 02-02 14:33 1891次阅读

    GD32 MCU电源复位和系统复位有什么区别

    GD32 MCU的复位分为电源复位和系统复位,电源复位又称为冷复位,相较于系统复位
    的头像 发表于 02-02 09:37 1406次阅读
    GD32 MCU电源<b class='flag-5'>复位</b>和系统<b class='flag-5'>复位</b>有什么<b class='flag-5'>区别</b>

    关于伺服电机使丢失问题求解

    V-ASSISTANT软件里调试电机的时候,在使状态下 仍然可以推动电机,但是软件里的使状态不会丢失,我想问的是这两种有什么区别
    发表于 01-09 07:26

    stm32复位电容容值

    STM32是意法半导体(STMicroelectronics)推出的一系列32位微控制器,具有低功耗、高性能和丰富的外设功能。在STM32微控制器中,复位电容是电路中的一个重要组成部分
    的头像 发表于 01-05 17:39 1631次阅读

    AD7124-8使内部参考电压无法正确使是为什么?

    config寄存器 REF_SEL 。看手册也只有这两个参数涉及到了ad7124-8内部参考电压的使,请问各位群友参数的设置有遗漏吗?还是可能是硬件的问题?
    发表于 12-11 06:51