首页 > 其他分享 >STM32—GPIO

STM32—GPIO

时间:2024-08-01 15:55:32浏览次数:18  
标签:输出 Pin 引脚 低电平 STM32 Mode GPIO

1.GPIO介绍

GPIO可配置8种输入输出模式

模式名称性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入

可读取引脚电平,内部链接下拉电阻,悬空时默认低电平

模拟输入模拟输入GPIO无效,引脚直接接入内部ADC
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出数字输出

可输出引脚电平,高电平接VDD,低电平接VSS

复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSS

GPIO基本结构

               

1.1GPIO输入

上拉输入时,上方开关导通,下方开关断开,引脚默认为高电平

下拉输入时,上方开关断开,下方开关导通,引脚默认为低电平

浮空输入时,开关皆断开,此时引脚处于悬空状态

模拟输入一般只用于ADC

1.2GPIO输出

推挽输出,p-mos和n-mos皆有效

数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,输出高电平;

数据寄存器为0时,上管断开,下管导通,输出直接接到VSS,输出低电平;

这种输出模式下,高低电平均有较强的驱动能力

开漏输出,p-mos无效,n-mos有效

数据寄存器为1时,下管断开,则为高阻模式;

数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平;

这种模式下,只有低电平由驱动能力

复用推挽输出和复用开漏输出数据来自片上外设

2.GPIO相关的标准库函数

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
//开始时钟 第一个参数用于选择外设(GPIOx)第二个参数选择使能(ENABLE)或失能(DISABLE)
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
//调用该函数,所选择的GPIO外设就会被复位
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//初始化GPIO


//使用案例
//先定义一个结构体变量
GPIO_InitTypeDef GPIO_InitStructure;

//引出该结构体的所有成员一一赋值
//GPIO_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_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

//GPIO_Pin选择要配置的引脚,可选择多个引脚,之间用|连接
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;

//GPIO_Speed有三种可选
//GPIO_Speed_10MHz,
//GPIO_Speed_2MHz, 
//GPIO_Speed_50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

//最后调用函数
GPIO_Init(GPIOA,&GPIO_InitStructure);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
//可以把结构体变量赋一个初始值
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
//四个读取引脚电平的函数,调用函数可读取相应引脚的电平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置0
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
//四个配置引脚电平的函数,调用函数可以配置相应引脚为高电平或者低电平

3.GPIO相关案例代码演示

按键检测

#include "stm32f10x.h"     
#include "Delay.h"       //加入所需的头文件



void Key_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //开启时钟
	
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体
    //初始化结构体变量
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //调用函数
	GPIO_Init(GPIOB,&GPIO_InitStructure);

}

uint8_t Key_GetNum(void)
{
	uint8_t KeyNum;
	
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)
	{
		Delay_ms(20);    //消除按键按下的抖动
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0);
		Delay_ms(20);    //消除按键松手时的抖动
		KeyNum = 1;	
	}
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0);
		Delay_ms(20);
		KeyNum = 2;	
	}
	
	
	return KeyNum;
}

标签:输出,Pin,引脚,低电平,STM32,Mode,GPIO
From: https://blog.csdn.net/2302_80427506/article/details/140847268

相关文章

  • 基于STM32设计的实验室智能门禁系统(华为云IOT)(198)
    基于STM32设计的实验室智能门禁系统(华为云IOT)(198)文章目录一、前言1.1项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路【4】供电方式1.3项目开发背景【1】选题的意义......
  • STM32F1基于HAL库的学习记录实用使用教程分享(二、GPIO_Input 按键)
    往期内容STM32F1基于HAL库的学习记录实用使用教程分享(一、GPIO_Output)文章目录往期内容前言一、GPIO_Input1.浮空输入(GPIO_Mode_IN_FLOATING)2.上拉输入(GPIO_Mode_IPU)3.下拉输入(GPIO_Mode_IPD)4.上拉和下拉的区分原因二、配置1.RCC2.SYS(1).Debug(2).SystemWa......
  • STM32下载程序的方式
            STM32下载程序的方式多种多样,每种方式都有其特点和适用场景。以下是一些常见的STM32下载程序的方式:1.SWD接口下载特点:        SWD(SerialWireDebug)是STM32特有的一种串行调试接口,通过两根线(SWDIO串行数据输入输出和SWCLK串行时钟输入)实现程序的下......
  • 0730_驱动1 gpio子系统
    一、介绍gpio子系统1.1基于gpio子系统框架1.2基于gpio子系统API接口#include<linux/of_gpio.h>intof_get_named_gpio(structdevice_node*np,constchar*propname,intindex)函数功能:获取gpio编号参数:np:节点结构体指针......
  • 基于 STM32 的 NAS私有云盘搭建:集成LwIP 协议、HTTP/HTTPS、WEB前端技术栈(代码示例)
    项目概述在本项目中,我们将搭建一个基于STM32的NAS(网络附加存储)私盘,通过网络访问存储在外部SATA硬盘上的文件。该项目将使用STM32开发板、外接SATA硬盘、LwIP协议栈以及FATFS文件系统来实现文件的上传、下载和管理,用户可以通过简单的Web界面进行操作。系统设计......
  • H7-TOOL自制Flash读写保护算法系列,为STM32H7全系列芯片制作读写使能和解除算法,支持在
    说明:很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。最近好几个网友咨询H7系列芯片保护支持,马不停蹄,已......
  • STM32学习记录(七):ADC
    STM32学习记录(七):ADC模拟/数字转换器(Analog-to-digitalconverter:ADC)将模拟量转为数字量。STM32F103C8T6中的有2个12bit转换时间为1us的A/D转换器,内置了一个温度传感器,可以通过ADC读取。ADC的系统框图ADC读取温度传感器STM32内部有一个温度传感器,只有使用ADC1时,内部温度......
  • 【STM32 HAL库】HC-05 蓝牙通信
    【STM32HAL库】蓝牙通信理论模块功能接线应用CubeMX配置轮询模式发送DMA模式发送Keil5代码理论模块功能将复杂的蓝牙协议简化为串口透传即以HC-05作为串口与主机之间通信的桥梁,实现串口与主机的通信本质上就是无线的串口通信接线HC-05STM32TXRXRXTXGNDGNDV......
  • 【STM32 HAL库】TIM定时器与CubeMX配置
    【STM32HAL库】TIM定时器与CubeMX配置前言TIM定时器基本理论定时器的本质就是计数器!定时器的基本作用定时器分类定时器的外部时钟与从模式TIM基本定时器理论应用CubeMX配置Keil5代码输入捕获理论应用CubeMX配置Keil5代码PWM理论应用CubeMX配置Keil5代码前言......
  • 搭建 STM32 网关服务器的全流程:集成嵌入式 C++、TCP/IP 通信、Flash 存储及 JWT 认证(
    引言随着物联网(IoT)技术的快速发展,基于STM32的服务器(类似网关)在数据采集、设备控制等方面的应用越来越广泛。本文将介绍搭建一个基于STM32的服务器所需的技术栈,以及详细的搭建步骤和代码示例。技术栈介绍在搭建基于STM32的服务器时,我们需要用到以下技术栈和组件:1.硬......