STM32 STM32的復用時鐘何時開啟?

2021-09-27 11:22:20 字數 2117 閱讀 8850

stm32的afio時鐘真的是在開啟引腳復用功能的時候開啟嗎?其實並不是~

我們知道,stm32有很多外設,這些外設的外部引腳都是與gpio共用的。我們可以通過軟體來配置引腳作為gpio引腳還是作為外設引腳。當引腳配置為外設引腳時就叫做復用。如串列埠預設復用的引腳為:

pa9、pa10引腳可配置為普通io,也可配置為串列埠引腳(pa9為tx,pa10為rx)。

最近看到乙份**(基於stm32f103zet6)的串列埠配置如下:

看到這裡開啟了afio時鐘,讓我疑惑了一下,為什麼spi相關的引腳也配置為復用但並沒有開啟apio時鐘也能正常工作。所以afio時鐘應該什麼時候開呢?

我們回顧一下,我們為什麼要開啟時鐘呢?因為我們要對晶元內部的硬體進行控制(讀寫其暫存器),要控制哪一部分,就要開啟那一部分的時鐘。

本例中,使能gpioa、usart1的時鐘是因為我們要對gpioa、usart1相關的暫存器進行操作。那麼afio呢?其管理的暫存器有哪些呢?從參考手冊關於通用和復用功能i/o(gpio和afio)這一章節可以看到afio管理的暫存器如下:

可以知道,本例對usart1進行配置,並沒有涉及到afio相關的暫存器,所以並不需要開啟afio時鐘!

所以這裡的第7行**可以刪掉。當然不刪也可以正常工作,但是會白白增加能耗、寫無用**(白白浪費程式儲存器空間)而已!

按照上面分析的,當然是要操作afio相關的暫存器的時候才開啟afio時鐘。此處依舊以串列埠為例。我們看到afio管理的暫存器中有復用重對映和除錯i/o配置暫存器(afio_mapr)這一暫存器,這個暫存器怎麼用呢?

首先,我們要知道什麼是重對映。

使用重對映功能可以把一些復用功能重新對映到其他引腳上,在某些時候可以方便板級硬體的布局設計。設定afio_mapr暫存器實現引腳的重新對映。此時,復用功能不再對映到它們的原始分配上。 可以重對映到任意引腳嗎?其實是有規定的,可查閱參考手冊,如串列埠1的重對映:

我們可以配置pb6、pb7作為串列埠1的tx、rx引腳,具體配置**如下:

這裡得呼叫乙個重對映配置函式gpio_pinremapconfig,可在這個函式在stm32f10x_gpio.c中,如下:

其中第乙個引數為要重對映的外設,可在stm32f10x_gpio.h中檢視:

其中重對映又分為部分重對映和完全重對映,區別就是要重對映全部的引腳還是部分引腳,這也是有規定的。比如定時器1:

我們從gpio_pinremapconfig函式的實現中可以看到我們需要操控afio_mapr暫存器,所以需要開啟afio時鐘。

綜上,需要操控afio管理的暫存器才需開啟afio時鐘,否則不需要開啟。

STM32 STM32啟動方式

在復位時,會按照boot的狀態判斷進入哪種模式,boot腳不用保持長狀態。模式1 boot0拉低,使用使用者快閃儲存器區,這是最正常啟動的模式,即,在正常啟動時,boot0應該下拉為低電平 模式3 從sram執行,由於stm32的flash擦寫的次數是有限的,所以為了保護我們的flash,延長mcu...

STM32 STM32學習記錄3 按鍵輸入

1 io配置 上拉輸入模式 區別在於沒有輸入訊號的時候預設輸入高電平 因為 有弱上拉 下拉輸入模式 區別在於沒有輸入訊號的時候預設輸入低電平 因為有弱下拉 對於浮空輸入模式顧名思義也就 是輸入什麼訊號才是什麼訊號,對於浮空輸入要保證有明確的輸入訊號。2 stm32的gpio既可以設定為輸出也可以設定...

STM32系統時鐘

1 參考資料 stm32f1開發指南 庫函式版本 4.3小節 時鐘系統 stm32中文參考手冊v10 第六章 復位和時鐘控制 rcc 2 時鐘系統知識總結 1 stm32有5個時鐘源 hsi hse lsi lse pll hsi是高速內部時鐘,rc振盪器,頻率為8mhz,精度不高 hse是高速外部...