3 STM32的GPIO的深入學習

2021-07-01 22:56:43 字數 2629 閱讀 1545

最近一直在學習tcp/ip協議族,它很複雜,讓我很難理清整個tcp/ip的脈絡,沒有入門,也就沒心情來寫學習報告,而且學習tcp/ip協議的這段過程,正好可以

對嵌入式cortex-m3的學習換個心情,一直學習嵌入式,寫**也很枯燥的,當然看協議也很枯燥,只是方式不同,汗。。。正好抽空鞏固總結一下之前的所學,之後

的外設我還會繼續學習。

gpio模組回顧

在嵌入式軟體應用中,這個模組可以說是運用廣泛,幾乎外設功能的實現在最初都要配置對應的gpio口。gpio模組時鐘使能,初始化(模式,最大傳輸率)這些基

礎的東西經過練習已經十分熟練,我這裡就不在細說,我這裡主要講大部分外設沒用到的幾個庫函式。

1. 讀取gpio埠資料函式

gpio_readinputdatabit(gpiox,gpio_pin_y);//讀取單個輸入埠的資料

gpio_readinputdata(gpiox);//讀取整個輸入埠的資料

gpio_readoutputdatabit(gpiox, gpio_pin_y);//讀取單個輸出埠的資料

gpio_readoutputdata (gpiox);//讀取整個輸入出埠的位資料

這4個庫函式是用來直接讀取埠資料的,其中x:a-g y: 0~15

上面的函式實現的是讀取當前gpio口或位的輸入輸出資料,庫函式沒有什麼可說的。

但這幾個函式涉及到下面兩個暫存器:

埠資料輸入暫存器(gpioa_idr~gpiog_idr);

埠資料輸出暫存器(gpioa_odr~gpiog_odr);

這兩個暫存器都是16位的,高16位保留,讀取值為0,低16位代表著對應gpio埠位[15:0]的狀態,偏移值位0ch,具體位址可參考暫存器表。

上面的庫函式讀取data就是讀取這兩個暫存器中選定那個的低16位,讀取databit就是讀取選定暫存器16位中的任意選定位。

2 . 寫入gpio埠資料函式

gpio_writebit(gpiox, gpio_pin_y,bit_set/bit_reset);//置位或者復位單個輸出埠的資料

gpio_write(gpiox, 0x1111);//置位或者復位整個輸出埠的資料

其中x:a-g y: 0~15

做過流水燈的知道,setbit和resetbit這兩個函式,你有沒有想過有乙個函式能實現這兩個功能呢,或者有函式能實現對一整個gpio進行配置呢,上面的函式就實

現了這個目的。這兩個函式和之前運用的單獨復位置位的庫函式其實就是操作下面兩個暫存器。

埠復位置位暫存器(gpioa_bsrr~gpiog_bsrr) ,32bit復位置位暫存器,w(只寫,下同),

[31~16]寫0無效,寫1對應gpiox_odr位置0

[15~0]寫0無效,寫1對應gpiox_odr位置1

埠復位暫存器(gpioa_brr~gpiog_brr),32bit復位暫存器w

高16位保留,低16位

[15~0]寫0無效,寫1對應gpiox_odr位置0

若gpiox_brr和gpiox_bsrr同時設定,以gpiox_bsrr為準。

3. gpio功能鎖存函式

gpio_pinlockconfig(gpiox, gpio_pin_y);//鎖存選擇埠配置暫存器的對應位

埠鎖存暫存器(gpioa_lckr~gpiog_lckr),32bit暫存器,高16位保留,低16可隨時讀出,1代表對應配置位被啟用鎖存,0代表可以被啟用,啟用是有固定的寫入順

序的。鎖存是不能亂用的,如果鎖存了乙個埠的功能暫存器,那麼在下次系統復位前,埠的功能就不可更改,這在某些情況下是有利的,特別是在程式中如果重

新定義某些gpio口的功能時,在確定其中某一gpio埠在整個系統執行中狀態保持不變,鎖存就避免誤修改,但是如果鎖存的gpio在後序的**段中有不同的功能,

就會無法修改,產生錯誤。因此鎖存和 gpio_structinit, gpio_deinit,gpio_afiodeinit這些初始化函式一樣,使用前要考慮清楚。

4.gpio特殊功能函式

函式gpio_eventoutputconfig(gpio_portsourcegpiox,gpio_pinsourcey);事件輸出。

函式gpio_extilineconfig(gpio_portsourcegpiox, gpio_pinsourcey);外設埠作為中斷線號輸入

這兩個函式我就不多說了,在exti-nvic中會有詳細解釋。

函式gpio_pinremapconfig(u32gpio_remap, functionalstate newstate);改變指定管腳的對映,很多復用功能的引出腳可以通過重對映,從不

同的i/o管

腳引出,即復用功能的引出腳位是可通過程式改變的。就是上面庫函式。

函式gpio_afiodeinit();取消所有的復用功能。

深入探索STM32硬體抽象層 GPIO

每個stm32外設都通過幾條匯流排互連到mcu核心,如下圖所示。正如我們將在看到的那樣,每條匯流排都連線到不同的時鐘源,時鐘源決定了連線到該匯流排的外設的最大速度。外圍裝置已對映到4gb位址空間的特定區域,從0x4000 0000開始,一直持續到0x5fff ffff。該區域被進一步劃分為幾個子區域...

STM32的GPIO開發總結

gpio開發總結 gpio模式 a 浮空輸入 in floating b 帶上拉輸入 ipu in push up c 帶下拉輸入 ipd in push down d 模擬輸入 ain anolog in e 開漏輸出 out pd od 代表開漏,既open drain,oc代表開集,open ...

stm32之GPIO的理解

寫這個部落格著重縷清自己的思路,對基礎的東西有個更好的理解。gpiox crh 與gpiox crl 可以配置gpio的各種模式,進行初始化。gpiox bsrr 32位暫存器,可以寫入或清除1 0 gpiox idr 低16位暫存器,讀取io的電平 gpiox odr 低16位暫存器,寫入io的電...