下文將根據STM32F207參考手的中GPIO框圖講解GPIO功能。緩存
帶FT的是說明能夠容忍5V電壓的,I/O電路框圖app
普通輸入模式下,上拉和下拉電阻(微弱)的存在,共分3種模式函數
浮空輸入,不使能上拉電阻,不使能下拉電阻ui
上拉輸入,使能上拉電阻spa
下拉輸入,使能下拉電阻3d
從上面框圖得知,輸出緩存是被禁止的code
普通輸入模式下,上拉和下拉電阻(微弱)的存在。主要是因爲P-MOS和N-MOS的存在分爲下列兩種模式blog
開漏模式:輸出寄存器是 0 時,激活 N-MOS, 而輸出寄存器是 1 時,端口保持高阻態(P-MOS 不會被使能)教程
推輓輸出: 輸出寄存器是 0 時,激活 N-MOS, 而輸出寄存器是 1 時,激活 P-MOS接口
從上面的框圖得知,
一、在普通輸出模式中,TTL施密特觸發器是打開的,因此讀輸入數據寄存器,能夠獲得 I/O 的狀態。
二、驅動GPIO輸出,咱們能夠採用輸出寄存器也可使用位段
模擬輸入上拉電阻和下拉電阻是沒有用的
高阻態下模擬輸入
從上面框圖得知
弱上拉和下拉電阻禁止
施密特觸發器停用,施密特觸發器輸出值強制爲0
輸出緩存被禁止
讀輸入數據期存器, 讀到的值爲0
注意:IO配置成模擬輸入時,不能容忍5V電壓
複用輸出框圖
從上圖框圖中能夠獲得5條信息
輸出緩存被來自外設的信號驅動(發送數據器使能和數據),也便是位設置/清除寄存器和輸出數據寄存器在這裏是無用的
因爲P-MOS和N-MOS使能,仍然能夠配置成推輓輸出和開漏輸出
上拉電阻和下拉電阻使能,能夠進行配置
TTL施密特觸發器使能
能夠經過讀輸入數據寄存器, 能夠獲得 I/O 的狀態
管腳複用和重映射(實際上是一回事),STMF10X系列叫重映射,STMF20X系列叫管腳複用,也就是複用功能
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);
STMF20X系列(包括以後的40系列)是沒有重映射的說法,只有統一的稱爲複用功能。
從上圖看出F10X系列會有專門的普通IO寄存器,會有複用寄存器,使用庫函數以下:
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
從上圖F20X系列使用了複用功能寄存器,然不是像F10系列存在專門的複用寄存器,F20X系列GPIO複用的功能更廣。
備註:要先配置GPIO爲複用功能,再調用複用的庫函數
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教程