日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機(jī)入門 >> 嵌入式系統(tǒng)學(xué)習(xí)——STM32之GPIO

嵌入式系統(tǒng)學(xué)習(xí)——STM32之GPIO

關(guān)鍵字:嵌入式 STM32 GPIO 作者:admin 來源:不詳 發(fā)布時(shí)間:2018-05-18  瀏覽:16

 STM32庫函數(shù)說明及示例(版本V1.4.0)

----第一篇:GPIO庫

文檔說明和約定:

該文檔主要是對STM32F4各個(gè)模塊的庫進(jìn)行翻譯和說明。文檔中加入了作者的一些理解,建議和小貼士。并且在文檔最后,加入了一些使用該庫模塊的案例。希望大家通過對該文檔的閱讀,可以更好的使用STM32的庫函數(shù)進(jìn)行學(xué)習(xí)和項(xiàng)目開發(fā)。之所以選用1.4.0版本進(jìn)行翻譯和說明,因?yàn)樵摪姹救罕娀A(chǔ)較好,有大量的使用者和相關(guān)資料。后續(xù)也會推出新版本庫和CubeMX庫的翻譯和說明,希望大家喜歡和支持。如果大家覺得文檔有什么問題,麻煩請?zhí)岢,如果確認(rèn)問題存在,作者會及時(shí)修改。

相關(guān)術(shù)語說明:

gpio:通用輸入輸出接口

gpio管腳:一個(gè)io管腳,這個(gè)管腳可以有多個(gè)配置。在庫函數(shù)中用GPIO_Pin_1這樣的宏定義表示

gpio端口(gpio分組):一組gpio管腳的信息。在庫函數(shù)中用宏定義GPIOA GPIOB等表示

1 gpio庫說明

庫文件名:stm32f4xx_gpio.c

文檔提示翻譯:

如何使用這個(gè)驅(qū)動(dòng)

(1) 使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函數(shù)使能GPIO的AHB總線時(shí)鐘。

(2) 使用GPIO_Init()函數(shù)對每個(gè)引腳進(jìn)行四種可能的配置

《1》 輸入狀態(tài):Floating(浮空), Pull-up(上拉), Pull-down(下拉)

《2》 輸出狀態(tài):Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉) or no Pull(不上拉也不下拉)),Open Drain(開漏) (Pull-up(上拉), Pull-down(下拉) or no Pull(不上拉也不下拉)),在輸出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ.

《3》 第二功能:上拉下拉和開漏

《4》 模擬:當(dāng)一個(gè)管腳被用作ADC通道或者DAC輸出的時(shí)候,需要配置成此模式

(3) 外設(shè)的第二功能:

《1》 在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN把需要的管腳配置成模擬模式

《2》 對于其它的管腳(定時(shí)器,串口等):

l 使用GPIO_PinAFConfig()函數(shù)把管腳和需要的第二功能進(jìn)行連接

l 使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF把需要的管腳配置成第二功能模式

l 通過成員變量GPIO_PuPd, GPIO_OType and GPIO_Speed選擇類型,上拉下拉和輸出速度

l 調(diào)用函數(shù)GPIO_Init()

(4) 在輸入模式,使用函數(shù)GPIO_ReadInputDataBit()得到配置好管腳的電平

(5) 在輸出模式,使用函數(shù)GPIO_SetBits()/GPIO_ResetBits()設(shè)置配置好IO的高低電平

(6) 在復(fù)位過程和剛剛復(fù)位后,第二功能是無效的,GPIO被配置成了輸入浮空模式(JTAG管腳除外)

(7) 當(dāng)LSE振蕩器關(guān)閉的時(shí)候,LSE振蕩器管腳OSC32_IN和OSC32_OUT可以作為通過IO來使用(分別用PC14和PC15表示)。LSE的優(yōu)先級高于GPIO函數(shù)

(8) 當(dāng)HSE振蕩器關(guān)閉的時(shí)候,HSE振蕩器管腳OSC_IN和OSC_OUT可以作為通用IO(PH0,PH1)來使用。HSE的優(yōu)先級高于GPIO函數(shù)。

2 具體函數(shù)說明

初始化和配置相關(guān)函數(shù)

1. void GPIO_DeInit(GPIO_TypeDef* GPIOx)

函數(shù)解釋:gpio的反初始化函數(shù),該函數(shù)的作用是把GPIO相關(guān)的寄存器配置成上電復(fù)位后的默認(rèn)狀態(tài),在第一次初始化前或者不再使用某一個(gè)接口后可以調(diào)用該函數(shù)。

函數(shù)參數(shù)說明:GPIOx:gpio的分組,如GPIOA GPIOB GPIOC等的宏定義(這些宏定義在頭文件stm32f4xx.h中,由廠家寫好,我們直接使用即可)

2. void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)

函數(shù)解釋:gpio的初始化函數(shù),該函數(shù)的作用是對io進(jìn)行初始化。

函數(shù)參數(shù)說明:(1)GPIOx:gpio的分組,如GPIOA GPIOB GPIOC等的宏定義。

(2)GPIO_InitStruct:gpio的初始化相關(guān)結(jié)構(gòu)體。該結(jié)構(gòu)體里面的成員變量決定了我們具體的初始化參數(shù)。以下進(jìn)行說明:

l GPIO_Pin:指定具體的IO腳,如GPIO_Pin_0 GPIO_Pin_1這樣的宏定義,這些宏由廠家寫好,我們直接使用即可。

l GPIO_Mode:指定gpio的模式,有以下四種模式:

GPIO_Mode_IN(輸入),GPIO_Mode_OUT(輸出),GPIO_Mode_AF(第二功能),GPIO_Mode_AN(模擬),可以直接使用這四種宏定義。

l GPIO_Speed:指定IO的最快翻轉(zhuǎn)速度,也就是當(dāng)使用IO產(chǎn)生頻率(如PWM)的最快速度。有以下四種速度的配置:

GPIO_Low_Speed (低速),GPIO_Medium_Speed(中等速度),GPIO_Fast_Speed(快速),GPIO_High_Speed(高速),可以直接使用這四種宏定義。

l GPIO_OType:指定選擇管腳的輸出類型,有以下兩種配置:

GPIO_OType_PP (推挽方式輸出),GPIO_OType_OD(開漏方式輸出),可以直接使用這兩種宏定義。

Tips:

推挽輸出:推挽輸出就是單片機(jī)引腳可以直接輸出高電平電壓。低電平時(shí)接地,高電平時(shí)輸出單片機(jī)電源電壓。這種方式可以不接上拉電阻。但如果輸出端可能會接地的話,這個(gè)時(shí)候輸出高電平可能引發(fā)單片機(jī)運(yùn)行不穩(wěn)定,甚至可能燒壞引腳。推挽方式的驅(qū)動(dòng)力更大。

開漏輸出:開漏輸出就是不輸出電壓,低電平時(shí)接地,高電平時(shí)不接地。如果外接上拉電阻,則在輸出高電平時(shí)電壓會拉到上拉電阻的電源電壓。這種方式適合在連接的外設(shè)電壓比單片機(jī)電壓低的時(shí)候。

l GPIO_PuPd。指定選擇管腳的上拉和下拉模式。有如下三種配置:

GPIO_PuPd_NOPULL(不上拉也不下拉),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)。Tips:這些都是IO的內(nèi)部上拉或者下拉模式,也可以接上拉和下拉電阻通過硬件進(jìn)行外部上拉和外部下拉。

3. void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)

函數(shù)解釋:gpio結(jié)構(gòu)體的初始化。對GPIO_InitStruct結(jié)構(gòu)體進(jìn)行默認(rèn)配置

函數(shù)參數(shù)說明:GPIO_InitStruct,直接傳入該結(jié)構(gòu)體的指針,在該函數(shù)內(nèi)會對結(jié)構(gòu)體進(jìn)行初始化。

4. void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函數(shù)解釋:鎖定gpio的寄存器,鎖定的寄存器是GPIOx_MODER,GPIOx_OTYPER, GPIOx_OSPEEDR,GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH。在下一次復(fù)位前,被鎖定的管腳不能被修改。

函數(shù)參數(shù)說明:GPIOx:gpio的分組(如GPIOA,GPIOB等)。GPIO_Pin:具體的gpio管腳(如GPIO_Pin_0 GPIO_Pin_1這樣的宏定義)

GPIO的讀寫函數(shù)

1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)

函數(shù)解釋:讀取io輸入管腳的值

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_Pin:具體的gpio管腳

函數(shù)返回值說明:輸入管腳的值Bit_SET(高電平) Bit_RESET(低電平)

2. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

函數(shù)解釋:讀取輸入io數(shù)據(jù),該函數(shù)用于讀取一個(gè)IO分組的所有數(shù)據(jù)

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口

函數(shù)返回值說明:一個(gè)io端口的所有數(shù)據(jù) (輸入狀態(tài))

3. uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)

函數(shù)解釋:讀取io輸出管腳的值

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_Pin:具體的gpio管腳

函數(shù)返回值說明:輸出管腳的值Bit_SET(高電平) Bit_RESET(低電平)

4. uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)

函數(shù)解釋:讀取輸出io分組/端口的值

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口

函數(shù)返回值說明:一個(gè)io端口的所有數(shù)據(jù) (輸出狀態(tài))

5. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函數(shù)解釋:對io管腳進(jìn)行置位(輸出高電平)。這個(gè)函數(shù)使用GPIOx_BSRR寄存器來實(shí)現(xiàn)原子讀或者修改操作。在這種情況下,在讀和修改訪問時(shí)發(fā)生一個(gè)IRQ中斷是沒有危險(xiǎn)的。

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_Pin:具體的gpio管腳或者是io管腳的組合

6. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函數(shù)解釋:對io管腳進(jìn)行復(fù)位(輸出低電平)。這個(gè)函數(shù)使用GPIOx_BSRR寄存器來實(shí)現(xiàn)原子讀或者修改操作。在這種情況下,在讀和修改訪問時(shí)發(fā)生一個(gè)IRQ中斷是沒有危險(xiǎn)的。

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_Pin:具體的gpio管腳或者是io管腳的組合

7. void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal)

函數(shù)解釋:對某一位進(jìn)行寫入操作

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_Pin:具體的gpio管腳;BitVal:寫入高電平或者低電平(Bit_RESET:寫入低電平 Bit_SET:寫入高電平)

8. void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

函數(shù)解釋:對gpio端口進(jìn)行寫入操作,適用于對統(tǒng)一端口的多個(gè)管腳的寫入

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口; BitVal:寫入高電平或者低電平(Bit_RESET:寫入低電平Bit_SET:寫入高電平)

9. void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

函數(shù)解釋:翻轉(zhuǎn)指定的gpio口,也就是說,如果當(dāng)前的io是低電平,則變成高電平,如果當(dāng)前io是高電平,則變成低電平

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_Pin:具體的gpio管腳。

Gpio復(fù)用功能配置函數(shù)

1. void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource,uint8_t GPIO_AF)

函數(shù)解釋:改變指定管腳的映射關(guān)系。即配置指定管腳的復(fù)用功能。

函數(shù)參數(shù)說明:GPIOx:gpio的分組/gpio端口;GPIO_PinSource:具體要配置成復(fù)用功能的管腳(如GPIO_Pin_0 GPIO_Pin_1這樣的宏定義);GPIO_AF:選擇該管腳要使用的復(fù)用功能。有如下配置:(注意:復(fù)用功能的配置要和實(shí)際管腳支持的復(fù)用功能匹配)

GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin toAF0 (default after reset)

GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2)to AF0 (default after reset)

GPIO_AF_TAMPER: Connect TAMPER pins(TAMPER_1 and TAMPER_2) to AF0 (default after reset)

GPIO_AF_SWJ: Connect SWJ pins (SWD andJTAG)to AF0 (default after reset)

GPIO_AF_TRACE: Connect TRACE pins to AF0(default after reset)

GPIO_AF_TIM1: Connect TIM1 pins to AF1

GPIO_AF_TIM2: Connect TIM2 pins to AF1

GPIO_AF_TIM3: Connect TIM3 pins to AF2

GPIO_AF_TIM4: Connect TIM4 pins to AF2

GPIO_AF_TIM5: Connect TIM5 pins to AF2

GPIO_AF_TIM8: Connect TIM8 pins to AF3

GPIO_AF_TIM9: Connect TIM9 pins to AF3

GPIO_AF_TIM10: Connect TIM10 pins to AF3

GPIO_AF_TIM11: Connect TIM11 pins to AF3

GPIO_AF_I2C1: Connect I2C1 pins to AF4

GPIO_AF_I2C2: Connect I2C2 pins to AF4

GPIO_AF_I2C3: Connect I2C3 pins to AF4

GPIO_AF_SPI1: Connect SPI1 pins to AF5

GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5

GPIO_AF_SPI4: Connect SPI4 pins to AF5

GPIO_AF_SPI5: Connect SPI5 pins to AF5

GPIO_AF_SPI6: Connect SPI6 pins to AF5

GPIO_AF_SAI1: Connect SAI1 pins to AF6 forSTM32F42xxx/43xxx devices.

GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6

GPIO_AF_I2S3ext: Connect I2S3ext pins toAF7

GPIO_AF_USART1: Connect USART1 pins to AF7

GPIO_AF_USART2: Connect USART2 pins to AF7

GPIO_AF_USART3: Connect USART3 pins to AF7

GPIO_AF_UART4: Connect UART4 pins to AF8

GPIO_AF_UART5: Connect UART5 pins to AF8

GPIO_AF_USART6: Connect USART6 pins to AF8

GPIO_AF_UART7: Connect UART7 pins to AF8

GPIO_AF_UART8: Connect UART8 pins to AF8

GPIO_AF_CAN1: Connect CAN1 pins to AF9

GPIO_AF_CAN2: Connect CAN2 pins to AF9

GPIO_AF_TIM12: Connect TIM12 pins to AF9

GPIO_AF_TIM13: Connect TIM13 pins to AF9

GPIO_AF_TIM14: Connect TIM14 pins to AF9

GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10

GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10

GPIO_AF_ETH: Connect ETHERNET pins to AF11

GPIO_AF_FSMC: Connect FSMC pins to AF12

GPIO_AF_FMC: Connect FMC pins to AF12 forSTM32F42xxx/43xxx devices.

GPIO_AF_OTG_HS_FS: Connect OTG HS(configured in FS) pins to AF12

GPIO_AF_SDIO: Connect SDIO pins to AF12

GPIO_AF_DCMI: Connect DCMI pins to AF13

GPIO_AF_LTDC: Connect LTDC pins to AF14 forSTM32F429xx/439xx devices.

GPIO_AF_EVENTOUT: Connect EVENTOUT pins toAF15

代碼示例:

示例一:把gpioa6配置成輸出管腳,并配置成高電平

GPIO_InitTypeDefGPIO_InitStruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;

GPIO_InitStruct.GPIO_Mode= GPIO_Mode_OUT;

GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;

GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_SetBits(GPIOA,GPIO_Pin_6);

示例二:把gpioe4配置成輸入

GPIO_InitTypeDefGPIO_InitStruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_4;

GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN;

GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;

GPIO_Init(GPIOE,&GPIO_InitStruct);

示例三:配置復(fù)用功能 PA9 PA10 配置成串口1的收發(fā)接口

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA時(shí)鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時(shí)鐘

//串口1對應(yīng)引腳復(fù)用映射

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9復(fù)用為USART1

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10復(fù)用為USART1

//USART1端口配置

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9與GPIOA10

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//復(fù)用功能

GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; //速度50MHz

GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽復(fù)用輸出

GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA9,PA10

編輯:admin  最后修改時(shí)間:2018-05-18

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

高台县| 新蔡县| 惠州市| 普兰店市| 临沭县| 江西省| 淳安县| 汕尾市| 舒兰市| 阿拉尔市| 柞水县| 南雄市| 湖口县| 大城县| 红安县| 泰来县| 余庆县| 曲沃县| 宝鸡市| 乌拉特前旗| 武城县| 白朗县| 喀喇| 孟村| 滨海县| 镇平县| 罗田县| 重庆市| 台中县| 玛纳斯县| 崇仁县| 龙海市| 龙口市| 汉沽区| 沙田区| 镇坪县| 佛冈县| 双流县| 高邮市| 临夏市| 长岛县|