STM32笔记——GPIO

发布者:skyhcg最新更新时间:2022-07-01 来源: csdn关键字:STM32  GPIO  基本结构 手机看文章 扫描二维码
随时随地手机看文章

GPIO简介

GPIO是通用输出输入端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集功能。


GPIO的基本结构

1、保护二极管与上下拉电阻


当外部输入电压高于VDD的电压时,上方的保护二极管导通,当外部输入电压底于Vss的电压时,上方的保护二极管导通,防止不正常电压引入芯片导致芯片烧毁。


2、P-MOS管和N-MOS管


在输出模式部分,线路经过一个由"P-MOS"和"N-MOS"组成的结构,这个结构使其拥有"推挽输出"和"开漏输出"的功能。


3、TTL肖特基触发器


4、IO耐压


STM32是一款3.3V电压的芯片,IO输出是3.3V,但IO大部分都是可以容忍5V电压输入。一般在芯片手册的“引脚定义”章节可以查看到有FT标识表示该IO可以容忍5V电压输入。


GPIO的工作模式

GPIO的输入

GPIO的输出可以细分为4种工作模式:上拉输入、下拉输入、模拟输入、浮空输入。


1、输入上拉(GPIO_Mode_IPU)

上拉电阻:将一个不确定的信号(高电平/低电平),通过一个电阻与电源VCC相连,固定在高电平。上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。


上拉就是把点位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平。电阻同时起到限流的作用。弱强只是上拉电阻的阻值不同,没有什么严格区分。


2、输入下拉(GPIO_Mode_IPD)

在这里插入图片描述

下拉电阻:将一个不确定的信号(高电平/低电平),通过一个电阻与地线GND相连,固定在低电平。下拉电阻是为了保证无信号输入时输入端的电平为低电平。


下拉就是把点位拉低,比如拉到GND。下拉就是将不确定的信号通过一个电阻嵌位在低电平。电阻同时起到限流的作用。弱强只是下拉电阻的阻值不同,没有什么严格区分。


3、模拟输入(GPIO_Mode_AIN)


模拟输入用于ADC的采集。


4、输入浮空(GPIO_Mode_IN_FLOATING)

浮空就是逻辑器件与引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。


此时的GPIO引脚是处在高阻状态的,浮空输入的电平是不确定的,完全取决于外部的输入。

浮空输入多用于外部按键输入、标准通信协议的I2C、USART的接收端;

GPIO的输出

GPIO的输出可以细分为4种工作模式:开漏输出、推挽输出、复用开漏输出、复用推挽输出。


1、推挽输出(GPIO_Mode_Out_PP)

推挽模式时双 MOS 管以轮流方式工作。当输入端口输入高电平,上部开关管导通,下部开关管关闭,VDD被推到OUT端口,相当于输出高电平;当输入端口输入低电平,上部开关管关闭,下部开关管导通,OUT端口接地,相当于输出低电平。


2、开漏输出(GPIO_Mode_Out_OD)

只有 N-MOS 管工作。当输入端口输入低电平,开关管导通,OUT端接地,相当于输出低电平;当输入端口输入高电平,开关管关闭,相当于输出高电平。


注:正常使用时必须外部上拉电阻。


3、推挽和开漏复用功能

可以理解为GPIO口被用作第二功能时的配置情况。(并非作为通用IO口使用)


 推挽输出和开漏输出的对比

推挽输出模式一般应用在输出电平为0和3.3V而且需要高速切换开关的状态的场合。除了必须用开漏模式的场合,一般习惯使用推挽输出模式。


开漏输出模式一般应用在I2C、spi通信等需要“线与”功能的电路中。

就电流的大小而言,开漏输出是弱电流(基本算是没有电流)只是给外部一个电平信号,没有驱动能力,而推挽输出是强电流是具有推动(驱动)性的。


参考:

《【野火】stm32HAL库实战开发指南---基于F103系列开发板》


《STM32F10x——中文开发手册》


关键字:STM32  GPIO  基本结构 引用地址:STM32笔记——GPIO

上一篇:STM32F1系列HAL库配置GPIO
下一篇:STM32学习笔记--------外部中断

推荐阅读最新更新时间:2024-11-14 01:04

STM32系统嘀嗒定时器实现1ms中断事件
int main() { //系统定时器实现周期性1000hz中断事件,即1ms SysTick_Config(SystemCoreClock / 1000); } void SysTick_Handler(void) { static uint32_t cnt=0; cnt++;//记500次之后,=500ms,点灯 if(cnt =500) { cnt=0; 灯亮; } } 最大的定时时间: 如果是168MHZ, 2^24 ÷ 168000000=99.86ms
[单片机]
STM32系列微控制器标准外设库简单介绍
ST为了普及旗下产品,发布包括标准外设库在内的众多支持软件,有效降低开发门槛。作者使用ST的标准外设库大概两年时间,在这里介绍何为外设库: 外设库,是支持片上外设的函数,数据结构和宏的集合。外设库的精髓在于初始化结构体和初始化函数的配合使用,把外设的各类工作参数赋予初始化结构体,然后调用初始化函数将这些参数写入外设寄存器,完成外设的初始化。 外设库提供大量的状态获取,中断控制等函数,它们进行必要的检查之后,再操作外设,安全高效。 在开发过程中,程序员会频繁地从某个外设接收数据或者向某个外设发送数据,介于此外设库把这些函数全部封装完毕,格式统一,便于使用。 针对初学者,以下几个地方易错: 启动文件和外设头文件里面的MC
[单片机]
STM32 对于NVIC中断优先级的设置
用STM32做项目已经有段时间了,但是我忽然发现我对NVIC其实一点都不了解,所以今天补习了一下NVIC的知识以及我自己对NVIC中断优先级设置的了解,希望对大家有所帮助: 对于NVIC中断优先级的设置一直都不是很清楚; 具体函数如下: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 优先级组设置 /* Timer2中断*/ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // 通道设置 NVIC_
[单片机]
基于STM32 MCU的太阳能:LED街灯解决方案
随着化石类能源的日益减少,以及温室气体的过度排放导致全球变暖问题越来越受到重视,人们一方面在积极开发各类可再生新能源,另一方面也在倡导节能减排的绿色环保技术。太阳能作为取之不尽、用之不竭的清洁能源,成为众多可再生能源的重要代表;而在照明领域,寿命长、节能、安全、绿色环保、色彩丰富、微型化的LED固态照明也已被公认为世界一种节能环保的重要途径。太阳能-LED街灯同时整合了这两者的优势,利用清洁能源以及高效率的LED实现绿色照明。本文介绍的太阳能-LED街灯方案,能自动检测环境光以控制路灯的工作状态,最大功率点追踪(MPPT)保证最大太阳能电池板效率,恒电流控制LED,并带有蓄电池状态输出以及用户可设定LED工作时间等功能。 系统
[单片机]
基于<font color='red'>STM32</font> MCU的太阳能:LED街灯解决方案
STM32的独立看门狗(IWDG)
一、什么是看门狗: 看门狗就是一种专用定时器。 二、看门狗的功能: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 简单来说就是在系统跑飞(程序异常执行)的情况时,系统复位,程序重新执行。 -------------------------------------------------
[单片机]
<font color='red'>STM32</font>的独立看门狗(IWDG)
STM32HAL库学习笔记--硬件I2C读写AT24C512
一、CubeMx配置 开启I2C1,其余参数默认 在旧版本的CubeMx中,HAL库实现的I2C初始化带有一些BUG,比如需要在I2C引脚复用GPIO配置前加上I2C的时钟使能,不过这些BUG在新版本的CubeMx中似乎得到了解决,直接使用其生成的初始化程序和HAL库的I2C接口就可以实现成功的读写操作 二、读AT24C512DataSheet AT24Cxx系列芯片内存大小各异,页数和每页字节数也不同,要根据数据手册来确定该型号芯片的内存结构(Memory Organization) 由DS可知AT24C512的内存一共有 512 Pages x 128 Bytes = 65536 Bytes = 512 kbits
[单片机]
STM32HAL库学习笔记--硬件I2C读写AT24C512
STM32 系统级开发之 ucosIII 或 freeRTOS 事件标志组详解
1、轻型操作系统同步的方案详解 1)信号量 假设有两个任务 Task1 和 Task2,第一个任务进行按键的扫描,第二个任务进行LED灯的点亮 需求: 扫描到按键按下后点亮 LED 灯,也就是说第二个任务永远在等待第一个任务按键的扫描 实现: 首先 Task1 一直检测按键是否按下,如果按键按下以后,使用一个全局变量 flag 并设置 flag=1 而在 Task2 当中,不停检测 flag 值是否为 1,如果为 1,点亮 led 灯并把flag清零 此时 flag 提供的是一个信号量的作用,也就是说 Task1 按下按键以后,开始向 Task2 发送一个信号量 flag,Task2 接收到了 flag 信号量以后,就把LED灯
[单片机]
UCGUI在STM32平台移植经验(无操作系统)
ucgui 移植的前提是已经具备了LCD驱动函数,已经能够实现点亮LCD屏幕,并实现画点以及获取指定点颜色值的功能。一般的显示屏供应商会提供对应的驱动函数。主要有初始化函数void LCD_Init(),屏幕画点函数 Void LCD_DrawPoint(u16 x,u16 y,u16 color),以及获取指定点颜色值的U16 LCD_ReadPoint(u16 x,u16 y)函数。移植的关键在于把这三个函数与ucgui提供的接口函数匹配。 打开GUILCDDriver中的LCDDummy.c文件,找到int LCD_L0_Init(void)初始化函数,LCD_L0_SetPixelIndex(int x, int y,
[单片机]
UCGUI在<font color='red'>STM32</font>平台移植经验(无操作系统)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved