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

STM32-GPIO理论部分1

***本文章旨在于收集资料(来源官方手册,正点原子,野火等等网络上的各路资源),加上自己的理解,为方便自己的复习而创建,无盈利操作。***


1.功能介绍

GPIO的全称:General Purpose Input Output

  1. 从名字可以看出,作为通用输入输出端口的,检测引脚电平,输出高低电平。
  2. STM32一共有7组GPIO端口,GPIOA,B,C,D,E,F,G。
  3. 每个GPIO端口都有16个I/O引脚,stm公司的不同芯片引脚数目不同,所用到的GPIO端口数码不同。
  4. 操作每个GPIO端口所对应的操作寄存器(每组7种),可设置GPIO端口的模式(8种),电平状态。
  5. 除此之外,每个GPIO都有外部中断的功能,还可以复用为外设功能引脚(比如串口)。STM32的大部分脚除了当GPIO使用外,还可以

 补充知识:

  • 每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访问)。
  • GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。
  • (8.1.2 单独的位设置或位清除)单独的位设置或位清除当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改一个或多个位。 这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’来实现的。没被选择的位将不被更改。
  • (8.1.3 外部中断/唤醒线)所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。更多的关于外部中断的信息,参考9.2外部中断/事件控制器(EXTI); 9.2.3第节:唤醒事件管理。
  • (8.1.4 复用功能(AF))也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对GPIO控制器编程来实现。此时,端口应当被设置为复用功能输出模式。显然,这时相应的引脚不再由外部驱动,而是通过GPIO控制器由软件来驱动。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。 如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
  • (8.1.5 软件重新映射I/O)复用功能为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不再映射到它们的原始引脚上了。
  • (8.1.6 GPIO锁定机制)锁定机制允许冻结IO配置。当在一个端口位上执行了锁定(LOCK)程序,在下一次复位之前,将不能再更改端口位的配置。

2.GPIO的结构与模式分析

以下是GPIO端口一个引脚的结构图:

GPIO有8种工作模式:

  • 输入模式:浮空输入,上/下拉输入,模拟输入,复用功能输入
  • 输出模式:开漏输出,推挽输出,复用开漏,复用推挽

输入模式

  •  输入缓冲器被禁止,输入开启
  •  施密特触发输入被激活 
  • 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
  • 上下拉的配置,取决于ODR寄存器。
  •  对输入数据寄存器的读访问可得到I/O状态
  • 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 
  • 模拟输入时,禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置为’0‘, 弱上拉和下拉电阻被禁止,读取输入数据寄存器时数值为’0’。

输出模式

  • 输出、入缓冲器均被开启
  • 施密特触发输入被激活
  • 弱上拉和下拉电阻被禁止
  • 控制输出模块相当于是一个反向器
  • 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。
  • 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
  • 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
  • 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。
  • 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
  • 复用功能输出时,内置外设的信号驱动输出缓冲器

GPIO的模式配置查数据手册的8.1.11外设配置。

3.GPIO寄存器

每组GPIO含有7种寄存器,不同GPIO的寄存器组只是GPIO的标号不同,7种寄存器如下:

寄存器介绍名称功能介绍偏移地址
两个32位配置寄存器GPIOx_CRL,GPIOx_CRH配置GPIO端口的工作模式

0x00

0x04

两个16位数据寄存器GPIOx_IDR,GPIOx_ODR输入(读)/输出(写)数据

0x08

0x0C

一个32位置位/复位寄存器GPIOx_BSRR置1,置00x10
一个16位复位寄存器GPIOx_BRR置00x14
一个32位锁定寄存器GPIOx_LCKR锁定GPIO的模式0x18

配置寄存器

每组GPIO有两个32位寄存器,GPIO端口每个引脚的配置需要4bit,16*4=64,2个32位。

数据寄存器

置位/复位寄存器

复位寄存器

锁定寄存器

http://www.dtcms.com/a/292461.html

相关文章:

  • 如何将iPad中的视频传输到电脑(6种简单方法)
  • 如何构建FunASR的本地语音识别服务
  • 出货奥地利,稳石氢能AEM氢户储应用方案撬动欧洲市场。
  • 智能文本抽取在法院卷宗管理的技术实现及优势
  • 记录解决问题--使用maven help插件一次性上传所有依赖到离线环境,spring-boot-starter-undertow离线环境缺少依赖
  • windows下nvm的安装及使用
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 2025年COR SCI2区,基于多种配送模式的无人机自主配送车辆路径问题,深度解析+性能实测
  • 无人机吊舱与遥控器匹配技术解析
  • 【matlab】无人机控制算法开发与应用流程
  • 从差异到协同:OKR 与 KPI 的管理逻辑,Moka 让适配更简单
  • 进程优先级切换调度-进程概念(6)
  • Linux笔记1——简介安装
  • 高可用架构模式——数据集群和数据分区
  • Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案
  • -----------------------------------事务--------------------------
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人
  • 风能革新!5大理由选Canopen转Profinet网关
  • 基于python django深度学习的中文文本检测+识别,可以前端上传图片和后台管理图片
  • Oracle使用小计
  • VUE2 项目学习笔记 ? 语法 v-if/v-show
  • C# 11.0 新特性 u8 后缀
  • 【数学建模|Matlab】Matlab「基础知识」和「基础操作」
  • halcon处理灰度能量图
  • Android FFMPEG-播放器画面适配
  • 深入理解程序链接机制:静态链接、ELF加载与动态库实现原理
  • 三步构建智能办公体系
  • 330米地标背后的“智慧神经” —— 越秀国际金融汇电力系统案例解析
  • spring boot 集成netty,及其一些基本概念
  • 黑马点评练习题-给店铺类型查询业务添加缓存(String和List实现)