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

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

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

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

汽車玩家 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-04-04 17:22 ? 次閱讀

STM32的AFIO時(shí)鐘真的是在開啟引腳復(fù)用功能的時(shí)候開啟嗎?其實(shí)并不是~

什么是復(fù)用?

我們知道,STM32有很多外設(shè),這些外設(shè)的外部引腳都是與GPIO共用的。我們可以通過軟件來配置引腳作為GPIO引腳還是作為外設(shè)引腳。當(dāng)引腳配置為外設(shè)引腳時(shí)就叫做復(fù)用。如串口默認(rèn)復(fù)用的引腳為:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

PA9、PA10引腳可配置為普通IO,也可配置為串口引腳(PA9為TX,PA10為RX)。

例子:串口1為例

關(guān)于外設(shè)的配置可查閱:《STM32參考手冊》關(guān)于通用和復(fù)用功能I/O(GPIO和AFIO) 的章節(jié),如串口引腳配置如下:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

我們可能經(jīng)??吹揭恍┐a(基于STM32F103ZET6)的串口配置如下:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

看到這里開啟了AFIO時(shí)鐘,讓我疑惑了一下,為什么SPI相關(guān)的引腳也配置為復(fù)用但并沒有開啟APIO時(shí)鐘也能正常工作。所以AFIO時(shí)鐘應(yīng)該什么時(shí)候開呢?

我們回顧一下,我們?yōu)槭裁匆_啟時(shí)鐘呢?因?yàn)槲覀円獙?duì)芯片內(nèi)部的硬件進(jìn)行控制(讀寫其寄存器),要控制哪一部分,就要開啟那一部分的時(shí)鐘。

本例中,使能GPIOA、USART1的時(shí)鐘是因?yàn)槲覀円獙?duì)GPIOA、USART1相關(guān)的寄存器進(jìn)行操作。那么AFIO呢?其管理的寄存器有哪些呢?從參考手冊關(guān)于通用和復(fù)用功能I/O(GPIO和AFIO)這一章節(jié)可以看到AFIO管理的寄存器如下:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

可以知道,本例對(duì)USART1進(jìn)行配置,并沒有涉及到AFIO相關(guān)的寄存器,所以并不需要打開AFIO時(shí)鐘!

所以這里的第7行代碼可以刪掉。當(dāng)然不刪也可以正常工作,但是會(huì)白白增加能耗、寫無用代碼(白白浪費(fèi)程序存儲(chǔ)器空間)而已!

何時(shí)開啟AFIO時(shí)鐘?

按照上面分析的,當(dāng)然是要操作AFIO相關(guān)的寄存器的時(shí)候才開啟AFIO時(shí)鐘。此處依舊以串口為例。我們看到AFIO管理的寄存器中有復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR) 這一寄存器,這個(gè)寄存器怎么用呢?

首先,我們要知道什么是重映射。

使用重映射功能可以把一些復(fù)用功能重新映射到其他引腳上,在某些時(shí)候可以方便板級(jí)硬件的布局設(shè)計(jì)。設(shè)置AFIO_MAPR寄存器實(shí)現(xiàn)引腳的重新映射。此時(shí),復(fù)用功能不再映射到它們的原始分配上。 可以重映射到任意引腳嗎?其實(shí)是有規(guī)定的,可查閱參考手冊,如串口1的重映射:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

我們可以配置PB6、PB7作為串口1的TX、RX引腳,具體配置代碼如下:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

這里得調(diào)用一個(gè)重映射配置函數(shù)GPIO_PinRemapConfig,可在這個(gè)函數(shù)在stm32f10x_gpio.c中,如下:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

其中第一個(gè)參數(shù)為要重映射的外設(shè),可在stm32f10x_gpio.h中查看:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

其中重映射又分為部分重映射和完全重映射,區(qū)別就是要重映射全部的引腳還是部分引腳,這也是有規(guī)定的。比如定時(shí)器1:

STM32的復(fù)用時(shí)鐘的開啟時(shí)間

我們從GPIO_PinRemapConfig函數(shù)的實(shí)現(xiàn)中可以看到我們需要操控AFIO_MAPR寄存器,所以需要開啟AFIO時(shí)鐘。

綜上,需要操控AFIO管理的寄存器才需開啟AFIO時(shí)鐘,否則不需要開啟。

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

    關(guān)注

    2263

    文章

    10849

    瀏覽量

    353861
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1539

    瀏覽量

    75920
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1184

    瀏覽量

    51752
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    求助,為什么STM32要設(shè)置時(shí)鐘開關(guān)?

    STM32在使用時(shí)離不開時(shí)鐘,在做絕大部分操作之前,除了要先進(jìn)行相應(yīng)的配置之外,關(guān)鍵還要開啟時(shí)鐘,否則就什么事都做不了。既然如此,為什么設(shè)計(jì)
    發(fā)表于 04-23 06:05

    stm32定時(shí)器在初始化參數(shù)之前是否必須開啟對(duì)應(yīng)時(shí)鐘?

    參數(shù)的時(shí)候,對(duì)應(yīng)定時(shí)器時(shí)鐘并沒有開啟,導(dǎo)致PWM不能正常輸出,當(dāng)在這些函數(shù)之前,開啟對(duì)應(yīng)時(shí)鐘,就正常了。看是調(diào)試對(duì)比,TIM的寄存器沒有差別,不知道為什么,所以問一下在初始化參數(shù)之前是
    發(fā)表于 04-18 06:42

    STM32F410端口復(fù)用SPI5,引腳電平很低的原因?

    STM32F410復(fù)用為硬件SPI5口,做DMA輸入,不需要輸出,如果用軟件模擬的SPI口沒有問題,電平是正常的3.3v,如果復(fù)用成硬件SPI5口,不論是時(shí)鐘還是數(shù)據(jù)線上的電平都非常低
    發(fā)表于 04-12 07:29

    請(qǐng)問STM32f103使用PB14做外部中斷為什么要開啟復(fù)用時(shí)鐘才能用?

    如題,我其他中斷不開啟用時(shí)鐘也可以用,這是為啥?有大佬能解個(gè)惑嗎?
    發(fā)表于 04-11 07:22

    如何減少STM32F103 ADC采集時(shí)間?

    路ADC采集,采用時(shí)間為7.5周期,測試出來每通道采樣時(shí)間居然為10ms,當(dāng)采用時(shí)間為239.5周期時(shí),采樣時(shí)間高達(dá)134ms。換了另一塊板也一樣。
    發(fā)表于 04-10 08:20

    有關(guān)stm32f103端口復(fù)用的幾個(gè)問題求解

    在學(xué)習(xí)GPIO時(shí),遇到到端口復(fù)用問題一直不能明白,我舉個(gè)例子: PB6 PB7默認(rèn)情況下是做普通IO使用的,當(dāng)我想用I2C1是,我開啟RCC_APB1PeriphClockCmd
    發(fā)表于 04-07 07:32

    STM32L051同時(shí)開啟RTC時(shí)間戳和秒喚醒后,使用GPIO引腳無法觸發(fā)時(shí)間戳中斷如何解決?

    STM32L051同時(shí)開啟RTC時(shí)間戳和秒喚醒后,使用GPIO引腳無法觸發(fā)時(shí)間戳中斷。但使用一個(gè)3.3V的電源接到PC13能夠觸發(fā)RTC時(shí)間
    發(fā)表于 04-01 06:37

    使用STM32H743-ADC設(shè)置PLL2為時(shí)鐘源為什么開啟不了?

    ,發(fā)現(xiàn)能采集到數(shù)據(jù): 然后下載到同樣為STM32H743IIT6的另外一個(gè)開發(fā)版時(shí)卻發(fā)現(xiàn)采集到的數(shù)據(jù)為0。這是為什么呀? 這個(gè)開發(fā)板也類似最小核心開發(fā)板了,可是我卻開啟不了PLL2作為它的ADC時(shí)鐘
    發(fā)表于 03-12 08:30

    CDCV304 200 MHz通用時(shí)鐘緩沖器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCV304 200 MHz通用時(shí)鐘緩沖器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 02-28 13:55 ?0次下載
    CDCV304 200 MHz通<b class='flag-5'>用時(shí)鐘</b>緩沖器數(shù)據(jù)表

    STM32定時(shí)器時(shí)間計(jì)算方法

    STM32微控制器的定時(shí)器模塊在嵌入式系統(tǒng)中非常常見,它被用于產(chǎn)生精確的時(shí)間延遲,或者用于實(shí)時(shí)時(shí)鐘(RTC)等功能。為了充分利用STM32的定時(shí)器功能,理解其
    的頭像 發(fā)表于 12-19 11:31 ?1w次閱讀

    無人機(jī)電池使用時(shí)間變短的原因

    電池使用時(shí)間變短了,這是很多無人機(jī)使用者都會(huì)遇到的問題,可電池使用時(shí)間變短的具體原因都有哪些?
    的頭像 發(fā)表于 12-08 16:28 ?929次閱讀

    用時(shí)間開關(guān)電路原理圖講解

    用時(shí)間開關(guān): 該電路旨在滿足經(jīng)濟(jì)高效且簡單的定時(shí)器的標(biāo)準(zhǔn)。它的計(jì)時(shí)范圍從不到一秒到幾十小時(shí),并利用基于晶閘管的電源接口來控制感性負(fù)載。
    的頭像 發(fā)表于 12-04 18:24 ?1701次閱讀
    通<b class='flag-5'>用時(shí)間</b>開關(guān)電路原理圖講解

    【RA系列】用時(shí)鐘頻率精度測量電路進(jìn)行時(shí)間校驗(yàn)

    【RA系列】用時(shí)鐘頻率精度測量電路進(jìn)行時(shí)間校驗(yàn)
    的頭像 發(fā)表于 11-25 08:06 ?526次閱讀
    【RA系列】<b class='flag-5'>用時(shí)鐘</b>頻率精度測量電路進(jìn)行<b class='flag-5'>時(shí)間</b>校驗(yàn)

    利用STM32CubeMX解讀時(shí)鐘

    提供給芯片中的RTC(實(shí)時(shí)時(shí)鐘)及IWDG(獨(dú)立看門狗)使用。2,中速時(shí)鐘MSIRC是“中速內(nèi)部時(shí)鐘”或“中速內(nèi)部振蕩器”,是STM32L系列獨(dú)有的
    的頭像 發(fā)表于 11-24 08:00 ?1012次閱讀
    利用<b class='flag-5'>STM32</b>CubeMX解讀<b class='flag-5'>時(shí)鐘</b>樹

    延遲電池使用時(shí)間的設(shè)計(jì)考慮

    電子發(fā)燒友網(wǎng)站提供《延遲電池使用時(shí)間的設(shè)計(jì)考慮.doc》資料免費(fèi)下載
    發(fā)表于 11-14 09:57 ?1次下載
    延遲電池使<b class='flag-5'>用時(shí)間</b>的設(shè)計(jì)考慮