STM32 GPIO詳解

下文將根據STM32F207參考手的中GPIO框圖講解GPIO功能。緩存

0一、I/O接口電路

帶FT的是說明能夠容忍5V電壓的,I/O電路框圖app

1.一、普通輸入

普通輸入模式下,上拉和下拉電阻(微弱)的存在,共分3種模式函數

  1. 浮空輸入,不使能上拉電阻,不使能下拉電阻ui

  2. 上拉輸入,使能上拉電阻spa

  3. 下拉輸入,使能下拉電阻3d

從上面框圖得知,輸出緩存是被禁止的code

1.二、普通輸出

普通輸入模式下,上拉和下拉電阻(微弱)的存在。主要是因爲P-MOS和N-MOS的存在分爲下列兩種模式blog

  1. 開漏模式:輸出寄存器是 0 時,激活 N-MOS, 而輸出寄存器是 1 時,端口保持高阻態(P-MOS 不會被使能)教程

  2. 推輓輸出: 輸出寄存器是 0 時,激活 N-MOS, 而輸出寄存器是 1 時,激活 P-MOS接口

從上面的框圖得知,

一、在普通輸出模式中,TTL施密特觸發器是打開的,因此讀輸入數據寄存器,能夠獲得 I/O 的狀態。

二、驅動GPIO輸出,咱們能夠採用輸出寄存器也可使用位段

1.三、模擬輸入

模擬輸入上拉電阻和下拉電阻是沒有用的

高阻態下模擬輸入

從上面框圖得知

  1. 弱上拉和下拉電阻禁止

  2. 施密特觸發器停用,施密特觸發器輸出值強制爲0

  3. 輸出緩存被禁止

  4. 讀輸入數據期存器, 讀到的值爲0

注意:IO配置成模擬輸入時,不能容忍5V電壓

1.四、複用輸出

複用輸出框圖

從上圖框圖中能夠獲得5條信息

  1. 輸出緩存被來自外設的信號驅動(發送數據器使能和數據),也便是位設置/清除寄存器和輸出數據寄存器在這裏是無用的

  2. 因爲P-MOS和N-MOS使能,仍然能夠配置成推輓輸出和開漏輸出

  3. 上拉電阻和下拉電阻使能,能夠進行配置

  4. TTL施密特觸發器使能

  5. 能夠經過讀輸入數據寄存器, 能夠獲得 I/O 的狀態

 

0二、管腳複用和重映射

管腳複用和重映射(實際上是一回事),STMF10X系列叫重映射,STMF20X系列叫管腳複用,也就是複用功能

2.一、STMF10X系列

STM32上有不少I/O口,也有不少的內置外設想I2C,ADC,ISP,USART等,爲了節省引出管腳,這些內置外設基本上是與I/O口共用管腳的,也就是I/O管腳的複用功能。可是STM32還有一特別之處就是:不少複用內置的外設的I/O引腳能夠經過重映射功能,從不一樣的I/O管腳引出,即複用功能的引腳是可經過程序改變的。

三個紅框交匯處.STM32F103VCT6這個CPU的USART1接的是PB6/PB7可是上電初始化後默認功能並不是是USART1.因此想要用串口功能.必須用端口重映射。

STM32的單片機每一個功能模塊有本身的時鐘系統,因此要想要調用STM32單片機的功能模塊時必須先配置對應時鐘,而後才能去操做相應的功能模塊.端口重映射也同樣.如圖示:

重映射步驟爲:

1.打開重映射時鐘和USART重映射後的I/O口引腳時鐘, 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);

2.I/O口重映射開啓.

GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

3.配製重映射引腳, 這裏只需配置重映射後的I/O,原來的不須要去配置.

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
 
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB,&GPIO_InitStructure);

2.一、STMF20X系列

STMF20X系列(包括以後的40系列)是沒有重映射的說法,只有統一的稱爲複用功能。

從上圖看出F10X系列會有專門的普通IO寄存器,會有複用寄存器,使用庫函數以下:

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)

 

 

 

從上圖F20X系列使用了複用功能寄存器,然不是像F10系列存在專門的複用寄存器,F20X系列GPIO複用的功能更廣。

備註:要先配置GPIO爲複用功能,再調用複用的庫函數

 

 

 0三、相關名詞解釋

GPIO模式名字解釋

 

 

 F20系列:GPIO共有四種功能​​​​​​​

typedef enum
{ 
  GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;

GPIO狀態

推輓輸出

能夠輸出強高低電平,鏈接數字器件。

開漏輸出

只能夠輸出強低電平,高電平須要外部電阻拉高,輸出端至關於三極管的集電極,要獲得高電平,須要上拉電阻,適合作電流型的驅動,其吸取電流negligence相對強(通常20ma之內)

高阻態

高阻態是一個數字電路里常見的術語,指的是電路的一種輸出狀態,既不是高電平也不是低電平,若是高阻態再輸入下一級電路的話,對下級電路無任何影響,和沒接同樣,若是用萬用表測的話有多是高電平也有多是低電平,隨它後面接的東西定的。若是設置爲浮空輸入,也就是既沒有上拉電阻,沒有下拉電阻。能夠認爲是高阻態。

 

點擊查看本文所在的專輯,STM32F207教程

相關文章
相關標籤/搜索