0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32失能時鐘和復(fù)位外設(shè)的區(qū)別

jf_pJlTbmA9 ? 來源:strongerHuang ? 作者:strongerHuang ? 2023-10-17 11:48 ? 次閱讀

STM32參考手冊中,都有Reset and Clock Control(RCC)復(fù)位和時鐘控制的章節(jié)。

在這一章節(jié)就可以看到有兩類寄存器

peripheral reset register(RSTR)外設(shè)復(fù)位寄存器。

peripheral clock enable register(ENR)外設(shè)時鐘使能寄存器。

我們拿STM32F1參考手冊為例,可以看到如下圖寄存器:

wKgaomUD8YCAXiLmAASaLTuRZnU158.png

一種是控制外設(shè)時鐘的寄存器,一種是復(fù)位外設(shè)的寄存器。

外設(shè)時鐘使能和失能

我們都知道,配置STM32外設(shè),會先開啟對應(yīng)的時鐘(也就是使能外設(shè)時鐘)。

比如使能USART1時鐘:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

失能USART1時鐘:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, DISABLE);

前面分享過一篇文章《STM32為什么要先開啟外設(shè)時鐘?》,里面有說:為什么我們要先開啟STM32外設(shè)時鐘。

從時鐘使能和失能來說,這里再簡單總結(jié)一下:使能外設(shè)時鐘,我們就可以操作(讀寫)對應(yīng)的外設(shè);失能外設(shè)時鐘,則我們無法操作對應(yīng)的外設(shè)。

所以說,我們要操作外設(shè),就必須要先開啟(使能)其外設(shè)時鐘。

復(fù)位外設(shè)

復(fù)位外設(shè)相信大部分朋友都能理解,如果使用寄存器開發(fā)過的朋友,更應(yīng)該明白。

簡單來說,復(fù)位外設(shè)就是恢復(fù)外設(shè)所有寄存器為上電默認值,也可以說復(fù)位了我們的配置。

可能有些地方你會也會發(fā)現(xiàn)xx外設(shè)配置之前有“重新初始化”外設(shè)的操作,如:

USART_DeInit(USART1);
DMA_DeInit(DMA1_Channel1);

這重新初始化代碼里面,其實就是調(diào)用了復(fù)位外設(shè)代碼。

失能外設(shè)時鐘和復(fù)位外設(shè)區(qū)別

上面說了失能外設(shè)時鐘,我們就不能操作外設(shè)了。那么復(fù)位外設(shè),我們還能操作外設(shè)嗎?外設(shè)的時鐘也會被復(fù)位嗎?

可能許多人沒有深入分析過,我這里簡單總結(jié)一下:

1、外設(shè)時鐘未使能(失能狀態(tài)),不能配置(讀寫)外設(shè);

2、復(fù)位外設(shè),會復(fù)位外設(shè)的所有寄存器,但外設(shè)時鐘不會被復(fù)位;

3、外設(shè)時鐘使能,復(fù)位外設(shè),再清除復(fù)位外設(shè),可以繼續(xù)配置(讀寫)外設(shè)。如USART1重新初始化:

RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);

USART_Init(USART1,  USART_InitStructure);

4、復(fù)位外設(shè),但不清除復(fù)位外設(shè),則不能繼續(xù)配置(讀寫)外設(shè)。

RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);

USART_Init(USART1,  USART_InitStructure);

在STM32的庫函數(shù)中,外設(shè)復(fù)位和清除都是成對的,所以,我們用庫開發(fā)的好處,就是相對不容易犯一些錯誤。

因為還有很多朋友使用寄存器開發(fā),有很多細節(jié)問題可能沒有深入研究過,就不知道問題到底處在哪里。

所以,建議用寄存器開發(fā)的朋友轉(zhuǎn)向使用(SPL、HAL或CLL)庫開發(fā)。如果你非要一步一步理解底層,建議使用SPL標準外設(shè)庫。

來源:嵌入式專欄(作者 | strongerHuang)
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119816
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354294
  • 時鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1714

    瀏覽量

    131274
  • 復(fù)位
    +關(guān)注

    關(guān)注

    0

    文章

    169

    瀏覽量

    24182
收藏 人收藏

    評論

    相關(guān)推薦

    STM32為什么要先開啟外設(shè)時鐘?

    相信很多朋友都曾遇到過這種坑,我最初學(xué)習(xí)STM32的時候同樣也遇到過。下面,我就來說說為什么我們要先開啟STM32外設(shè)模塊時鐘,再對其外設(shè)
    的頭像 發(fā)表于 10-20 14:10 ?4411次閱讀
    <b class='flag-5'>STM32</b>為什么要先開啟<b class='flag-5'>外設(shè)</b><b class='flag-5'>時鐘</b>?

    為使外設(shè)如何理解

    為使外設(shè)如何理解
    發(fā)表于 10-16 18:59

    STM32復(fù)位時鐘控制(RCC)

    ,USBRST,CANRSTDACRST:復(fù)位DAC接口PWRRST:復(fù)位電源接口BKPRST:復(fù)位備份接口WWDGRST:復(fù)位窗口看門狗1.3.6 AHB
    發(fā)表于 02-12 15:41

    STM32片上外設(shè)時鐘使復(fù)位區(qū)別

    時鐘的寄存器,一種是復(fù)位外設(shè)的寄存器。2外設(shè)時鐘使
    發(fā)表于 11-15 20:30

    外設(shè)時鐘使語句的問題

    主芯片使用的是STM32F207ZET6.如下圖所示,TIM3掛載在APB1總線下面的但是有個疑問,底下外設(shè)時鐘使的語句都能使用嗎,有什么區(qū)別
    發(fā)表于 08-04 13:10

    STM32復(fù)位來源 以及系統(tǒng)和內(nèi)核復(fù)位區(qū)別

    STM32復(fù)位來源、以及系統(tǒng)和內(nèi)核復(fù)位區(qū)別
    的頭像 發(fā)表于 02-28 17:13 ?7665次閱讀

    STM32片上外設(shè)時鐘使 復(fù)位區(qū)別

    STM32片上外設(shè)時鐘使、復(fù)位
    的頭像 發(fā)表于 03-06 15:31 ?5933次閱讀

    CM3(STM32) 內(nèi)核復(fù)位與系統(tǒng)復(fù)位區(qū)別及應(yīng)用

    CM3(STM32)內(nèi)核復(fù)位與系統(tǒng)復(fù)位區(qū)別及應(yīng)用
    的頭像 發(fā)表于 03-20 09:43 ?4797次閱讀
    CM3(<b class='flag-5'>STM32</b>) 內(nèi)核<b class='flag-5'>復(fù)位</b>與系統(tǒng)<b class='flag-5'>復(fù)位</b><b class='flag-5'>區(qū)別</b>及應(yīng)用

    STM32時鐘基礎(chǔ)內(nèi)容和常見問題

    RCC,Reset and Clock Control(復(fù)位時鐘控制),在絕大部分MCU芯片中都包含復(fù)位時鐘控制模塊,也是MCU重要的組成部分。 相比于以前51單片機,現(xiàn)在
    的頭像 發(fā)表于 04-02 16:39 ?6138次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>時鐘</b>基礎(chǔ)內(nèi)容和常見問題

    STM32H7教程】第14章 STM32H7的電源,復(fù)位時鐘系統(tǒng)

    STM32H7教程】第14章 STM32H7的電源,復(fù)位時鐘系統(tǒng)
    發(fā)表于 12-09 11:21 ?36次下載
    【<b class='flag-5'>STM32</b>H7教程】第14章 <b class='flag-5'>STM32</b>H7的電源,<b class='flag-5'>復(fù)位</b>和<b class='flag-5'>時鐘</b>系統(tǒng)

    STM32電源管理、復(fù)位、時鐘

    第二篇文章——STM32電源、復(fù)位、時鐘電源管理電源電壓調(diào)節(jié)器可編程電壓監(jiān)測器(PVD: Programmable voltage detector )低功耗模式復(fù)位Cortex-M3
    發(fā)表于 01-05 14:25 ?10次下載
    <b class='flag-5'>STM32</b>電源管理、<b class='flag-5'>復(fù)位</b>、<b class='flag-5'>時鐘</b>

    STM32學(xué)習(xí)筆記】技巧2 - STM32復(fù)位類型及區(qū)別

    系統(tǒng)復(fù)位、電源復(fù)位和備份域復(fù)位。每一種型號的STM32都包含有這三種復(fù)位類型!1.1、系統(tǒng)復(fù)位
    發(fā)表于 01-17 12:54 ?10次下載
    【<b class='flag-5'>STM32</b>學(xué)習(xí)筆記】技巧2 - <b class='flag-5'>STM32</b>的<b class='flag-5'>復(fù)位</b>類型及<b class='flag-5'>區(qū)別</b>

    STM32復(fù)位來源、以及系統(tǒng)和內(nèi)核復(fù)位區(qū)別

    每一塊STM32中都有這么一個RCC復(fù)位時鐘控制模塊。STM32復(fù)位為三類:系統(tǒng)復(fù)位、電源
    發(fā)表于 02-10 10:30 ?6次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>復(fù)位</b>來源、以及系統(tǒng)和內(nèi)核<b class='flag-5'>復(fù)位</b><b class='flag-5'>區(qū)別</b>

    stm32復(fù)位 內(nèi)核復(fù)位和系統(tǒng)復(fù)位

    內(nèi)核復(fù)位:它會使STM32內(nèi)核(Cortex-M)進行復(fù)位,而不會影響其外設(shè),如GPIO、TIM、USART、SPI等這些寄存器的復(fù)位
    的頭像 發(fā)表于 08-01 17:21 ?4599次閱讀

    STM32復(fù)位電路用復(fù)位芯片和阻容復(fù)位電路區(qū)別

    STM32是一款廣泛使用的微控制器,其復(fù)位電路設(shè)計對于系統(tǒng)的穩(wěn)定性和可靠性至關(guān)重要。本文將詳細介紹STM32復(fù)位電路中使用復(fù)位芯片和阻容
    的頭像 發(fā)表于 08-06 10:26 ?957次閱讀