STM32-GPIO详解
目录
一:GPIO基本概念
编辑 二:GPIO的实际应用
三:功能描述
四:GPIO库函数
五:寄存器
GPIO相关寄存器功能
一:GPIO基本概念
GPIO是英文General Purpose Input/Output的缩写,中文翻译为通用输入/输出。它是一种在数字电子系统中常见的接口类型,用于与外部设备进行通信和控制。
GPIO接口可以作为输入或输出引脚使用。作为输入引脚时,GPIO可以接收来自外部设备的电信号,并将其转换为数字信号,供系统内部使用。作为输出引脚时,GPIO可以将数字信号发送到外部设备,从而实现对其的控制。
GPIO的基本概念包括以下几个方面:
-
引脚:GPIO接口通常由一组引脚组成,每个引脚都可以用作输入或输出。每个引脚都有一个唯一的标识符,如GPIO0、GPIO1等。
-
输入模式:当GPIO引脚配置为输入模式时,它可以接收外部设备发送的电信号。通常,输入引脚可以读取高电平(1)或低电平(0)状态,或者在某些系统中可以读取模拟信号。
-
输出模式:当GPIO引脚配置为输出模式时,它可以向外部设备发送数字信号。输出引脚可以设置为高电平(1)或低电平(0),以控制连接的设备的状态。
-
状态和电平:GPIO引脚的状态表示当前引脚的输入或输出电平。高电平通常表示逻辑1,低电平表示逻辑0。在某些系统中,还可以使用其他状态,如浮空、上拉和下拉等。
-
控制寄存器:为了配置和控制GPIO引脚的功能,通常需要通过写入特定的控制寄存器来设置引脚的模式、状态和电平。
GPIO在APB2下,所以要用GPIO时必须先开启APB2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
二:GPIO的实际应用
-
控制LED:将GPIO引脚配置为输出模式,可以通过设置引脚的高低电平状态来控制LED的亮灭。
-
按钮输入:将GPIO引脚配置为输入模式,可以连接按钮或开关,并通过读取引脚的电平状态来检测按钮是否被按下或开关是否打开。
-
传感器接口:通过GPIO引脚,可以连接各种传感器,如温度传感器、湿度传感器、光照传感器等。传感器的输出信号可以通过读取GPIO引脚的状态来获取。
-
驱动电机:通过GPIO引脚,可以连接电机驱动器,并通过设置引脚的高低电平状态来控制电机的运行方向和速度。
-
与外部设备通信:通过GPIO引脚,可以与其他外部设备进行通信,如显示器、LCD屏幕、数码管等。通过设置引脚的状态和电平,可以发送数据或控制命令。
-
脉冲宽度调制(PWM)输出:一些GPIO引脚支持PWM功能,可以生成模拟信号,用于控制电机速度、调节LED亮度等需要模拟输出的应用。
总之,GPIO的应用范围非常广泛,可以用于各种嵌入式系统、物联网设备、机器人、单片机等项目中,以实现与外部设备的连接、控制和通信功能。
三:功能描述
GPIO提供了一种通用的、灵活的接口,使得数字电子系统能够与外部设备进行交互和控制,实现各种应用需求。
输入功能:GPIO可以配置为输入模式,接收外部设备发送的信号。它可以读取来自传感器、开关、按钮等外部设备的状态,并将其转换为数字信号供系统内部使用。
输出功能:GPIO可以配置为输出模式,向外部设备发送数字信号。它可以通过设置高低电平或产生脉冲宽度调制(PWM)信号,控制执行器、驱动器、LED等外部设备的状态或行为。
引脚配置:GPIO的引脚可以灵活配置为输入或输出模式。通过配置寄存器或使用特定的编程接口,可以确定引脚的模式、状态和电平。
状态读取:GPIO可以读取引脚的状态,即引脚的电平信息。通过读取引脚的状态,可以检测按钮的按下、开关的状态、传感器的测量值等。
状态设置:GPIO可以设置引脚的状态,即设置引脚的电平信息。通过设置引脚的状态,可以控制外部设备的状态、发送数据或控制命令。
扩展性:某些系统支持多个GPIO引脚,可以通过扩展芯片或GPIO扩展板增加引脚的数量,从而满足更多外部设备的连接和控制需求。
通信接口:GPIO可以用于与各种外部设备进行通信,如传感器、显示器、驱动器等。通过读取和设置引脚的状态,可以实现与外部设备之间的数据交换和控制操作。
四:GPIO库函数
GPIO初始化:
GPIO_InitTypeDef GPIO_InitStructure; //结构体定义
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //该参数选择待设置的 GPIO 管脚,使用操作符“|”可以一次选中多个管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //用以设置选中管脚的速率
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //用以设置选中管脚的工作状态
GPIO_Init(GPIOA, &GPIO_InitStructure);//
五:寄存器
4 个 32 位 配 置 寄 存 器
GPIOx_MODER 模式寄存器
GPIOx_OTYPER 输出模式寄存器
GPIOx_ OSPEEDR 输出速度寄存器
GPIOx_PUPDR 上拉下拉寄存器
2 个 32 位数据寄存器
GPIOx_IDR 输入数据寄存器
GPIOx_ODR 输出数据寄存器
1个 32 位置位 / 复位寄存器
GPIOx_BSRR 置位 / 复位寄存器
2 个 32 位复用功能寄存器
GPIOx_AFRH
GPIOx_AFR
GPIO相关寄存器功能
GPIOx_MODER(模式寄存器):用于配置GPIO引脚的模式(输入或输出)。每个引脚通常使用两个位表示模式,例如00表示输入模式,01表示输出模式。
GPIOx_OTYPER(输出模式寄存器):用于配置GPIO引脚的输出类型。每个引脚通常使用一个位表示输出类型,例如0表示推挽输出,1表示开漏输出。
GPIOx_OSPEEDR(输出速度寄存器):用于配置GPIO引脚的输出速度。每个引脚通常使用两个位表示输出速度,例如00表示低速,11表示高速。
GPIOx_PUPDR(上拉下拉寄存器):用于配置GPIO引脚的上拉或下拉电阻。每个引脚通常使用两个位表示上拉/下拉配置,例如00表示无上拉/下拉,01表示上拉,10表示下拉。
GPIOx_IDR(输入数据寄存器):用于读取GPIO引脚的输入数据状态。每个位对应一个引脚,读取该位可以获取相应引脚的输入电平。
GPIOx_ODR(输出数据寄存器):用于写入GPIO引脚的输出数据状态。每个位对应一个引脚,写入该位可以设置相应引脚的输出电平。
GPIOx_BSRR(置位/复位寄存器):用于通过设置或复位位来控制GPIO引脚的输出电平。每个引脚通常使用两个位,一个位用于置位(设置为1),另一个位用于复位(设置为0)。
GPIOx_AFRH和GPIOx_AFRL(复用功能寄存器):用于配置GPIO引脚的复用功能,例如将引脚用作特定的外设功能(如UART、SPI等)。这些寄存器通常将32位分为两个部分,每个部分对应一组引脚。
六:函数
这里是常用的函数,我遇到会更新
函数名:GPIO_WriteBit
- 功能描述:设置或者清除指定的数据端口位
- 参数1:GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
- 参数2:GPIO_Pin:待设置或者清除指的端口位 ,该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
- 参数3:BitVal: 该参数指定了待写入的值 ,该参数必须取枚举 BitAction 的其中一个值 ,Bit_RESET: 清除数据端口位 ,Bit_SET: 设置数据端口位
相关文章:

STM32-GPIO详解
目录 一:GPIO基本概念 编辑 二:GPIO的实际应用 三:功能描述 四:GPIO库函数 五:寄存器 GPIO相关寄存器功能 一:GPIO基本概念 GPIO是英文General Purpose Input/Output的缩写,中文翻译为…...
【Framework系列之Client】UIManager和UIPanel模块介绍
今天来介绍一下UIManager和UIPanel模块,话不多说直接开始。 UIManager 功能介绍 UIManager是管理UIPanel的唯一模块,UIManager的主要功能包括: 提供打开、隐藏、关闭UIPanel的相关接口。负责UIPanel对象的创建以及初始化。负责储存UIPanel对…...

阿里云操作系统控制台——ECS操作与性能优化
引言:在数字化时代,云服务器作为强大的计算资源承载平台,为企业和开发者提供了灵活且高效的服务。本文将详细介绍如何一步步操作云服务器 ECS,从开通到组件安装,再到内存全景诊断,帮助快速上手,…...

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)
背景: 已经用这个脚本的记得设置Wifi时候,关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开,一天要重新连接,点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本,那样我就可以解放双手&…...

第51天:Web开发-JavaEE应用SpringBoot栈身份验证JWT令牌Security鉴权安全绕过
#知识点 1、安全开发-JavaEE-身份验证-JWT&Security 2、安全开发-JavaEE-安全问题-不安全写法&版本漏洞 #开发框架-SpringBoot 参考:Spring Boot 中文文档 一、身份验证的常见技术: 1、JWT 2、Shiro 3、Spring Security 4、OAuth 2.0 5、SSO 6、…...

中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)
OceanBase《DB 大咖说》第 15 期,我们邀请到了中原银行金融科技部数据团队负责人,吕春雷。本文为本期大咖说的精选。 吕春雷是一位资历深厚的数据库专家,从传统制造企业、IT企业、甲骨文公司到中原银行,他在数据库技术与运维管理…...
Java面试第八山!《Spring框架》
一、Spring框架概述 Spring是Java企业级应用开发的核心框架,通过控制反转(IoC)和 面向切面编程(AOP)实现模块解耦,简化开发流程。其核心优势包括依赖注入、声明式事务管理、集成主流ORM框架(如…...
LangChain教程 - Agent - 支持 9 种 ReAct 交互
引言 LangChain 总结了 9 种经典的复杂模型交互模式,每种都针对特定任务设计,兼具独特优势与适用场景,内容涵盖: ReAct、Function Call、知识库、搜索等,使用这些模式可以大大简化这些场景开发难度。这些模式可以使用…...

蓝桥杯备赛日记【day1】(c++赛道)
一、裁纸刀问题(2022、规律、思维、省赛) 解法思路: 参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现,我们的行的裁剪次数为(m-1) 次,而每行都需要裁剪列数…...

【大模型基础_毛玉仁】1.4 语言模型的采样方法
【大模型基础_毛玉仁】1.4 语言模型的采样方法 1.4 语言模型的采样方法1.4.1 概率最大化方法1)贪心搜索(GreedySearch)2)波束搜索(BeamSearch) 1.4.2 随机采样方法1)Top-K 采样2)Top…...

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:SAM 文件 & Windows 本地认证流程 0x0101:SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的,在登录 Windows 的时候&am…...

基于SNR估计的自适应码率LDPC编译码算法matlab性能仿真,对比固定码率LDPC的系统传输性能
目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 基于序列的SNR估计 2.2 基于SNR估计值进行码率切换 2.3 根据数据量进行码率切换 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印)&…...
opencv 模板匹配方法汇总
在OpenCV中,模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法,通过cv2.matchTemplate函数实现,该函数支持的匹配方式主要有以下6种,下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...

Embedding技术:DeepWalkNode2vec
引言 在推荐系统中,Graph Embedding技术已经成为一种强大的工具,用于捕捉用户和物品之间的复杂关系。本文将介绍Graph Embedding的基本概念、原理及其在推荐系统中的应用。 什么是Graph Embedding? Graph Embedding是一种将图中的节点映射…...
微信小程序注册组件
在微信小程序中注册组件分为自定义组件的创建和全局/局部注册,下面为你详细介绍具体步骤和示例。 自定义组件的创建 自定义组件由四个文件组成,分别是 .js(脚本文件)、.json(配置文件)、.wxml(…...

【docker】安装mysql,修改端口号并重启,root改密
我的docker笔记 【centOS】安装docker环境,替换国内镜像 1. 配置镜像源 使用阿里云镜像加速器,编辑/etc/docker/daemon.json sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https:/…...
自定义wordpress三级导航菜单代码
首先,在你的主题functions.php文件中,添加以下代码以注册一个新的菜单位置: function mytheme_register_menus() {register_nav_menus(array(primary-menu > __(Primary Menu, mytheme))); } add_action(init, mytheme_register_menus); …...

洛谷 P1480 A/B Problem(高精度详解)c++
题目链接:P1480 A/B Problem - 洛谷 1.题目分析 1:说明这里是高精度除以低精度的形式,为什么不是高精度除以高精度的形式,是因为它很少见,它的模拟方式是用高精度减法来做的,并不能用小学列竖式的方法模拟…...
JAVA入门——网络编程简介
自己学习时的笔记,可能有点水( 以后可能还会补充(大概率不会) 一、基本概念 网络编程三要素: IP 设备在网络中的唯一标识 端口号 应用软件在设备中的唯一标识两个字节表示的整数,0~1023用于知名的网络…...

Ubuntu 合上屏幕 不待机 设置
有时候需要Ubuntu的机器合上屏幕的时候也能正常工作,而不是处于待机状态。 需要进行配置文件的设置,并重启即可。 1. 修改配置文件 /etc/systemd/logind.conf sudo vi /etc/systemd/logind.conf 然后输入i,进入插入状态,修改如…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...