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

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

    关注

    30

    文章

    5025

    浏览量

    117702
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348697
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130304
  • 复位
    +关注

    关注

    0

    文章

    159

    浏览量

    24033
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    如何使用STM32输出时钟外设使用?

    如何使用STM32输出时钟外设使用?
    发表于 04-08 07:20

    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

    请问STM32MP13X的MMU和Cache如何使

    STM32MP13X的MMU和Cache如何使?修改了hal_conf里的DATA_CACHE_ENABLE的宏console里还是显示没开,在设置里的Define symbols把NO_CACHE_USE删了好像还是不行。。
    发表于 03-12 06:46

    使用STM32F303*8芯片时实现三个DAC同时输出PA4/PA5/PA6吗?DAC2使打不开啊?

    使用STM32F303*8芯片时实现三个DAC同时输出PA4/PA5/PA6吗?现在测试C8时DAC2使打不开啊?DAC1正常
    发表于 03-08 08:15

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

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

    stm32复位电容容值

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

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

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

    STM32失能时钟复位外设区别

    STM32失能时钟复位外设区别
    的头像 发表于 10-17 11:48 551次阅读
    <b class='flag-5'>STM32</b>失能<b class='flag-5'>时钟</b>和<b class='flag-5'>复位</b><b class='flag-5'>外设</b>的<b class='flag-5'>区别</b>

    stm32怎么使时钟?和51单片机有什么区别?

    stm32怎么使时钟和51单片机有什么区别?
    发表于 10-17 07:05

    同步复位与异步复位区别

    请简述同步复位与异步复位区别,说明两种复位方式的优缺点,并解释“异步复位,同步释放”。
    的头像 发表于 08-14 11:49 4007次阅读

    stm32复位 内核复位和系统复位

    内核复位:它会使STM32内核(Cortex-M)进行复位,而不会影响其外设,如GPIO、TIM、USART、SPI等这些寄存器的复位
    的头像 发表于 08-01 17:21 3303次阅读

    基于STM32芯片特定外设复位的功能

    我们知道,STM32芯片里有很多系统级的复位,比方上电复位、欠压复位、看门狗复位、软件复位
    的头像 发表于 06-22 09:08 1339次阅读
    基于<b class='flag-5'>STM32</b>芯片特定<b class='flag-5'>外设</b><b class='flag-5'>复位</b>的功能