当前位置:网站首页>GPIO简介
GPIO简介
2022-07-06 16:33:00 【小侯同学_2022】
GPIO简介
1.介绍
GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,如型号为STM32F103VET6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5组GPIO,芯片一共1O0个引脚,其中GPIO就占了一大部分,所有的GPIO引脚都有基本的输入输出功能。
最基本的输出功能是由STM32控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入到LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。
最基本的输入功能是检测外部输入电平,如把GPIO引脚连接到按键,通过电平高低区分按键是否被按下。
1.1 保护二极管及上、下拉电阻
**引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入,**当引脚电压高于VDD时,上方的二极管导通,当引脚电压低于Vss时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。尽管有这样的保护,并不意味着STM32的引脚能直接外接大功率驱动器件,如直接驱动电机,强制驱动要么电机不转,要么导致芯片烧坏,必须要加大功率及隔离电路驱动。
1.2 P-MOS 管和N-MOS 管
GPIO引脚线路经过两个保护二极管后,向上流向“输入模式”结构,向下流向“输出模式”结构。先看输出模式部分,线路经过一个由PMOS和N-MOS管组成的单元电路。这个结构使GPIO具有了“推挽输出”和“开漏输出”两种模式。
所谓的推挽输出模式,是根据这两个MOS管的工作方式来命名的。**在该结构中输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。*****当引脚高低电平切换时,两个管子轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。*推挽输出的低电平为0伏,高电平为3.3伏,具体参考图推挽等效电路,它是推挽输出模式时的等效电路。
而在开漏输出模式时,上方的P-MOS管完全不工作。如果我们控制输出为0,低电平,则PMOS管关闭,N-MOS管导通,使输出接地,若控制输出为1(它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。
开漏输出一般应用在I2C、SMBUS 通讯等需要“线与”功能的总线电路中
typedef enum
{
GPIO_Mode_AIN = 0x0, // 模拟输入
GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入
GPIO_Mode_IPD = 0x28, // 下拉输入
GPIO_Mode_IPU = 0x48, // 上拉输入
GPIO_Mode_Out_OD = 0x14, // 开漏输出
GPIO_Mode_Out_PP = 0x10, // 推挽输出
GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出
GPIO_Mode_AF_PP = 0x18 // 复用推挽输出
} GPIOMode_TypeDef;
1.3点亮LED灯
流程
1)使能IO口时钟,通过调用:
RCC_ABP2PeriphColckCmd( )
- 初始化IO口模式,调用:
GPIO_Init( )
- 操作IO口,输出高低电平
GPIO_SetBits( )
GPIO_ResetBits( )
#为了增加代码的可移植性,将硬件的相关宏定义在 bsp_LED.h 中
#ifndef _BSP_LED_H
#define _BSP_LED_H
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOA
#define LED1_GPIO_PORT GPIOA
#define LED1_GPIO_PIN GPIO_Pin_8
#define LED2_GPIO_CLK RCC_APB2Periph_GPIOD
#define LED2_GPIO_PORT GPIOD
#define LED2_GPIO_PIN GPIO_Pin_2
#include "stm32f10x.h"
void LED_GPIO_Config(void);
#endif/*_BSP_LED_H*/
LED初始化配置
#include "./LED/bsp_led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitType_struct_A;
GPIO_InitTypeDef GPIO_InitType_struct_D;
/*第一步打开外设时钟*/
RCC_APB2PeriphClockCmd(LED1_GPIO_CLK,ENABLE);
RCC_APB2PeriphClockCmd(LED2_GPIO_CLK,ENABLE);
/*第二步配置外设初始化结构体*/
GPIO_InitType_struct_A.GPIO_Pin = LED1_GPIO_PIN;
GPIO_InitType_struct_A.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitType_struct_A.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitType_struct_D.GPIO_Pin = LED2_GPIO_PIN;
GPIO_InitType_struct_D.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitType_struct_D.GPIO_Speed = GPIO_Speed_10MHz;
/*第三步调用初始化函数,把配置好的结构体成员写到寄存器中*/
GPIO_Init(LED1_GPIO_PORT,&GPIO_InitType_struct_A);
GPIO_Init(LED2_GPIO_PORT,&GPIO_InitType_struct_D);
主程序
#include "stm32f10x.h"
#include "./LED/bsp_led.h"
void delay(uint32_t count)
{
for(;count!=0;count--);
}
int main(void)
{
LED_GPIO_Config( );
while(1)
{
GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
delay(0xfffff);
GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
GPIO_ResetBits(GPIOD,LED2_GPIO_PIN);
delay(0xfffff);
}
}
边栏推荐
- okcc呼叫中心的订单管理时怎么样的
- There are only two TXT cells in the ArrayExpress database. Can you only download the sequencing run matrix from line to ENA?
- 基础图表解读“东方甄选”爆火出圈数据
- 17、 MySQL - high availability + read / write separation + gtid + semi synchronous master-slave replication cluster
- 自动化测试工具Katalon(Web)测试操作说明
- Asset security issues or constraints on the development of the encryption industry, risk control + compliance has become the key to breaking the platform
- Interface joint debugging test script optimization v4.0
- If the request URL contains jsessionid, the solution
- Design of short chain
- The programmer refused the offer because of low salary, HR became angry and netizens exploded
猜你喜欢
Talking about the current malpractice and future development
17、 MySQL - high availability + read / write separation + gtid + semi synchronous master-slave replication cluster
Daily question brushing record (XV)
Gradle知识概括
Knowledge * review
Rider离线使用Nuget包的方法
快讯 l Huobi Ventures与Genesis公链深入接洽中
Server SMP, NUMA, MPP system learning notes.
【无人机】多无人协同任务分配程序平台含Matlab代码
Basic chart interpretation of "Oriental selection" hot out of circle data
随机推荐
1000字精选 —— 接口测试基础
Can online reload system software be used safely? Test use experience to share with you
MATLIB reads data from excel table and draws function image
Without CD, I'll teach you a trick to restore the factory settings of win10 system
Cas d'essai fonctionnel universel de l'application
leetcode:236. The nearest common ancestor of binary tree
Design a red envelope grabbing system
Yaduo Sangu IPO
【系统分析师之路】第七章 复盘系统设计(面向服务开发方法)
Experiment 4: installing packages from Gui
Pinia module division
Laravel8 uses passport authentication to log in and generate a token
TypeScript增量编译
基于jsp+servlet+mysql框架的旅游管理系统【源码+数据库+报告】
The method of reinstalling win10 system is as simple as that
快手的新生意,还得靠辛巴吆喝?
Résumé des connaissances de gradle
The programmer refused the offer because of low salary, HR became angry and netizens exploded
(leetcode) sum of two numbers
Wind chime card issuing network source code latest version - commercially available