日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

1 io口 stm32_从STM32分享各种硬件以及总线之GPIO简介

發布時間:2024/9/27 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1 io口 stm32_从STM32分享各种硬件以及总线之GPIO简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天有網友私信我,問我怎么沒有更新文章,我有點慚愧沒有能夠及時更新文章。因為都沒有太多時間準備,所以更新的有點慢,但是我還是決定每天給大家分享一點知識。之前我們講了STM32的時鐘,講完時鐘之后我開始為大家講一些外設我們從最基本的GPIO開始講。我們打開STM32的手冊(由于STM32的手冊網上很多,大家可以自己找,如果沒有的朋友也可以私信我,我會及時反饋并將資料給到你),我們看第9章 General-purpose and alternate-function I/Os (GPIOs and AFIOs)。這節主要講STM32的通用IO與復用IO相關知識,我們看任何一款芯片一定要把官方給的參考手冊看透,這樣才能對芯片了如指掌。首先我們來了解一下IO口的模式以及該模式的一些相關知識:

輸入:浮空輸入 ─ 上拉輸入 ─ 下拉輸入 ─ 模擬輸入

輸出:開漏輸出 ─ 推挽輸出 ─ 開漏復用輸出 ─ 開漏復用輸出

針對這些我們逐一分析:

首先是浮空輸入,什么是浮空輸入:就是IO的電平狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的,這種輸入一般用作按鍵的檢測。

上拉輸入,很明顯就是在元器件的內部加上了一個上拉電阻,由于內部有上拉電阻,能夠起到限流的作用,是我們使用過程中也比較常見的情況。

下拉輸入 - 就是元器件的內部將該引腳通過電阻鏈接到GND上面了,將該引腳的電平默認設置為低電平,作用與上拉有點相似。

模擬輸入 - 這個輸入口主要用于檢測IO口輸入的電平的電壓。其實對于輸出來講已經算是很清楚了,從字面意思我們都可以很清楚的了解到,在使用的過程中我們也可以根據實際情況來進行設置,比如你有一個IO口外部忘記接上啦電阻,而你又想當外部沒有輸入的情況下默認是高電平,你就可以設置為上拉輸入。看完輸入我們再來看輸出,輸出就有點講究:

開漏輸出:

我們從圖中可以看出,當我們外部IO口沒有電壓的時候其實這個功能是失效的,根本沒用,所以再我們設置開漏的時候外部一定要接上拉電阻,這樣我們就可以通過控制CTRL端控制外部的輸入。

推挽輸出:

  上圖就是推挽輸出,當我們的CTRL信號為高電平的時候,Q1導通、Q3截至,IO口輸出高電平,當CTRL信號輸出低電平的時候,Q1截至Q3導通,IO口輸出低電平。

而復用推挽輸出以及復用開漏其實是作為第二功能時的配置說明,使用方法與此方法一致。

  講完了IO口的模式,我們再來講講STM32IO口的相關的寄存器,我們從下圖文檔中:

可以看出,每個通用IO口都有2個32位的配置寄存器,2個32位的數據寄存器,一個32位的置位/復位寄存器,一個16位的復位寄存器以及一個32位鎖存寄存器。我們先看通用IO口,在通用IO口的復位期間以及剛復位后,復用功能未開啟狀態,IO口是被設置成為浮空輸入的,所以這點我們要注意,在設計的時候一定要考慮到開機的時候這些IO的狀態會不會影響我們的設計,我之前在設計的時候就碰到過這樣的情況。我們看手冊中,有些特定的總線手冊給了我們一些GPIO的模式配置,這些配置在第9章的9.1.11章節中,我們以后配置的時候一定要看清楚是否與是按照這些配置來配置的,千萬不要搞錯了。

我們正式進入GPIO寄存器相關知識,我們先看GPIOx_CRL和GPIOx_CRH這兩個寄存器,這兩個寄存器是IO口配置寄存器,主要配置IO是輸入還是輸出以及IO口的速度。

我們先看復位的值,我們將0x4444 4444分解為二進制,他的值就是0100 0100 0100 0100 0100 0100 0100 0100,我們將這些數字一一對應帶入該寄存器的對應位,我們拿MODE0和CNF0作為對象,可以知道CNF0[1:0] = 01 ,MODE0[1:0] = 00,通過這兩個數值然后根據下面的圖示查詢可以得出,默認的狀態是InputMode,01:Floating Input狀態,與我們之前手冊上的一致,這就是我們分析GPIOx_CRL與GPIOx_CRH寄存器的方法。

由于我們的引腳有16個引腳,而每個寄存器只能配置8個引腳,所以我們需要兩個寄存器來配置這些引腳。GPIOx_CRL配置的低8個引腳,而GPIOx_CRH配置的高8個的引腳。

分析完模式,我們再來分析端口輸入寄存器GPIOx_IDR。

我們從圖中可以看出,該寄存器的高16位作為預留位置未使用,而使用了低16位。該寄存器的IDR0~IDR15對應的就是引腳0~15的輸入值,而高16位都是0,這些位只能是只讀的模式并且只能以字的形式讀出。

看完端口輸入寄存器我們再來看看端口輸出寄存器GPIO_ODR:

與GPIO_IDR相識,端口輸出寄存器的高16位也是保留的,而只用了低16位,每一位都可以讀也可以寫。ODR0控制這GPIOx_Pin0,ODR15控制這GPIOx_Pin15,這些位也只能以字(16位)的形式進行操作。今天有點晚了,該休息了,明天接著寫,謝謝大家,大家晚安!!!!!

也希望大家勞逸結合,身體健康,喜歡我的朋友給我加個關注,有需要什么資料的也可以找我,我盡我所能給大家幫助,謝謝大家了!!!!

總結

以上是生活随笔為你收集整理的1 io口 stm32_从STM32分享各种硬件以及总线之GPIO简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。