深入探索STM32硬體抽象層 GPIO

2021-10-24 17:32:17 字數 1230 閱讀 4824

每個stm32外設都通過幾條匯流排互連到mcu核心,如下圖所示。

正如我們將在看到的那樣,每條匯流排都連線到不同的時鐘源,時鐘源決定了連線到該匯流排的外設的最大速度。

外圍裝置已對映到4gb位址空間的特定區域,從0x4000 0000開始,一直持續到0x5fff ffff。 該區域被進一步劃分為幾個子區域,每個子區域對映到乙個特定的外圍裝置,如下圖所示。

該空間的組織方式以及外圍裝置的對映方式特定於給定的stm32微控制器。 例如,在stm32f030微控制器中,ahb2匯流排對映到範圍從0x4800 0000到0x4800 17ff的區域。 這意味著該區域為6144位元組寬。 該區域進一步分為幾個子區域,每個子區域對應乙個特定的外圍裝置。gpioa外設(管理與port-a連線的所有引腳)從0x4800 0000對映到0x4800 03ff,這意味著它占用了1kb的別名外設儲存器。 該記憶體對映空間的組織方式又取決於特定的外圍裝置。 下表1顯示了gpio外設的儲存器布局。

控制外圍裝置以修改和讀取這些對映區域的每個暫存器。 例如,繼續以gpioa外設為例,要使pa5引腳作為輸出引腳,我們必須配置moder暫存器,以便將位[11:10]配置為01(對應於通用輸出模式),如上圖所示。接下來,將引腳拉高,我們必須設定相應的輸出資料暫存器(odr)中的位[5],根據下表對映到gpioa + 0x14儲存器位置,即0x4800 0000 + 0x14。

以下最小示例顯示了如何使用指標訪問stm32f030 mcu中的gpioa外設對映的儲存器。

int main(void)
再次需要澄清的是,每個stm32系列(f0,f1等)和給定系列的每個成員(stm32f030,stm32f1等)都提供其外設子集,這些子集被對映到特定位址。 此外,stm32系列之間外設的實現方式也有所不同。

hal角色之一是從特定的外圍裝置對映中抽象出來。 這是通過為每個外圍裝置定義幾個處理程式來完成的。 處理程式只不過是c結構,c結構的引用用於指向實際的外設位址。 讓我們看看其中之一。

如下配置pa5引腳:

/*configure gpio pin : pa5 */

gpio_initstruct.pin = gpio_pin_5;

gpio_initstruct.mode = gpio_mode_output_pp;

hal_gpio_init(gpioa, &gpio_initstruct);

此處,gpioa變數是以這種方式定義的gpio_typedef型別的指標:

詳情參閱

stm32硬體除錯

stm32的基本系統主要涉及下面幾個部分 一 電源 1 無論是否使用模擬部分和ad部分,mcu外圍出去vcc和gnd,vdda vssa vref 如果 封裝有該引腳 都必需要連線,不可懸空 2 對於每組對應的vdd和gnd都應至少放置乙個104的陶瓷電容用於濾波,並接該 電容應放置盡量靠近mcu ...

STM32硬體除錯詳解

stm32的基本系統主要涉及下面幾個部分 一 電源 1 無論是否使用模擬部分和ad部分,mcu外圍出去vcc和gnd,vdda vssa vref 如果封裝有該引腳 都必需要連線,不可懸空 2 對於每組對應的vdd和gnd都應至少放置乙個104的陶瓷電容用於濾波,並接該電容應放置盡量靠近mcu 3 ...

STM32 硬體SPI主從通訊

本例子基於stm32f103zet6晶元,實現spi1與spi2的主從通訊。其中spi1配置為主機,spi2配置為從機,均配置為全雙工模式。硬體連線圖 其中,我們需要注意的是,spi的從機不能主動傳送資料,只能應答資料。本例子的資料互動過程 主機使用查詢方式傳送資料給從機。從機使用中斷接收方式接收資...