欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2640|回復: 4
打印 上一主題 下一主題
收起左側

深度剖析STM32F4 GPIO的八種工作模式

  [復制鏈接]
跳轉到指定樓層
樓主
1 GPIO簡介
GPIO,即通用I/O(輸入/輸出)端口,是STM32可控制的引腳。STM32芯片的GPIO引腳與外部設備連接起來,可實現與外部通訊、控制外部硬件或者采集外部硬件數據的功能。


STM32F407有7組IO。分別為GPIOA~GPIOG,每組IO有16個IO口,共有112個IO口  通常稱為 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x為0-15。  并且F4系列是基于Cortex-M4內核  

GPIO的復用:

STM32F4 有很多的內置外設,這些外設的外部引腳都是與 GPIO 共用的。也就是說,一個引腳可以有很多作用,但是默認為IO口,如果想使用一個 GPIO內置外設的功能引腳,就需要GPIO的復用,那么當這個 GPIO 作為內置外設使用的時候,就叫做復用。    比如說串口  就是GPIO復用為串口

2 GPIO的工作模式
1、4種輸入模式

(1)GPIO_Mode_IN_FLOAtiNG 浮空輸入
(2)GPIO_Mode_IPU 上拉輸入
(3)GPIO_Mode_IPD 下拉輸入
(4)GPIO_Mode_AIN 模擬輸入

2、4種輸出模式

(5)GPIO_Mode_Out_OD 開漏輸出(帶上拉或者下拉)
(6)GPIO_Mode_AF_OD 復用開漏輸出(帶上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽輸出(帶上拉或者下拉)
(8)GPIO_Mode_AF_PP 復用推挽輸出(帶上拉或者下拉)
3、4種最大輸出速度
(1)2MHZ  (低速)
(2)25MHZ  (中速)
(3)50MHZ  (快速)
(4)100MHZ  (高速)


關于他們的定義,都在  stm32f4xx_gpio.h 中,都為結構體形式的定義

3 GPIO框圖剖析

我們所用到的每一個GPIO其內部結構都是這樣,分別對應著GPIO的八種模式  這里我們簡單的介紹下:


保護二極管:  IO引腳上下兩邊兩個二極管用于防止引腳外部過高、過低的電壓輸入,當引腳電壓高于VDD_FT時,上方的二極管導通,當引腳電壓低于VSS時,下方的二極管導通,防止不正常電壓引入芯片導致芯片燒毀


上拉、下拉電阻:控制引腳默認狀態的電壓,開啟上拉的時候引腳默認電壓為高電平,開啟下拉的時候引腳默認電壓為低電平


TTL施密特觸發器:基本原理是當輸入電壓高于正向閾值電壓,輸出為高;當輸入電壓低于負向閾值電壓,輸出為低;IO口信號經過觸發器后,模擬信號轉化為0和1的數字信號    也就是高低電平  并且是TTL電平協議   這也是為什么STM32是TTL電平協議的原因


P-mos管和N-MOS管:信號由P-MOS管和N-MOS管,依據兩個MOS管的工作方式,使得GPIO具有“推挽輸出”和“開漏輸出”的模式     P-MOS管高電平導通,低電平關閉,下方的N-MOS低電平導通,高電平關閉


注:  VDD_FT  代表IO口,兼容3.3V和5V,如果沒有標注“FT”,就代表著不兼容5V      
在芯片數據手冊的引腳定義中,會看到有“I/O電平”一列  有FT即為支持5V



4 GPIO的八種工作模式剖析:
浮空輸入模式


浮空輸入模式下,I/O端口的電平信號直接進入輸入數據寄存器。MCU直接讀取I/O口電平,I/O的電平狀態是不確定的,完全由外部輸入決定;如果在該引腳懸空(在無信號輸入)的情況下,讀取該端口的電平是不確定的。 (接用電壓表測量其引腳電壓為1點幾伏,這是個不確定值) 以用來做KEY識別


上拉輸入模式


IO內部接上拉電阻,此時如果IO口外部沒有信號輸入或者引腳懸空,IO口默認為高電平  如果I/O口輸入低電平,那么引腳就為低電平,MCU讀取到的就是低電平

STM32的內部上拉是"弱上拉",即通過此上拉輸出的電流是很弱的,如要求大電流還是需要外部上拉。

下拉輸入模式


IO內部接下拉電阻,此時如果IO口外部沒有信號輸入或者引腳懸空,IO口默認為低電平  如果I/O口輸入高電平,那么引腳就為高電平,MCU讀取到的就是高電平

模擬輸入模式



當GPIO引腳用于ADC采集電壓的輸入通道時,用作"模擬輸入"功能,此時信號不經過施密特觸發器,直接直接進入ADC模塊,并且輸入數據寄存器為空 ,CPU不能在輸入數據寄存器上讀到引腳狀態

當GPIO用于模擬功能時,引腳的上、下拉電阻是不起作用的,這個時候即使配置了上拉或下拉模式,也不會影響到模擬信號的輸入輸出

除了 ADC 和 DAC 要將 IO 配置為模擬通道之外其他外設功能一律 要配置為復用功能模式,

開漏輸出模式(帶上拉或者下拉)



在開漏輸出模式時,只有N-MOS管工作,如果我們控制輸出為0,低電平,則P-MOS管關閉,N-MOS管導通,使輸出低電平,I/O端口的電平就是低電平,若控制輸出為1時,高電平,則P-MOS管和N-MOS管都關閉,輸出指令就不會起到作用,此時I/O端口的電平就不會由輸出的高電平決定,而是由I/O端口外部的上拉或者下拉決定   如果沒有上拉或者下拉 IO口就處于懸空狀態


并且此時施密特觸發器是打開的,即輸入可用,通過輸入數據寄存器GPIOx_IDR可讀取I/O的實際狀態。,I/O口的電平不一定是輸出的電平   


推挽輸出模式(帶上拉或者下拉)


在推挽輸出模式時,N-MOS管和P-MOS管都工作,如果我們控制輸出為0,低電平,則P-MOS管關閉,N-MOS管導通,使輸出低電平,I/O端口的電平就是低電平,若控制輸出為1 高電平,則P-MOS管導通N-MOS管關閉,使輸出高電平,I/O端口的電平就是高電平,  外部上拉和下拉的作用是控制在沒有輸出時IO口電平

此時施密特觸發器是打開的,即輸入可用,通過輸入數據寄存器GPIOx_IDR可讀取I/O的實際狀態。I/O口的電平一定是輸出的電平   

復用開漏輸出(帶上拉或者下拉)


GPIO復用為其他外設,輸出數據寄存器GPIOx_ODR無效;  輸出的高低電平的來源于其它外設,施密特觸發器打開,輸入可用,通過輸入數據寄存器可獲取I/O實際狀態    除了輸出信號的來源改變 其他與開漏輸出功能相同

復用推挽輸出(帶上拉或者下拉)


用為其他外設(如 I2C),輸出數據寄存器GPIOx_ODR無效;  輸出的高低電平的來源于其它外設,施密特觸發器打開,輸入可用,通過輸入數據寄存器可獲取I/O實際狀態    除了輸出信號的來源改變 其他與開漏輸出功能相同


開漏輸出和推挽輸出的區別:


推挽輸出:


可以輸出強高低電平,連接數字器件


推挽結構一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止.


開漏輸出:


可以輸出強低電平,高電平得靠外部電阻拉高。輸出端相當于三極管的集電極. 需要外接上拉電阻,才能實現輸出高電平  合于做電流型的驅動,其吸收電流的能力相對強(一般20ma以內);


在使用任何一種開漏模式時,都需要接上拉電阻,否則只能輸出低電平


推挽輸出電路: 其中IN端輸出高電平時下面的PNP三極管截止,而上面NPN三極管導通,輸出電平VS+;當IN端輸出低電平時則恰恰相反,PNP三極管導通,輸出和地相連,為低電平   


開漏輸出電路:IN端輸出低電平時,三極管導通,使輸出接地,IN端輸出高電平時,三極管截止,所以引腳既不輸出高電平,也不輸出低電平,為高阻態。為正常使用時必須接上拉電阻,


在STM32中選用IO模式:


上拉輸入、下拉輸入可以用來檢測外部信號;例如,按鍵等;
模擬輸入 ——應用ADC模擬輸入,或者低功耗下省電
開漏輸出一般應用在I2C、SMBUS通訊等需要"線與"功能的總線電路中。
推挽輸出模式一般應用在輸出電平為0和3.3伏而且需要高速切換開關狀態的場合。在STM32的應用中,除了必須用開漏模式的場合,我們都習慣使用推挽輸出模式。
復用功能的推挽輸出_AF_PP ——片內外設功能(I2C的SCL,SDA)
復用功能的開漏輸出_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)
F4系列與F1系列區別:
本質上的區別是F4系列采用了Cortex-M4內核  而F1系列采用Cortex-M3內核


F1系列(M3)IO口基本結構:


F4系列(M4)IO口基本結構:


F4系列設計的更加高級與人性化,他將外部上下拉電阻轉移到了輸出/輸入驅動器外部,使得輸出模式下也可以實現內部上拉與下拉,方便了用戶的使用,增加了靈活性


GPIO的初始化(F4)
這里我們以初始化LED為例


1.定義一個 GPIO_InitTypeDef 類型的結構體


GPIO_InitTypeDef GPIO_InitStructure;   /*定義一個 GPIO_InitTypeDef 類型的結構體*/


一共有5個參數


2開啟 LED 相關的 GPIO 外設時鐘


RCC_AHB1PeriphclockCmd ( RCC_AHB1Periph_GPIOB, ENABLE);     /*開啟 AHB1時鐘*/


Q:為什么要設置時鐘?


任何外設都需要時鐘,51單片機,stm32,430等等,因為寄存器是由D觸發器組成的,往觸發器里面寫東西,前提條件是有時鐘輸入。stm32是低功耗,他將所有的門都默認設置為disable(不使能),在你需要用哪個門的時候,開哪個門就可以,也就是說用到什么外設,只要打開對應外設的時鐘就可以,   其他的沒用到的可以還是disable(不使能),這樣耗能就會減少。


Q:為什么 STM32 要有多個時鐘源呢?


因為首 先 STM32 本身非常復雜,外設非常的多,但是并不是所有外設都需要系統時鐘這么高的頻率, 比如看門狗以及 RTC 只需要幾十 k 的時鐘即可。同一個電路,時鐘越快功耗越大,同時抗電磁 干擾能力也會越弱,所以對于較為復雜的 MCU 一般都是采取多時鐘源的方法來解決這些問題。


而相對應的外設功能所使用的時鐘 在stm32f4xx.h 中即可查看到


RCC_AHB1


RCC_APB1


3選擇要控制的 GPIO 引腳


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  /*選擇Pin9引腳*/


可選引腳為0-15 一組IO口有16個引腳


4設置所選引腳的模式


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   /*設定為輸出模式*/


引腳的模式共有四種,分別為輸入,輸出,復用,和模擬模式


5 設定所選引腳的輸出類型


GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /*設置引腳的輸出類型為推挽輸出*/


輸出模式有兩種:推挽輸出和開漏輸出   


只有輸出模式才需要配置,輸入模式下不需要配置


6 設定所選管腳的速度


GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//設定速度為100MHz  高速模式


7 設定所選管腳的上拉與下拉


GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; /*設置引腳為上拉模式*/


可設置為:上拉,下拉,與浮空


8初始化GPIO


GPIO_Init(GPIOB, &GPIO_InitStructure);    //初始化所設置的引腳


GPIO_Init() 是官方配置的初始化函數  第一個參數是GPIOX 第二個參數是結構體所對應GPIO各種參數的配置


GPIO的初始化(F1)
F4的初始化相較于F1系列有了很大的改變,在配置F1系列時,結構體只有三個參數  


GPIO_InitTypeDef 類型的結構體


所選管腳的速度


所選管腳的8種模式


區別:

F1(M-3)系列管腳速度只有三種模式  并且管腳的模式配置八種模式全部都在一起定義,直接設置即可

總歸還是大同小異,不做過多介紹,看下下方配置即可

void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;                    //定義初始化結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA時鐘

GPIO_InitStruct.GPIO_Mode    = GPIO_Mode_Out_PP;     //配置模式
GPIO_InitStruct.GPIO_Pin     = GPIO_Pin_0;           //配置哪個IO口
GPIO_InitStruct.GPIO_Speed   = GPIO_Speed_50MHz;     //配置IO口速度,僅輸出有效
GPIO_Init(GPIOA,&GPIO_InitStruct);                   //初始化GPIOA的參數為以上結構體
}

評分

參與人數 3黑幣 +64 收起 理由
小梁@113 + 5 贊一個!
xjx51 + 9 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:481073 發表于 2020-4-3 10:03 | 只看該作者
這個講的挺透徹的,為樓主點贊
回復

使用道具 舉報

板凳
ID:91165 發表于 2020-4-3 10:05 | 只看該作者
講解詳細,謝謝樓主
回復

使用道具 舉報

地板
ID:710888 發表于 2020-4-4 09:18 | 只看該作者
受教了,一直搞不清楚推挽和開漏的差別,這回搞清楚了
回復

使用道具 舉報

5#
ID:609192 發表于 2021-7-9 10:08 | 只看該作者
回顧了一下基礎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表