(完整)STM32中使用GPIO的总结(超强),推荐文档
gpio实验报告总结
GPIO实验报告总结一、实验目的与背景本次GPIO实验的主要目的是深入了解GPIO(General Purpose Input/Output)接口的工作原理和应用,通过实际操作和数据分析,提高对嵌入式系统硬件接口的理解和掌握。
实验背景是基于当前嵌入式系统在各种应用中的普及,GPIO 接口作为其中重要的硬件接口,对于理解嵌入式系统的运作方式具有重要意义。
二、GPIO基础知识GPIO接口是一种通用输入输出接口,它允许CPU与外部设备或传感器进行通信。
通过设置GPIO引脚的电平状态,CPU可以向外部设备发送数据,同时也可以接收外部设备发送的数据。
在嵌入式系统中,GPIO接口被广泛应用于各种硬件设备的控制和数据采集。
三、实验设备与工具本次实验使用的设备包括开发板、杜邦线、电源适配器、串口调试工具等。
其中,开发板提供了丰富的GPIO接口和外设接口,方便我们进行实验操作。
串口调试工具用于实时监控和调试实验过程。
四、实验步骤与操作连接实验设备:将开发板与电源适配器连接,为开发板提供稳定的电源。
使用杜邦线连接开发板的GPIO接口和外设接口,确保连接可靠。
编写程序:根据实验要求,编写相应的程序代码。
在程序中,我们需要配置GPIO引脚的工作模式(输入或输出),并控制引脚的电平状态进行数据传输。
下载程序:将程序代码下载到开发板中,启动程序。
实验操作:通过串口调试工具观察程序的运行状态和GPIO引脚的电平变化。
根据实验要求,进行相应的操作,如读取传感器数据、控制外部设备等。
记录数据:在实验过程中,记录关键步骤的实验数据和结果,以便后续分析和解释。
五、实验数据与结果通过实验操作,我们获得了以下数据和结果:GPIO引脚配置成功,可以正常工作在输入或输出模式。
通过GPIO接口成功读取了传感器数据,数据准确无误。
通过GPIO接口成功控制了外部设备,实现了预期的功能。
在实验过程中,记录了详细的实验数据和结果,包括GPIO引脚的电平状态、传感器数据、外部设备控制状态等。
stm32GPIO口工作原理详细解释
STM32的GPIO介绍STM32引脚说明GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。
GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。
通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。
STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复用和重映射(AFIO辅助功能时钟)中有详细的介绍。
GPIO基本结构每个GPIO内部都有这样的一个电路结构,这个结构在本文下面会具体介绍。
这边的电路图稍微提一下:保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。
当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。
P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。
这里的电路会在下面很详细地分析到。
TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。
但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。
ADC外设要采集到的原始的模拟信号。
这里需要注意的是,在查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V 的;如果没有标注“FT”,就代表着不兼容5V。
STM32关于GPIO与AFIO的总结20130709
GPIO功能描述每个GPI/O 端口有两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR 和GPIOx_ODR),一个32位置位/ 复位寄存器(GPIOx_BSRR) ,一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR) 。
根据数据手册中列出的每个I/O 端口的特定硬件特征,GPIO 端口的每个位可以由软件分别配置成多种模式。
─输入浮空─输入上拉─输入下拉─模拟输入─开漏输出─推挽式输出─推挽式复用功能─开漏复用功能每个I/O 端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问( 不允许半字或字节访问) 。
GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/ 更改的独立访问;这样,在读和更改访问之间产生IRQ 时不会发生危险。
推挽与开漏推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).单独的位设置或位清除当对GPIOx_ODR 的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改一个或多个位。
这是通过对“置位/ 复位寄存器”(GPIOx_BSRR ,复位是GPIOx_BRR) 中想要更改的位写’1’来实现的。
没被选择的位将不被更改。
外部中断/唤醒线所有端口都有外部中断能力。
为了使用外部中断线,端口必须配置成输入模式。
复用功能(AF)使用默认复用功能前必须对端口位配置寄存器编程。
●对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动注意:也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对GPIO控制器编程来实现。
gpio实验报告
gpio实验报告GPIO实验报告引言:GPIO(General Purpose Input/Output)是通用输入/输出引脚的简称,是一种常用的数字接口技术。
在嵌入式系统和电子设计中,GPIO被广泛应用于与外部设备进行数据交互的过程中。
本实验报告将介绍GPIO的原理、应用以及实验过程和结果。
一、GPIO的原理和应用1.1 GPIO的原理GPIO是一种数字接口技术,通过控制电压的高低来实现数据输入和输出。
在嵌入式系统中,GPIO通常由微控制器或单片机提供,可以通过编程来控制GPIO 的状态。
GPIO引脚通常具有输入和输出两种模式,可以根据需要进行配置。
1.2 GPIO的应用GPIO在嵌入式系统和电子设计中有广泛的应用。
例如,可以使用GPIO将传感器的数据输入到微控制器,实现数据采集和处理;同时,也可以使用GPIO将微控制器的计算结果输出到执行器,实现控制功能。
此外,GPIO还可以用于控制LED灯、蜂鸣器等外部设备,实现各种交互效果。
二、实验过程和结果2.1 实验准备在进行GPIO实验之前,我们需要准备以下材料:- 一块可编程的嵌入式开发板- 杜邦线- LED灯- 电阻2.2 实验步骤1. 将LED灯的长脚连接到开发板的GPIO引脚上,短脚连接到电阻上,再将电阻的另一端连接到开发板的地线上。
2. 打开开发板的开发环境,创建一个新的项目。
3. 在项目中编写代码,配置GPIO引脚为输出模式。
4. 在代码中控制GPIO引脚的电平,使LED灯点亮。
5. 将代码下载到开发板上,观察LED灯是否亮起。
2.3 实验结果经过实验,我们成功地控制了GPIO引脚,使LED灯点亮。
这验证了GPIO的工作原理和应用。
三、实验总结通过本次实验,我们了解了GPIO的原理和应用,并成功地进行了实验验证。
GPIO作为一种常用的数字接口技术,在嵌入式系统和电子设计中具有重要的作用。
掌握GPIO的使用方法,可以实现与外部设备的数据交互和控制功能。
使用HAL库开发STM32GPIO口基础使用与外部中断
使用HAL库开发STM32GPIO口基础使用与外部中断GPIO(General Purpose Input/Output)是STM32系列微控制器上常见的功能模块之一,它用于与外部设备进行数据交互。
本文主要介绍如何使用HAL库来配置和使用STM32的GPIO口,并实现外部中断功能。
在使用GPIO口之前,我们首先需要了解STM32芯片上的GPIO引脚的命名方式。
以STM32F103C8T6为例,它具有32个GPIO引脚,从PA0到PA15和PB0到PB15、其中,GPIO口的命名方式为"A"加上引脚的编号。
例如,PA0表示GPIOA的第0个引脚,PB10表示GPIOB的第10个引脚。
1.引入头文件和宏定义首先,在代码文件的顶部引入"stm32f1xx_hal.h"头文件。
然后,在需要使用GPIO功能的地方,定义一个GPIO_InitTypeDef结构体变量,并通过它来配置GPIO的参数。
2.配置GPIO模式和速度在设置GPIO口之前,需要配置GPIO的模式和速度。
通过设置GPIO_InitStruct结构体变量的对应成员变量来实现。
例如,要将PA5配置为推挽输出模式,可以使用如下语句:```GPIO_InitStruct.Pin = GPIO_PIN_5;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);```这里,GPIO_PIN_5表示PA5引脚,GPIO_MODE_OUTPUT_PP表示推挽输出模式,GPIO_SPEED_FREQ_HIGH表示高速模式。
3.配置GPIO引脚在配置好GPIO模式和速度后,可以通过HAL_GPIO_Init函数来配置GPIO引脚,并进行初始化。
gpio实验心得
gpio实验心得一、引言GPIO(General Purpose Input/Output)是通用的输入输出引脚,广泛应用于各种嵌入式系统和电子设备中。
通过对GPIO的实验,我深入了解了它的原理和应用,并从中收获了一些心得体会。
二、GPIO的原理和基本概念2.1 GPIO的定义和功能GPIO是一种通用的数字输入输出引脚,它可以通过软件控制来实现输入和输出功能。
GPIO引脚可以作为输入引脚接收外部信号,也可以作为输出引脚发送信号给外部设备。
2.2 GPIO的工作原理GPIO是通过寄存器来控制的,通过对寄存器的读写操作,可以改变GPIO引脚的状态。
GPIO引脚可以配置为输入模式或输出模式,输入模式下可以读取外部信号的状态,输出模式下可以发送信号给外部设备。
2.3 GPIO的应用场景GPIO广泛应用于各种嵌入式系统和电子设备中,例如单片机开发、物联网设备、传感器和执行器的控制等。
通过GPIO可以与外部设备进行通信和控制,实现各种功能。
三、GPIO的实验步骤和实验结果3.1 实验准备在进行GPIO实验之前,我们需要准备一些硬件设备和软件工具。
硬件方面,我们需要一块开发板和相关的连接线;软件方面,我们需要一个GPIO编程的开发环境。
3.2 实验步骤1.连接硬件设备:将开发板和计算机通过USB线连接,并将其他需要的设备连接到GPIO引脚上。
2.配置开发环境:安装GPIO编程的开发环境,并进行相应的配置。
3.编写程序:使用GPIO编程的开发环境,编写程序来控制GPIO引脚的输入和输出。
4.编译和下载:将程序编译成可执行文件,并下载到开发板上。
5.运行实验:通过触发输入信号或发送输出信号,观察实验结果。
3.3 实验结果在进行GPIO实验的过程中,我成功地实现了一些功能,例如读取外部开关的状态、控制LED的亮灭等。
通过实验,我对GPIO的原理和应用有了更深入的理解,并且掌握了GPIO编程的基本技巧。
四、GPIO实验的心得体会4.1 学习了硬件和软件的结合GPIO实验需要将硬件设备和软件编程结合起来,通过编写程序来控制硬件设备的状态。
stm32 gpio中断 引脚 电平状态
标题:STM32 GPIO中断引脚电平状态分析与应用一、概述STM32是一款广泛应用于嵌入式系统的芯片,并且具有丰富的外设功能。
在实际应用中,GPIO中断引脚的电平状态对于系统的稳定性和可靠性至关重要。
本文将以STM32 GPIO中断引脚电平状态为主题,分析其原理和应用。
二、STM32 GPIO中断1. 概述STM32芯片具有丰富的GPIO外设,可以方便地实现对外部事件的响应。
其中,GPIO中断是一种常用的外部事件触发机制,通过配置GPIO中断引脚可以实现对外部信号的实时监测和响应。
2. 原理GPIO中断引脚与外部信号相连,当外部信号发生变化时,引脚的电平状态也会相应改变。
通过配置中断触发条件和中断处理函数,可以实现对外部信号的及时响应。
3. 应用在实际应用中,GPIO中断可以用于监测外部开关、传感器等设备的状态变化,以及实现对设备的控制和调度。
通过合理配置中断引脚和中断处理函数,可以提高系统的稳定性和可靠性。
三、GPIO中断引脚的电平状态1. 低电平触发当GPIO中断引脚的电平由高变低时,触发中断。
这种触发方式适用于外部信号为低电平有效的场景,例如按键开关、传感器触发等。
2. 高电平触发当GPIO中断引脚的电平由低变高时,触发中断。
这种触发方式适用于外部信号为高电平有效的场景,例如光电传感器、红外遥控器等。
3. 双边沿触发当GPIO中断引脚的电平由低变高或由高变低时,均触发中断。
这种触发方式适用于外部信号为双边沿触发的场景,例如旋转编码器、电机霍尔传感器等。
四、GPIO中断引脚电平状态的配置与实现1. 配置在STM32芯片中,通过配置GPIO中断引脚的模式、触发条件和中断优先级等参数,可以实现对中断的灵活控制。
具体配置方法可以参考STM32的冠方文档和相关资料。
2. 实现在实际应用中,可以通过编写中断处理函数,实现对中断事件的响应和处理。
在中断处理函数中,可以根据中断引脚的电平状态进行相应的逻辑判断和操作,实现对外部信号的实时监测和控制。
gpio实验心得
gpio实验心得
GPIO实验心得
GPIO是指通用输入输出端口,是单片机中非常重要的一个部分。
在学习单片机的过程中,GPIO的实验是必不可少的一部分。
在我的学习过程中,我也进行了一些GPIO实验,下面是我的心得体会。
GPIO实验需要我们掌握一些基本的电路知识,比如电阻、LED等。
在实验中,我们需要将这些元件与单片机的GPIO口连接起来,才能进行实验。
因此,我们需要了解这些元件的特性,以及如何正确地连接它们。
GPIO实验需要我们掌握一些基本的编程知识。
在实验中,我们需要编写程序来控制GPIO口的状态,比如将GPIO口设置为输出模式,然后将其输出高电平或低电平。
因此,我们需要了解如何编写简单的程序,并且需要了解一些基本的语法和函数。
GPIO实验需要我们具备一定的实验能力。
在实验中,我们需要正确地连接电路,编写正确的程序,并且需要进行一些调试工作。
因此,我们需要具备一定的实验经验和实验能力,才能顺利地完成GPIO实验。
总的来说,GPIO实验是一项非常重要的实验,它可以帮助我们更好地了解单片机的工作原理,掌握一些基本的电路知识和编程知识,提高我们的实验能力。
在我的学习过程中,我通过GPIO实验,不
仅学到了很多知识,还提高了我的实验能力和动手能力。
因此,我认为GPIO实验是非常有意义的,值得我们认真学习和探索。
推荐-第4章 stm32单片机通用输入输出GPIO 精品
为了使不同器件封装的外设IO功能的数量达到最优,可以把一些复用 功能重新映射到其它一些引脚上,这可以通过软件配置相应的寄存器 来完成。
USART3_TX 的默认引出脚是 PB10, USART3_RX 的默认引出脚是 PB11;重映射 后,USART3_TX 的引出脚为 PD8,变更 USART3_RX 的引出脚为PD9
STM32 引脚
PC口 16脚 PD口 3脚
PA口 16脚
PB口 16脚
STM32F103RBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 51个I/O管脚: PA口 16脚+ PB口16脚+ PC口16脚+ PD口3脚。
4.1 STM32F10x的输入/输出基本结构
4.2 GPIO相关功能寄存器
STM32单片机 最多有7个16位的并行 I/O端口: PA、PB、PC、PD、PE、PF、PG。
STM32F103Cx、103Rx单片机 只有4个16位的 并行 I/O端口:PA、PB、PC、PD。
STM32 引脚
PC口 3脚 PD口 2脚
PA口 16脚
PB口 16脚
STM32F103CBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。
STM32F10x处理器的每个GPIO端口都对应有: 2个32位配置寄存器(GPIOx-CRL,GPIOx-CRH) 2个32位数据寄存器(GPIOx-IDR,GPIOx-ODR) 1个32位置位/复位寄存器(GPIOx-BSRR) 1个16位复位寄存器(GPIOx-BRR) 1个32位锁定寄存器(GPIOx-LCKR)
STM32F4学习笔记之GPIO(使用固件库)
1.使能GPIO的AHB时钟,使用函数:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);2.配置GPIO工作模式用GPIO_Init()函数数据类型说明typedef struct{uint32_t GPIO_Pin; //引脚配置GPIOMode_TypeDef GPIO_Mode; //GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF (备用),GPIO_Mode_AN(模拟)GPIOSpeed_TypeDef GPIO_Speed;// GPIO_Speed_2MHz,GPIO_Speed_25MHz,GPIO_Speed_50MHz,GPIO_Speed_100MHzGPIOOType_TypeDef GPIO_OType; // GPIO_OType_PP(推挽),GPIO_OType_OD(开漏)GPIOPuPd_TypeDef GPIO_PuPd; GPIO_PuPd_NOPULL(无),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)}GPIO_InitTypeDef;3.备用功能配置(除ADC和DAC外的所有非GPIO功能),使用函数void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)* This GPIO_AF can be one of the following values:* @arg GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin to AF0 (default after reset)* @arg GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset)* @arg GPIO_AF_TAMPER: Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset)* @arg GPIO_AF_SWJ: Connect SWJ pins (SWD and JTAG)to AF0 (default after reset)* @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset)* @arg GPIO_AF_TIM1: Connect TIM1 pins to AF1* @arg GPIO_AF_TIM2: Connect TIM2 pins to AF1* @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2* @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2* @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2* @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3* @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3* @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3* @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3* @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4* @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4* @arg GPIO_AF_I2C3: Connect I2C3 pins to AF4* @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5* @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5* @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6* @arg GPIO_AF_I2S3ext: Connect I2S3ext pins to AF7* @arg GPIO_AF_USART1: Connect USART1 pins to AF7* @arg GPIO_AF_USART2: Connect USART2 pins to AF7* @arg GPIO_AF_USART3: Connect USART3 pins to AF7* @arg GPIO_AF_UART4: Connect UART4 pins to AF8* @arg GPIO_AF_UART5: Connect UART5 pins to AF8* @arg GPIO_AF_USART6: Connect USART6 pins to AF8* @arg GPIO_AF_CAN1: Connect CAN1 pins to AF9* @arg GPIO_AF_CAN2: Connect CAN2 pins to AF9* @arg GPIO_AF_TIM12: Connect TIM12 pins to AF9* @arg GPIO_AF_TIM13: Connect TIM13 pins to AF9* @arg GPIO_AF_TIM14: Connect TIM14 pins to AF9* @arg GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10* @arg GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10* @arg GPIO_AF_ETH: Connect ETHERNET pins to AF11* @arg GPIO_AF_FSMC: Connect FSMC pins to AF12* @arg GPIO_AF_OTG_HS_FS: Connect OTG HS (configured in FS) pins to AF12* @arg GPIO_AF_SDIO: Connect SDIO pins to AF12* @arg GPIO_AF_DCMI: Connect DCMI pins to AF13* @arg GPIO_AF_EVENTOUT: Connect EVENTOUT pins to AF154.使用GPIO_ReadInputData(GPIO_TypeDef* GPIOx)和GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读输入信号5.使用GPIO_SetBits()/GPIO_ResetBits()设置输出引脚6.上电或复位后,引脚备用功能都没启用(JTAG引脚除外),为悬浮输入状态7.LSE引脚OSC32_IN 和OSC32_OUT(PC14 and PC15)的优先级高于GPIO8.HSE引脚OSC_IN/OSC_OUT (PH0 / PH1)的优先级高于GPIO例程:int main(void){GPIO_InitTypeDef GPIO_InitStructure;/* GPIOG Periph clock enable */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOD, GPIO_Pin_12);GPIO_ResetBits(GPIOD, GPIO_Pin_13);while (1){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0){GPIO_SetBits(GPIOD, GPIO_Pin_13);GPIO_ResetBits(GPIOD, GPIO_Pin_12);}else{GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_13);}}}。
最全的STM32八种IO口模式讲解(已经标注,新手必备)
以及上拉输入、下拉输入、浮空输入、模拟输入的区别最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mode_AF_PP 复用推挽输出对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。
因此,在这里做一个总结:推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。
高低电平由IC的电源低定。
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
推拉式输出级既提高电路的负载能力,又提高开关速度。
详细理解:如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。
对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。
当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。
这样一来,输出高低电平时,VT3 一路和VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。
又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。
因此,推拉式输出级既提高电路的负载能力,又提高开关速度。
STM32实验-GPIO输出-流水灯实验报告
通过一个经典的跑马灯程序,了解STM32F1的IO口作为输出使用的方法。通过代码控制开发板上的4个LED灯交替闪烁,实现类似跑马灯的效果。
2.实验内容
工程文件建立、程序的调试,编译、jlink驱动的安装与配置、程序下载、实验结果验证。
3.实验环境
Windouws10 Keil uVision5
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
实验日期:2018年10月18日
成绩评定
教师签名:
年月日
Welcome To
Download !!!
2018年10月18日姓名学号班级指导老师课程名称嵌入式系统原理与应用实验成绩实验名称gpio输出流水灯1实验目的通过一个经典的跑马灯程序了解stm32f1的io口作为输出使用的方法
课程实验报告
学院:专业:2018年10月18日
姓名
学号
班级
指导老师
课程名称
嵌入式系统原理与应用实验
成
绩
实验名称
GPIO输出-流水灯
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_Init(GPIOC, &GPIO_InitStructure);
4. 实验方法和步骤(含设计)
(1)实验硬件连接图
STM32 GPIO教程
系统外设
GPIO特性
最大封装(64引脚)上多达55个多功能双向GPIO(GPIO 引脚占有率相比STM32F1系列的80%更增加到86%) 几乎所有GPIO都是5V容忍(ADC引脚除外) GPIO分布在5个端口上:GPIOA[0~15]、GPIOB[0~15]、 GPIOC[0~15]、GPIOD[0~2]、GPIOF[4~7] 使用BSRR和BRR寄存器可以完成对引脚的原子置位和 复位操作 GPIO连在AHB总线,使得最高翻转速度高达12MHz 输出斜率可配置,高达50MHz 端口A和B上的引脚配置可通过LCKR寄存器锁定 55个引脚都可以配置成外部中断(可同时使能16个) 来把MCU从停止模式唤醒
I2C1端口支持1MHz超快速总线【FTf】
PB6/7 (I2C1_SCL/SDA) PB8/9 (I2C1_SCL/SDA)
其余端口都是5V容忍【FT】
10
Quiz
How many I/Os and ports there are in the STM32F0xx microcontroller ? ____________
可编程复用开关使得任意时刻只有一个外设连到 某个具体的GPIO。只有GPIOA和GPIOB有复用开关 某些外设功能还可以重映射到其他引脚,从而使 得能同时使用的外设数量更多
AF0 (SPI1_MISO) AF1 (TIM3_CH1) AF2 (TIM1_BKIN) Pin x (0…7)
AF7 (COMP1_OUT)
Output Driver
VSS
Push-Pull Open Drain
* In output mode, the I/O speed is configurable through OSPEEDR register: 2MHz, 10MHz or 50MHz
STM32IO口函数GPIO使用说明
STM32IO口函数GPIO使用说明STM32是一款广泛使用的32位单片机,具有丰富的外设资源,其中之一就是IO(Input/Output)口。
IO口是STM32与外部世界进行通信的接口,本文将对如何使用STM32IO口函数GPIO进行详细说明。
GPIO是通用输入输出口,可以配置为输入或输出,可以连接到各种外部设备如按钮、开关、LED等。
STM32提供了一系列GPIO口,如GPIOA、GPIOB等。
每个GPIO口有多个引脚可供选择,如GPIOA口有GPIO_Pin_0到GPIO_Pin_15共16个引脚。
在使用IO口之前,需要初始化IO口的设置,包括如下步骤:1.选择GPIO口:选择需要操作的GPIO口,如GPIOA或GPIOB。
2.配置引脚模式:确定所需的引脚模式,如输入、输出或复用模式。
3.配置引脚输出类型:如果选择输出模式,需要确定输出类型,如推挽输出或开漏输出。
4.配置引脚速度:确定引脚的传输速度。
5.配置引脚上拉/下拉:确定引脚是否需要上拉或下拉电阻。
6.配置引脚复用功能:如果选择复用模式,配置引脚使用的功能。
以下为具体的GPIO函数说明:1. GPIO_InitTypeDef:GPIO初始化结构体,包含需要配置的GPIO口、引脚模式、输出类型、速度、上拉/下拉等信息。
- 参数:GPIO_TypeDef* GPIOx:需要初始化的GPIO口;uint16_t GPIO_Pin: 需要初始化的引脚。
2. GPIO_Pin_0到GPIO_Pin_15:宏定义,用于选择要配置的引脚。
3. GPIO_Mode:引脚模式枚举类型,包括输入模式(GPIO_Mode_IN)、输出模式(GPIO_Mode_OUT)和复用功能模式(GPIO_Mode_AF)。
4. GPIO_Speed:引脚速度枚举类型,包括低速(GPIO_Speed_2MHz)、中速(GPIO_Speed_10MHz)和高速(GPIO_Speed_50MHz)。
GPIO使用总结
GPIO使⽤总结⼀、GPIO重要概念要想操作GPIO引脚,需要先把所⽤引脚配置成GPIO功能,这个通过pinctrl⼦系统来实现。
然后可以根据设置的引脚的⽅向来读取引脚的值和设置输出值。
GPIO⼦系统存在之前,我们驱动需要在代码中配置寄存器来使⽤GPIO引脚。
再BSP⼯程师实现好GPIO⼦系统后,我们就可以在设备树中指定GPIO引脚,在驱动中使⽤GPIO⼦系统的标准函数来获取GPIO、设置GPIO⽅向、读取/设置GPIO的值。
这样的驱动代码是于单板⽆关的。
⼆、GPIO内核相关⽂档Documentation\devicetree\bindings\pinctrl\pinctrl-bindings.txtDocumentation\gpio\gpio.txtDocumentation\devicetree\bindings\gpio\gpio.txt三、GPIO设备树配置1. BSP⼯程师实现的gpio驱动,驱动⼯程师直接在设备树中配置使⽤。
//client节点device {led-gpios = <组, 哪个⼏个,flag>; //"组"是必须要有的元素,为gpio控制器的描述,这⾥除了组之外还有⼏个域是由组中的#gpio-cells的值决定的。
};//service端,设备树中对⼀个gpio控制器的表⽰:gpio1 {......gpio-controller;#gpio-cells = <2>; //表⽰client使⽤gpio1这⼀组中的某个引脚时,除了组之外还需要使⽤2个整数来表⽰。
};2. 举个例⼦:foo_device {compatible = "acme,foo";......led-gpios = <&gpio 15 GPIO_ACTIVE_HIGH> /*red*///⼀般这⾥可能为&gpioX<&gpio 16 GPIO_ACTIVE_HIGH> /*green*/<&gpio 17 GPIO_ACTIVE_HIGH>; /*blue*/power-gpios = <&gpio, 1 GPIO_ACTIVE_LOW>; //注意这⾥使⽤了avtive_low属性了};驱动代码中:gpiod_get_index(dev, "led", 0, GOIOD_OUT_HIGH); //取出设备树中名为led的gpio中的第0个引脚,也就是red。
STM32中使用GPIO的总结(超强)
STM32 GPIO使用操作步骤:1.使能GPIO对应的外设时钟例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);2.声明一个GPIO_InitStructure结构体例如:GPIO_InitTypeDef GPIO_InitStructure;3.选择待设置的GPIO管脚例如:/* 选择待设置的GPIO第7、8、9管脚位,中间加“|”符号 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;4.设置选中GPIO管脚的速率例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz5.设置选中GPIO管脚的模式例如:/* 设置选中GPIO管脚的模式为开漏输出模式*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX例如:/* 根据GPIO_InitStructure中指定的参数初始化外设GPIOC */ GPIO_Init(GPIOC, &GPIO_InitStructure);7.其他应用例:将端口GPIOA的第10、15脚置1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);例:将端口GPIOA的第10、15脚置0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);GPIO寄存器:寄存器描述CRL 端口配置低寄存器CRH 端口配置高寄存器IDR 端口输入数据寄存器ODR 端口输出数据寄存器BSRR 端口位设置/复位寄存器BRR 端口位复位寄存器LCKR 端口配置锁定寄存器EVCR 事件控制寄存器MAPR 复用重映射和调试I/O 配置寄存器EXTICR 外部中断线路0-15配置寄存器GPIO库函数:函数名描述GPIO_DeInit 将外设GPIOx寄存器重设为缺省值GPIO_AFIODeInit 将复用功能(重映射事件控制和EXTI设置)重设为缺省值GPIO_Init 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器GPIO_StructInit 把GPIO_InitStruct中的每一个参数按缺省值填入GPIO_ReadInputDataBit 读取指定端口管脚的输入GPIO_ReadInputData 读取指定的GPIO端口输入GPIO_ReadOutputDataBit 读取指定端口管脚的输出GPIO_ReadOutputData 读取指定的GPIO端口输出GPIO_SetBits 设置指定的数据端口位GPIO_ResetBits 清除指定的数据端口位GPIO_WriteBit 设置或者清除指定的数据端口位GPIO_Write 向指定GPIO数据端口写入数据GPIO_PinLockConfig 锁定GPIO管脚设置寄存器GPIO_EventOutputConfig 选择GPIO管脚用作事件输出GPIO_EventOutputCmd 使能或者失能事件输出GPIO_PinRemapConfig 改变指定管脚的映射GPIO_EXTILineConfig 选择GPIO管脚用作外部中断线路库函数:函数GPIO_DeInit功能描述:将外设GPIOx寄存器重设为缺省值例:GPIO_DeInit(GPIOA);函数GPIO_AFIODeInit功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值例:GPIO_AFIODeInit();函数GPIO_Init功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器例:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitTypeDef structureGPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:typedef struct{u16 GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;GPIO_Pin该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。
嵌入式 STM32的GPIO系统
对A5 功能锁定: GPIOA->LCKR |= 1<<5; GPIOA->LCKR |= 1<<16; GPIOA->LCKR &= ~(1<<16); GPIOA->LCKR |= 1<<16; while(GPIOA->LCKR & 1<<16); while(!(GPIOA->LCKR & 1<<16));
uint32_t *PA12_Output; PA12_Output = (uint32_t *) (0x42000000 + (0x4001080c-0x40000000)*32 +12*4); (*PA12_Output) = 0; (*PA12_Output) = 1;
应用
为简化位带操作,也可以定义一些宏。 #define BitBand(Addr,BitNo)
寄存器32个位
Bit31 Bit30 Bit29
Bit2 Bit1 Bit0
32个对应地址
Address31 Address30 Address29
Address2 Address1 Address 0
位带区:支持位带操作的地址区 位带别名区:对别名地址的访问最终作用到位带区
的访问上
下图从另一个侧面演示比特的膨胀对应关系
应用
GPIOA->ODR &= ~(1<<12);//output 0 from PA12; GPIOA->ODR |= 1<<12; //output 1 from PA12;
GPIO使用总结
GPIO使用总结
一、GPIO介绍
GPIO(General Purpose Input/Output,通用输入输出)是指有源半
导体器件上的一组特定的可编程引脚,可以被编程设置为输入或输出,用
于控制相应的状态或者作为触发信号或接收信号。
它可以为系统提供对外
部硬件设备的控制能力。
GPIO模块中的引脚可以被控制以提供输入或输出功能,可以连接外
部设备,可以用它控制设备的开关、驱动智能设备、触发断言、控制LED、控制传感器或触发外部时序运行。
二、GPIO应用
1.控制开关:GPIO引脚可以控制外部继电器、直流电机或其他电子
设备的动作,如关闭或打开电源、启动和停止电机、控制家电等。
2.驱动智能设备:GPIO引脚可以控制智能设备,如门锁等,以便监
控室内外的环境变化,控制设备的操作,连接传感器等。
3.控制LED:GPIO引脚可以用来控制LED灯的亮和暗,并可根据外
部条件变化调整灯光的强度和颜色。
4.控制传感器:GPIO引脚可以控制传感器,从而实现环境监测、室
内外空气质量检测和温度测量等。
5.控制外部时序:GPIO引脚可以控制外部设备的时序运行,以便实
现控制其中一种特定设备的运行和停止或定时启动和关闭。
三、GPIO的连接
GPIO的连接一般采用电阻或继电器来连接。
STM32GPIO详细篇(基于HAL库)
STM32GPIO详细篇(基于HAL库)⼀、基础认识GPIO全名为General Purpose Input Output,即通⽤输⼊输出。
有时候简称为“IO⼝”。
通⽤,说明它是常见的。
输⼊输出,就是说既能当输⼊⼝使⽤,⼜能当输出⼝使⽤。
端⼝,就是元器件上的⼀个引脚。
输⼊模式和输出模式是GPIO的基本特性,当然GPIO还有其它模式可选。
(⼀) IO耐压问题STM32是⼀款3.3V电压的芯⽚,IO输出是3.3V,但IO⼤部分都是可以容忍5V电压输⼊。
⼀般在芯⽚⼿册的“引脚定义”章节可以查看到有FT标识表⽰该IO可以容忍5V电压输⼊。
⼆、在标准库中GPIO的模式(⼀)模式汇总输⼊模式:l 浮空输⼊(GPIO_Mode_IN_FLOATING):引脚电平是真实的外部连接器件电压,电平有不确定性l 上拉输⼊ (GPIO_Mode_IPU):默认通过电阻上拉到VCC,不接外部器件时可以读出⾼电平l 下拉输⼊ (GPIO_Mode_IPD):默认通过电阻下拉到GND,不接外部器件时可以读出低电平l 模拟输⼊ (GPIO_Mode_AIN):将外部信号直接传输到数模转换通道上输出模式:l 开漏输出(GPIO_Mode_Out_OD):只能输出低电平,⾼电平由电阻上拉决定l 开漏复⽤功能(GPIO_Mode_AF_OD):⽤于外设功能使⽤l 推挽式输出(GPIO_Mode_Out_PP):可以输出强⾼和强低,通常使⽤该功能控制LEDl 推挽式复⽤功能(GPIO_Mode_AF_PP):⽤于外设功能使⽤GPIO的基本结构:TTL肖特基触发器其实可以理解为⽤肖特基管构成的施密特触发器,作⽤简单说就是将相对缓慢变化的模拟信号变成矩形(⽅波)信号,便于后⾯读取。
这⾥有⼀个阈值电压的概念,⽐如从低到⾼达到多少才会导通,从⾼到底多少才会关闭。
(⼆) 浮空输⼊(GPIO_Mode_IN_FLOATING)浮空就是逻辑器件与引脚即不接⾼电平,也不接低电平。
(1)STM32使用HAL库操作GPIO
(1)STM32使⽤HAL库操作GPIO⼀初始化GPIO使⽤HAL库的优点在于不⽤⼿动添加初始化的代码了,CubeMX会根据软件设置⾃动⽣成。
⾃动⽣成的HAL库GPIO初始化代码:static void MX_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStruct;/* GPIO Ports Clock Enable */__HAL_RCC_GPIOH_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);/*Configure GPIO pin : PD11 */GPIO_InitStruct.Pin = GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);/*Configure GPIO pins : PD12 PD13 PD14 PD15 */GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);}顺序:(1)定义结构体变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32 GPIO使用操作步骤:1.使能GPIO对应的外设时钟例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);2.声明一个GPIO_InitStructure结构体例如:GPIO_InitTypeDef GPIO_InitStructure;3.选择待设置的GPIO管脚例如:/* 选择待设置的GPIO第7、8、9管脚位,中间加“|”符号 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;4.设置选中GPIO管脚的速率例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz5.设置选中GPIO管脚的模式例如:/* 设置选中GPIO管脚的模式为开漏输出模式*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX例如:/* 根据GPIO_InitStructure中指定的参数初始化外设GPIOC */ GPIO_Init(GPIOC, &GPIO_InitStructure);7.其他应用例:将端口GPIOA的第10、15脚置1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);例:将端口GPIOA的第10、15脚置0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);GPIO寄存器:寄存器描述CRL 端口配置低寄存器CRH 端口配置高寄存器IDR 端口输入数据寄存器ODR 端口输出数据寄存器BSRR 端口位设置/复位寄存器BRR 端口位复位寄存器LCKR 端口配置锁定寄存器EVCR 事件控制寄存器MAPR 复用重映射和调试I/O 配置寄存器EXTICR 外部中断线路0-15配置寄存器GPIO库函数:函数名描述GPIO_DeInit 将外设GPIOx寄存器重设为缺省值GPIO_AFIODeInit 将复用功能(重映射事件控制和EXTI设置)重设为缺省值GPIO_Init 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器GPIO_StructInit 把GPIO_InitStruct中的每一个参数按缺省值填入GPIO_ReadInputDataBit 读取指定端口管脚的输入GPIO_ReadInputData 读取指定的GPIO端口输入GPIO_ReadOutputDataBit 读取指定端口管脚的输出GPIO_ReadOutputData 读取指定的GPIO端口输出GPIO_SetBits 设置指定的数据端口位GPIO_ResetBits 清除指定的数据端口位GPIO_WriteBit 设置或者清除指定的数据端口位GPIO_Write 向指定GPIO数据端口写入数据GPIO_PinLockConfig 锁定GPIO管脚设置寄存器GPIO_EventOutputConfig 选择GPIO管脚用作事件输出GPIO_EventOutputCmd 使能或者失能事件输出GPIO_PinRemapConfig 改变指定管脚的映射GPIO_EXTILineConfig 选择GPIO管脚用作外部中断线路库函数:函数GPIO_DeInit功能描述:将外设GPIOx寄存器重设为缺省值例:GPIO_DeInit(GPIOA);函数GPIO_AFIODeInit功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值例:GPIO_AFIODeInit();函数GPIO_Init功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器例:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitTypeDef structureGPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:typedef struct{u16 GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;GPIO_Pin该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。
可以使用下表中的任意组合。
GPIO_Pin_None:无管脚被选中GPIO_Pin_x:选中管脚x(0--15)GPIO_Pin_All:选中全部管脚GPIO_SpeedGPIO_Speed:用以设置选中管脚的速率。
GPIO_Speed_10MHz:最高输出速率10MHzGPIO_Speed_2MHz:最高输出速率2MHzGPIO_Speed_50MHz:最高输出速率50MHzGPIO_ModeGPIO_Mode:用以设置选中管脚的工作状态。
GPIO_Mode_AIN:模拟输入GPIO_Mode_IN_FLOATING:浮空输入GPIO_Mode_IPD:下拉输入GPIO_Mode_IPU:上拉输入GPIO_Mode_Out_OD:开漏输出GPIO_Mode_Out_PP:推挽输出GPIO_Mode_AF_OD:复用开漏输出GPIO_Mode_AF_PP:复用推挽输出函数GPIO_StructInit功能描述:把GPIO_InitStruct中的每一个参数按缺省值填入例:GPIO_InitTypeDef GPIO_InitStructure;GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStruct:GPIO_Pin:GPIO_Pin_AllGPIO_Speed:GPIO_Speed_2MHzGPIO_Mode:GPIO_Mode_IN_FLOATING函数GPIO_ReadInputDataBit功能描述:读取指定端口管脚的输入例:u8 ReadValue;ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);函数GPIO_ReadInputData功能描述:读取指定的GPIO端口输入例:u16 ReadValue;ReadValue = GPIO_ReadInputData(GPIOC);函数GPIO_ReadOutputDataBit功能描述:读取指定端口管脚的输出例:u8 ReadValue;ReadValue = GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_7);函数GPIO_ReadOutputData功能描述:读取指定的GPIO端口输出例:u16 ReadValue;ReadValue = GPIO_ReadOutputData(GPIOC);函数GPIO_SetBits功能描述:置位指定的数据端口位例:将端口GPIOA的第10、15脚置1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);函数GPIO_ResetBits功能描述:清除指定的数据端口位例:将端口GPIOA的第10、15脚置0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);函数GPIO_WriteBit功能描述:设置或者清除指定的数据端口位例:GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);函数GPIO_Write功能描述:向指定GPIO数据端口写入数据例:GPIO_Write(GPIOA, 0x1101);函数GPIO_PinLockConfig功能描述:锁定GPIO管脚设置寄存器例:GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);函数GPIO_EventOutputConfig功能描述:选择GPIO管脚用作事件输出例:GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);GPIO_PortSourceGPIO_PortSource用以选择用作事件输出的GPIO端口。
函数GPIO_EventOutputCmd功能描述:使能或者失能事件输出例:GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);GPIO_EventOutputCmd(ENABLE);函数GPIO_PinRemapConfig功能描述:改变指定管脚的映射例:GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);一.GPIO概述1、共有8种模式,可以通过编程选择:1. 浮空输入2. 带上拉输入3. 带下拉输入4. 模拟输入5. 开漏输出——(此模式可实现hotpower说的真双向IO)6. 推挽输出7. 复用功能的推挽输出8. 复用功能的开漏输出模式7和模式8需根据具体的复用功能决定。
2、专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。
3、每个GPIO口都可以作为外部中断的输入,便于系统灵活设计。
4、I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这有利于噪声控制。
这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。