stm32——GPIO开发
目录
1、什么是GPIO
2、GPIO的作用
3、GPIO的基本结构
4、GPIO引脚的基本结构
5、GPIO端口模式的配置
1. 输入浮空(Input Floating)
2. 输入上拉(Input Pull-Up)
3. 输入下拉(Input Pull-Down)
4. 模拟输入(Analog Input)
5. 开漏输出(Open-Drain Output)
6. 推挽式输出(Push-Pull Output)
7. 推挽式复用功能(Alternate Function Push-Pull)
8. 开漏复用功能(Alternate Function Open-Drain)
6、GPIO重映射
7、GPIO配置的相关寄存器
1、端口配置低寄存器(GPIOx_CRL):
2、端口配置高寄存器(GPIOx_CRH):
3、端口是输入数据寄存器(GPIOx_IDR):
4、端口输出数据寄存器(GPIOx_ODR):
5、端口位设置/清除寄存器(GPIOx_BSSR):
6、端口位清除寄存器(GPIOx_BRR):
7、端口配置锁定寄存器(GPIOx_LCKR):
8、示例
1、开启对应的时钟
2、配置GPIO
3、改变GPIO的数据寄存器
1、什么是GPIO
GPIO(General Purpose Input/Output)是一种通用的输入输出接口,广泛应用于微控制器和单板计算机(如树莓派、Arduino等)。GPIO可以配置为输入或输出,用于控制和读取各种外部设备,比如传感器、开关、LED灯等。
总得来说GPIO是引脚,但是不是所有的引脚都是GPIO
2、GPIO的作用
输出:输出模式下可以控制输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序
输入:输入模式下可以读取端口的高低电平或电压,用于读取按键的输入、外界模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
3、GPIO的基本结构
在STM32中,所有的GPIO都是挂载在APB2外设总线上的,每个GPIO外设各有16个引脚
4、GPIO引脚的基本结构
5、GPIO端口模式的配置
stm32f10x系列芯片举例
从芯片手册可以知道,GPIO有八种模式
1. 输入浮空(Input Floating)
- 功能:引脚处于高阻态,不连接时不会对电路产生影响。此模式适用于读取外部信号。
- 应用:常用于读取开关状态或传感器信号,但在未连接时可能导致引脚浮动,易受干扰。
2. 输入上拉(Input Pull-Up)
- 功能:引脚通过内置的上拉电阻连接到VDD(正电源),未连接时引脚保持高电平。
- 应用:常用于确保输入引脚在未连接时不处于浮动状态,防止误触发。例如,在按钮按下时,读取高电平(按钮未按下时为高电平)。
3. 输入下拉(Input Pull-Down)
- 功能:引脚通过内置的下拉电阻连接到地(GND),未连接时引脚保持低电平。
- 应用:类似上拉输入,常用于确保输入引脚在未连接时保持低电平状态。例如,在按钮按下时,读取低电平(按钮未按下时为低电平)。
4. 模拟输入(Analog Input)
- 功能:引脚被配置为模拟模式,适用于模拟信号的读取,如ADC(模拟数字转换器)的输入。
- 应用:用于连接传感器(如温度传感器、光传感器等),读取模拟信号并转换为数字值。
5. 开漏输出(Open-Drain Output)
- 功能:引脚可以输出低电平(逻辑0),未驱动时引脚处于高阻态。需要外部上拉电阻来将未驱动状态下的引脚拉到高电平。
- 应用:适用于多点连接的信号线(如I2C总线),多个设备可以共享一条线路,避免信号冲突。
6. 推挽式输出(Push-Pull Output)
- 功能:引脚可以输出高电平(逻辑1)或低电平(逻辑0),能够驱动外部负载。
- 应用:用于控制LED、继电器等外部设备,广泛应用于数字输出场景。
7. 推挽式复用功能(Alternate Function Push-Pull)
- 功能:引脚配置为复用模式,能够支持特定外设(如USART、SPI等)的推挽输出。
- 应用:用于数字通信接口,将引脚设置为特定外设的输出引脚。
8. 开漏复用功能(Alternate Function Open-Drain)
- 功能:引脚配置为复用模式,能够支持特定外设(如I2C)的开漏输出。
- 应用:适用于多点连接场景,允许多个设备在同一线路上通信,避免信号冲突。
6、GPIO重映射
GPIO重映射:为了使不同器件封装外设I/O的数量达到最优,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。
7、GPIO配置的相关寄存器
1、端口配置低寄存器(GPIOx_CRL):
配置低八位引脚工作模式的寄存器
2、端口配置高寄存器(GPIOx_CRH):
配置高八位引脚工作模式的寄存器
3、端口是输入数据寄存器(GPIOx_IDR):
保存输入数据的寄存器
4、端口输出数据寄存器(GPIOx_ODR):
设置输出数据的寄存器
5、端口位设置/清除寄存器(GPIOx_BSSR):
对端口位置1和置0的寄存器
6、端口位清除寄存器(GPIOx_BRR):
设置端口位置0的寄存器
7、端口配置锁定寄存器(GPIOx_LCKR):
当执行正确的写序列设置了位16时,这个寄存器可以用来锁定端口的配置,位[15:0]用于锁定GPIO端口的配置,当相应的端口位执行了LOCK序列之后,在下次系统复位前讲不能再更改端口位的配置。每个锁定位锁定口控制寄存器(CRL、CRH)中相应的四个位
8、示例
好的,讲了这么多,各位应该很好奇,那到底应该怎么配置呢,跟着我的步伐,手把手教你配置GPIO
1、开启对应的时钟
从第3点的图中,我们可以知道,GPIO的时钟来自APB2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
这个函数就是标准库为我们封装好的配置APB2时钟的函数
这个函数在stm32f10x_rcc.h中
如果是我一个的keil开发,可以右键这个函数,
第一个就是跳转倒函数的定义
第二个是跳转到函数的声明
/*** @brief Enables or disables the High Speed APB (APB2) peripheral clock.* @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock.* This parameter can be any combination of the following values:* @arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,* RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,* RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,* RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,* RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,* RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,* RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11 * @param NewState: new state of the specified peripheral clock.* This parameter can be: ENABLE or DISABLE.* @retval None*/
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{/* Check the parameters */assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));assert_param(IS_FUNCTIONAL_STATE(NewState));if (NewState != DISABLE){RCC->APB2ENR |= RCC_APB2Periph;}else{RCC->APB2ENR &= ~RCC_APB2Periph;}
}
这就是配置APB2的函数声明,我们选择参数填入
2、配置GPIO
GPIO_Init(GPIOB,&GPIOB_struct);
调用这个函数,继续跳转函数定义
/*** @brief Initializes the GPIOx peripheral according to the specified* parameters in the GPIO_InitStruct.* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.* @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that* contains the configuration information for the specified GPIO peripheral.* @retval None*/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
看注释,第一个参数容易,那么第二个参数怎么办呢??一样,选中参数类型跳转定义
/** * @brief GPIO Init structure definition */typedef struct
{uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins_define */GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.This parameter can be a value of @ref GPIOSpeed_TypeDef */GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
ok,就是一个tepedef的结构体,那我们自己定义一个结构体出来就可以了
GPIO_InitTypeDef GPIOB_struct;GPIOB_struct.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 |GPIO_Pin_14;GPIOB_struct.GPIO_Speed = GPIO_Speed_50MHz;GPIOB_struct.GPIO_Mode = GPIO_Mode_Out_PP;
将这个结构体放在GPIO_IInit函数前面定义出来就OK,每一个成员是什么,应该怎么幅值,看注释和继续类型跳转就ok
比如GPIO_Mode,就点击前面的类型GPIOMode_TypeDef跳转至
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;
选择我们要的模式,幅值给GPIO_Mode就ok了
到此为止GPIO就配置完成
3、改变GPIO的数据寄存器
GPIO_SetBits(GPIOB,GPIO_Pin_12);
这个函数就可以将GPIOB-12的电平拉高
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
这个函数就可以将GPIOB-12的电平拉低
ok,至此,配置寄存器以及GPIO输出高低电平便已完成,外接一个需要电平的led,我们拉高和拉低电平,便可以实现点灯与灭灯
相关文章:

stm32——GPIO开发
目录 1、什么是GPIO 2、GPIO的作用 3、GPIO的基本结构 4、GPIO引脚的基本结构 5、GPIO端口模式的配置 1. 输入浮空(Input Floating) 2. 输入上拉(Input Pull-Up) 3. 输入下拉(Input Pull-Down) 4. …...

layui 自定义验证单选框必填
对于输入框类型必填验证,只需要在 input 输入框加入 lay-verify "required" 即可。但对于单选按钮这种特殊的该怎么办呢?layui 为我们提供了自定义验证。 1. 在单选按钮上添加自定义验证的名称 2. 验证规则如下 // 单选框自定义验证form.ve…...
Spring 设计模式之策略模式
Spring 设计模式之策略模式 策略模式构成部分java举例 策略模式 策略模式:允许定义一系列算法,并将每一个算法封装起来,使它们可以互相替换,且算法的变化可以独立于使用它们的客户端。 构成部分 Context(上下文&…...
苹果开发 IOS 证书生成步骤
前提条件 你手上有一台 Macbook你的苹果账号已被添加到开发人员中 证书创建步骤 打开 XCode 直接生成 p12证书生成后,就可在苹果开发者管理界面中看到你的证书记录登录苹果开发中心,创建 profiles 文件,并下载以上步骤即可,就这…...

DDR2 SDRAM(五)初始化
因为DDR2本质上只是更高级的一种SRAM,底层操作原理和SRAM是一样的,所以很多基础的东西就不再赘述了。 一、原理 在初始化之前,DDR2芯片需要先上电,芯片有多个需要提供的电压,其大小和顺序也有要求,这部分…...

Python工具箱系列(五十七)
图像分割与人脸识别 众所周知图像是由若干有意义的像素组成的,图像分割作为计算机视觉的基础,对具有现有目标和较精确边界的图像进行分割,实现在图像像素级别上的分类任务。图像分割可分为语义分割和实例分割两类,区别如下&#x…...
数据智能驱动金融策略优化:民锋智能分析技术的应用
在现代金融市场中,数据分析与智能化技术的结合为投资策略带来了全新机遇。民锋以智能分析技术为核心,帮助投资者在复杂的市场环境中做出高效决策。本文将深入探讨民锋智能分析技术如何驱动策略优化,为投资者带来更加智能化的支持。 #### 一、…...
1009:带余除法
【题目描述】 给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。 【输入】 一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔…...

Jmeter实际应用
环境准备 JDK1.8Jmeter 5.6.3 下载地址Jmeter 插件 下载地址 放到lib/ext下 常用命令 # 启动 sh jmeter# 集群模式下启动节点,不启动用不了集群 sh jmeter-server#生成ssl需要的证书, 这里会要求输入个密码,是要在jmeter中用的 keytool -import -ali…...

C++基础(11.AVL树的实现)
目录 AVL的概念: AVL树的实现: AVL树的结构: AVL树的插⼊: 平衡因⼦更新: 旋转: AVL树的其他功能: AVL树平衡检测: 测试代码*2: 源代码: KV结构: 源代码: AVL…...
c# 抽象方法 虚函数 使用场景
在C#中,抽象方法(abstract method)和虚函数(virtual method)都是用于实现多态性(polymorphism)的重要特性,但它们在使用上有一些关键的区别和各自的用途。 抽象方法(Abs…...

大数据安全方案 验证
一、背景 文档用于记录配置 Kerberos 和 Ranger 后,对 HDFS、Hive 认证和鉴权的功能测试。 二、Kerberos 验证 2.1、验证功能 1,HDFS 认证 2.1.1、访问 HDFS Kerberos 验证前,访问 HDFS 失败。 Kerberos 验证后,访问 HDFS 成…...

电脑软件:推荐一款免费且实用的电脑开关机小工具
目录 一、软件简介 二、软件功能 三、软件特点 四、使用说明 五、软件下载 今天给大家推荐一款免费且实用的电脑开关机小工具KShutdown,有需要的朋友可以下载试一下! 一、软件简介 KShutdown是一款精巧且实用的定时自动关机小工具,对于…...
php反序列化靶场随笔分析
项目地址:github.com/mcc0624/php_ser_Class 推荐使用docker部署:https://hub.docker.com/r/mcc0624/ser/tags 前面讲了以下php基础,我们直接从class6开始实验 class6 访问页面,传一个序列化的字符串,php代码将其反…...

动态规划 - 编辑距离
115. 不同的子序列 困难 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 10^9 7 取模。 算法思想:利用动态规划,分s[i - 1] 与 t[j - 1]相等,s[i - 1] 与 t[j - 1] 不相等两种情况具…...

力扣——113. 路径总和
113. 路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], t…...
C02S04-Ubuntu基本使用
一、Ubuntu初始配置 1. 使用root用户 Ubuntu系统默认只能使用普通用户,要想使用root用户,需要先设置root用户密码。 进入终端,配置root用户密码。按照提示输入密码。 sudo passwd root配置完成后,执行下面的密码,切换…...

C语言 | Leetcode C语言题解之第525题连续数组
题目: 题解: struct HashTable {int key, val;UT_hash_handle hh; };int findMaxLength(int* nums, int numsSize) {int maxLength 0;struct HashTable* hashTable NULL;struct HashTable* tmp malloc(sizeof(struct HashTable));tmp->key 0, tm…...

Qml-Transition的使用
Qml-Transition的使用 Transition的概述 Transition:定义了当状态发生改变时应用的动画属性animations : list:(Transition)过渡的动画属性enabled : bool:状态发生变化时,是否使能此过渡(Transition)动画…...
Notepad++检索包含多个关键字的行
Notepad检索包含多个关键字的行 在Notepad中,你可以使用正则表达式来检索包含多个关键字的行。以下是具体步骤: 打开Notepad,打开要搜索的文件。 点击菜单栏上的“搜索”选项,然后选择“查找”。 在弹出的查找对话框中…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...