当前位置: 首页 > news >正文

STM32 GPIO工作原理

STM32 GPIO工作原理

STM32引脚说明

STM32F103ZET6:

共有7组IO口,每组IO口有16个IO-—共16X7=112个IO

编号为:GPIOA,GPIOB……GPIOG,从A到G刚好7组

STM32F103RCT6:

共有4组IO口,共16X3+3 = 51个IO

编号为:GPIOA0 ~ GPIOA15

​ GPIOB0 ~ GPIOB15

​ GPIOC0 ~ GPIOC15

​ GPIOD0 ~ GPIOD2

STM32的大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(比如串口)

在STM32F103ZET6的数据手册中可以看到GPIO说明表,表中的 I/O Level 项带有FT表示该引脚容忍5V,也就说虽然引脚输入输出3.3V,但你输入一个5V,引脚也可以判断为高电平,没带FT标志的说明该引脚不容忍5V

在这里插入图片描述

GPIO的工作方式

4种输入模式:

1.输入浮空

在这里插入图片描述

2.输入上拉

与输入浮空差不多,只是上拉电阻开关接通,接到了VDD,上拉电阻手册说明为30~50K
在这里插入图片描述

3.输入下拉

下拉电阻的开关接通,电平信号输入与浮空输入的类似,只不过经过了下拉电阻

在这里插入图片描述

4.模拟输入

多用于DA转换,将外部的电压转为内部能识别的数字信号

在这里插入图片描述

4种输出模式:

1.开漏输出

CPU往位设置寄存器写入1,则高电平1来到输出控制电路这里,N-MOS管不会导通,此时IO端口的电平状态由外部的上拉或者下拉决定,可能为高电平也可能为低电平;同时IO端口的状态可以被读取,通过虚线的电路被CPU读取,此时读取的并不一定是CPU输出的高电平1,而是外部的状态

CPU如果往位设置寄存器写入0,则低电平0来到输出控制寄存器,N-MOS管导通,IO端口与VSS导通,而VSS是电路公共地端电压,一般接GND,所以IO端口就输出低电平0;同时CPU读取时端口状态就是自己输出的低电平0

在这里插入图片描述

2.开漏复用输出

与开漏输出类似,不过电平不是由CPU输出,而是由来自片上的外设模块输出

在这里插入图片描述

3.推挽输出

CPU往位设置寄存器写入1,则来到输出控制电路这里,P-MOS管导通,N-MOS管截止,IO端口接到VDD,IO口输出高电平1

CPU往位设置寄存器写入0,则来到输出控制电路这里,N-MOS管导通,P-MOS管截止,IO端口接到VSS,而VSS是接GND的,IO口输出低电平0

在这里插入图片描述

4.推挽复用输出

与推挽输出逻辑一样,只不过不是由CPU输出电平,而片上外设模块输出电平

在这里插入图片描述

注意:

推挽输出

可以输出强高低电平,连接数字器件

开漏输出

只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)

开漏输出一般作为信号输出,比如给模块一个使能信号;

推挽输出一般作为驱动信号,比如驱动一个灯,但只有20mA的电流,如果要驱动蜂鸣器这样的,需要加三极管

F1系列没有专门设置输入上拉或者下拉的寄存器,属于伪上/下拉

在F4系列里面就有专门的寄存器设置。

3种最大翻转速度:

2MHZ

10MHZ

50MHZ

GPIO相关配置寄存器

每组GPIO端口的寄存器包括:

两个32位配置寄存器(GPIOx_CRL , GPIOx_CRH);

两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR);

一个32位置位/复位寄存器(GPIOx_ BSRR);

一个16位复位寄存器(GPIOx_ BRR);

一个32位锁定寄存器(GPIOx_LCKR)。

每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)。

端口配置低寄存器(GPIOx_CRL)、端口配置高寄存器(GPIOx_CRH)

在这里插入图片描述

配置寄存器比较好理解,STM32的引脚分为了7组,GPIOA、GPIOB、GPIOC……GPIOG,每一组都有端口配置低寄存器(GPIOx_CRL),x就代表A、B、C……G,后面的端口配置高寄存器也是这样;

那每一组有16个IO口,每个IO的配置需要4位来完成,因为STM32一次性只能处理32位的数据,所以GPIOx_CRL就只有32位(0 ~ 31);32 / 4 = 8,只能配置8个IO口,那这个组还剩8个IO口怎么办,就只能再用一个端口配置高寄存器(GPIOx_CRH)来进行配置

总结:CRL/CRH每四个位控制一个IO口,CRL控制标号0-7的口,CRH控制标号8-15的口

端口输入数据寄存器(GPIOx_IDR) (x=A…E)

IDR寄存器低16位,每个位控制该组IO的一个IO口,对应的是IO口的输入电平

端口输出数据寄存器(GPIOx_ODR) (x=A…E)

ODR寄存器跟IDR相反,是控制IO口输出。低16位每个位控制一个IO口的输出电平高或低

端口位设置/清除寄存器(GPIOx_BSRR) (x=A…E)

BSRR寄存器低16位,对应位设置为1,那么IO口输出为高电平,对应位设置为0,对应IO口不产生任何影响。高16位作用相反。

该寄存器可以用来设置IO口为高电平1,也可用来清除IO口为低电平0

端口位清除寄存器(GPIOx_BRR) (x=A…E)

清除IO口的电平,该寄存器只能清除,不能设置,看名字就知道

端口复用功能

STM32的大部分端口都具有复用功能。

所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚,比如PA9 、PA10可以复用为STM32的串口1引脚。

作用:最大限度的利用端口资源

在这里插入图片描述

端口重映射功能

就是可以把某些功能引脚映射到其他引脚。

比如串口1默认引脚是PA9,PA10,可以通过配置重映射映射到PB6,PB7

作用:方便布线

例如:USART1_TX默认复用到PA9,USART1_RX默认复用到PA10,可以通过重映射,将USART1_TX映射到PB6,将USART1_RX映射到PB7

在这里插入图片描述

STM32 所有IO口都可以作为中断输入

标准库GPIO相关函数功能简介

在这里插入图片描述

相关文章:

  • ros入门(九)----ros navigation
  • 数学建模神经网络应用,构建神经网络模型方法
  • 小程序模板报价_小程序模板价格_小程序模板使用多少钱
  • 校园跑腿小程序市场需要和功能分析!
  • 上半年业绩韧性增强,两大核心业务成第二增长点,商汤用硬科技冲刺AI长跑
  • MySQL 数据库(DBMS)安装教程图文详解
  • UTONMOS:元宇宙链游之风、燎原之势
  • 测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)
  • 哺乳动物组织和培养细胞提取蛋白—Abbkine ExKine总蛋白提取试剂盒
  • springboot项目打包部署到阿里云windows服务器全过程记录
  • 网络编程与HTTP协议
  • 概率论的学习和整理13--方差和协方差(未完成)
  • 人工神经网络的算法原理,最简单的神经网络算法
  • 为什么大数据为NFT创造了一个巨大的市场
  • PDF转JPG免费软件有什么?这三个软件值得收藏
  • [PHP内核探索]PHP中的哈希表
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【css3】浏览器内核及其兼容性
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 10个确保微服务与容器安全的最佳实践
  • Apache Spark Streaming 使用实例
  • axios 和 cookie 的那些事
  • es的写入过程
  • jdbc就是这么简单
  • JS变量作用域
  • Laravel5.4 Queues队列学习
  • magento2项目上线注意事项
  • PAT A1050
  • PHP CLI应用的调试原理
  • React-生命周期杂记
  • spring boot下thymeleaf全局静态变量配置
  • Vue UI框架库开发介绍
  • 彻底搞懂浏览器Event-loop
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 基于web的全景—— Pannellum小试
  • 将回调地狱按在地上摩擦的Promise
  • 聚类分析——Kmeans
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 优秀架构师必须掌握的架构思维
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #include
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)Elastix图像配准:3D图像
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)u-boot-nand.bin的下载
  • .cn根服务器被攻击之后
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NetCore实践篇:分布式监控Zipkin持久化之殇