STM32的GPIO的详细配置指南

1. GPIO简介

  • GPIO(General Purpose Input/Output)是用于在微控制器中与外部世界通信的接口。
  • 通过GPIO,微控制器可以控制外部设备(如LED、LCD、按键等)的状态,也可以接收外部设备的状态(如传感器数据)

2. GPIO配置寄存器

  • GPIO配置寄存器用于配置和控制GPIO引脚的行为。
  • 主要的GPIO寄存器包括:
    • GPIO配置寄存器(GPIOx_CR):用于配置引脚的模式、速度、上拉/下拉等。
    • GPIO有如下几种需要配置的属性:
  1. 模式(Mode):

    • 每个引脚可以配置为输入、输出或复用模式。
    • 通常使用两个位来表示一个引脚的模式,例如MODE0和MODE1位表示一个引脚的模式。可以根据引脚数量的不同,有不同数量的MODE位。
  2. 速度(Speed):

    • 速度字段用于配置引脚的输出速度。
    • 通常有两个位来表示一个引脚的输出速度,例如SPEED0和SPEED1位。速度可以分为低速、中速、高速和非速度控制。
    • IO引脚的速度设置用于控制引脚的输出信号变化速率,其主要目的是优化系统性能和电气特性。具体来说,速度设置可以影响到引脚输出信号的上升时间和下降时间,从而影响到信号的稳定性、功耗和电磁兼容性等方面。

    • 以下是速度设置的一些常见用途:

      • 信号带宽和响应速度: 高速输出可以使得信号在引脚之间传输更快,从而提高系统的响应速度和通信带宽。特别是在高频率通信或者快速数据传输的应用中,选择较高的速度设置可以确保信号传输的及时性和准确性。

      • 时序要求和稳定性: 在一些时序要求严格的应用中,如时钟信号、同步信号等,选择适当的速度设置可以确保引脚输出信号的上升时间和下降时间满足时序要求,从而保证系统的稳定性和可靠性。

      • 功耗优化: 在一些功耗敏感的应用中,选择适当的速度设置可以降低引脚的功耗。通常来说,较低的速度设置会使得引脚输出信号的切换速度降低,从而降低功耗并减少电流消耗。

      • 电磁兼容性(EMC): 选择适当的速度设置可以减少引脚输出信号的边沿过渡速率,从而降低系统的辐射噪声和电磁干扰(EMI)水平,有助于提高系统的电磁兼容性。

  3. 上拉/下拉(Pull-up/Pull-down):

    • 上拉和下拉功能允许在引脚处于输入模式时,通过内部上拉或下拉电阻将引脚拉高或拉低。
    • 通常有两个位来表示一个引脚的上拉/下拉配置,例如PUPD0和PUPD1位。可以选择上拉、下拉、或者不使能上拉/下拉。
  4. 复用(Alternate Function):

    • 引脚可以配置为多种不同的功能,如串口通信、SPI通信等。
    • 每个引脚通常有一个或多个复用功能,需要选择对应的复用功能编号。
  5. 输出类型(Output Type):

    • 输出类型字段用于配置引脚的输出类型,可以选择推挽输出或开漏输出。
    • 通常有一个位来表示一个引脚的输出类型,例如OT位。可以选择推挽输出或开漏输出。
    • 二种输出的区别:

      • 推挽输出(Push-Pull Output):
        •  在推挽输出模式下,引脚可以提供两种状态:高电平(逻辑1)和低电平(逻辑0)。
        • 当输出为高电平时,引脚会被连接到电源(例如VCC),从而输出高电平信号;当输出为低电平时,引脚会被连接到地(例如GND),从而输出低电平信号。
        • 推挽输出具有较低的输出阻抗,可以提供较强的驱动能力,适用于驱动各种负载,如LED、电机、传感器等。
        • 推挽输出适用于多种应用场景,常用于数字电路中。
      • 开漏输出(Open-Drain Output):
        •   在开漏输出模式下,引脚只能提供两种状态之一:低电平或者高阻态(开漏)。        
        • 当输出为低电平时,引脚被连接到地(例如GND),输出低电平信号;当输出为高阻态时,引脚处于高阻态,不提供电平信号。
        • 为了产生高电平信号,需要外部上拉电阻将引脚连接到电源(例如VCC)。这样,当引脚处于高阻态时,上拉电阻可以确保引脚上的电压为高电平。
        • 开漏输出具有较高的输出阻抗,驱动能力较弱,主要用于与其他器件进行电平匹配或者构建开漏总线(如I2C总线)等场景
    • 应用场景

      • 推挽输出的实际应用:
         
        • LED控制:LED灯通常通过推挽输出来控制。当输出为高电平时,LED亮起;当输出为低电平时,LED熄灭。

        • 电机驱动:在电机驱动电路中,推挽输出用于控制电机的正转和反转。通过控制两个推挽输出引脚的状态,可以控制电机的运动方向。

        • 数字信号输出:在数字信号输出场景中,推挽输出用于产生数字信号,如驱动蜂鸣器发出蜂鸣声、控制继电器等。

        • LCD控制:在液晶显示器(LCD)控制电路中,推挽输出用于控制LCD的各个像素点,实现图像显示。

      • 开漏输出的实际应用:
        • I2C总线:在I2C总线通信中,开漏输出用于构建总线的时钟线(SCL)和数据线(SDA)。多个设备可以共享同一条总线,通过开漏输出实现多主机通信。

        • GPIO级联:在多个GPIO设备之间进行级联连接时,开漏输出可以实现电平匹配。例如,在多个微控制器之间进行通信时,一个设备的开漏输出连接到另一个设备的输入引脚。

        • 模拟开关控制:在一些模拟电路中,开漏输出可以用作模拟开关控制。例如,在电源管理电路中,开漏输出可以用于控制电池充电和放电。

        • 多路选择器(MUX)控制:在多路选择器电路中,开漏输出可以用于控制选择器的通道。通过开漏输出,可以实现多个输入信号的选择和切换。

实际STM32应用中可以配置8种模式!

  • 输入数据寄存器(GPIOx_IDR):用于读取输入引脚的状态。
  • 输出数据寄存器(GPIOx_ODR):用于设置输出引脚的状态。

stm32f10x_gpio.h中,GPIO的模式配置的枚举类型是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;

这些枚举值表示了STM32F10x系列微控制器支持的8种GPIO模式配置,具体含义如下:

  1. GPIO_Mode_AIN:模拟输入模式,用于连接模拟信号输入。

  2. GPIO_Mode_IN_FLOATING:浮空输入模式,用于连接外部数字信号输入,不使用上拉或下拉电阻。

  3. GPIO_Mode_IPD:下拉输入模式,引脚上使用内部下拉电阻。

  4. GPIO_Mode_IPU:上拉输入模式,引脚上使用内部上拉电阻。

  5. GPIO_Mode_Out_OD:开漏输出模式,输出开漏状态,通常需要外部上拉电阻。

  6. GPIO_Mode_Out_PP:推挽输出模式,输出可通过输出寄存器直接控制高低电平。

  7. GPIO_Mode_AF_OD:复用开漏输出模式,用于复用功能,输出开漏状态。

  8. GPIO_Mode_AF_PP:复用推挽输出模式,用于复用功能,输出可通过输出寄存器直接控制高低电平。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握使用 React 和 Ant Design 的个人博客艺术之美

文章目录 前言在React的海洋中起航安装 Create React App安装Ant Design 打造个性化的博客风格通过路由实现多页面美化与样式定制部署与分享总结 前言 在当今数字时代,个人博客成为表达观点、分享经验和展示技能的独特平台。在这个互联网浪潮中,选择使用…

Unity 状态模式(实例详解)

文章目录 简介示例1:基础角色状态切换示例2:添加更多角色状态示例3:战斗状态示例4:动画同步状态示例5:状态机管理器示例6:状态间转换的条件触发示例7:多态行为与上下文类 简介 Unity 中的状态模…

el-input 显示最大长度和已输入内容长度

效果如下图 多行文本框&#xff1a; 单行文本框&#xff1a; 需要设置 maxlength 和 show-word-limit 两个属性&#xff0c;在使用 maxlength 属性限制最大输入长度的同时&#xff0c;可通过设置 show-word-limit 属性来展示字数统计。 <el-inputtype"textarea&quo…

《HTML 简易速速上手小册》第6章:HTML 语义与结构(2024 最新版)

文章目录 6.1 语义化标签的重要性6.1.1 基础知识6.1.2 案例 1&#xff1a;使用 <article>, <section>, <aside>, <header>, 和 <footer>6.1.3 案例 2&#xff1a;构建带有嵌套语义化标签的新闻网站6.1.4 案例 3&#xff1a;创建一个带有 <mai…

SSD寻址单元IU对寿命的影响有多大?

随着存储技术的不断进步&#xff0c;固态硬盘SSD的容量正以惊人的速度增长&#xff0c;尤其是采用高密度QLC NAND闪存技术的大容量SSD&#xff0c;如30TB及以上级别的产品。QLC NAND由于每个单元能够存储4比特数据&#xff0c;从而显著提高了存储密度&#xff0c;但同时也带来了…

纯html+css+js静态汽车商城

首页代码 <!DOCTYPE html> <html class"no-js" lang"zxx"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&qu…

学会用Python分割、合并字符串

在很多情况下&#xff0c;我们需要对字符串进行分割或合并&#xff0c;以满足特定的需求&#xff0c;例如将字符串拆分成多个部分、将多个字符串合并成一个等等。Python提供了多种方法来进行字符串的分割和合并&#xff0c;本文将介绍其中几种常用的方法。 一、使用split()函数…

Vue-43、Vue中组件自定义事件

1、给学生绑定atguigu事件 2、在组件内触发事件 第二种写法 传多个参数。 解绑 解绑一个事件 解绑多个自定义事件 this.$off([xxx1,xxx2]);解绑所有事件 this.$off();总结

IDEA Java常用快捷键

目录 main方法快捷键&#xff1a;psvm输出语句&#xff1a;sout复制行&#xff1a;ctrld删除行&#xff1a;ctrly单行注释或多行注释 &#xff1a; Ctrl / 或 Ctrl Shift /for循环 直接 &#xff1a;fori代码块包围&#xff1a;try-catch,if,while等 ctrlaltt缩进&#xff1…

四、防御保护---防火墙NAT篇

四、防御保护---防火墙NAT篇 一、源NAT二、目标NAT三、双向NAT四、多出口NAT 一、源NAT 源NAT — 基于源IP地址进行转换。我们之前接触过的静态NAT&#xff0c;动态NAT&#xff0c;NAPT都属于源NAT&#xff0c;都是针对源IP地址进行转换的。源NAT主要目的是为了保证内网用户可…

一体化设计:兼容多种OS系统Linux网关楼宇DDC

在工业物联网&#xff08;IIoT&#xff09;和智能建筑领域&#xff0c;钡铼网关具备高度灵活性与强大计算能力的边缘网关产品正逐渐成为推动行业智能化转型的关键要素。本文将详细介绍的基于Linux系统的4G工业智能网关&#xff0c;不仅拥有NXP i.MX8M Mini四核64位处理器的强大…

《golang设计模式》第三部分·行为型模式-10-模板方法(Template Method)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 模板方法&#xff08;Template Method&#xff09;用来定义算法的框架&#xff0c;将算法中的可变步骤定义为抽象方法&#xff0c;指定子类实现或重写。 1.1 角色 AbstractClass&#xff08;…

Kettle-Docker部署+Sqlserver数据同步Mysql+Start定时任务

一. 背景介绍 1. ETL是什么 ETL&#xff08;Extract-Transform-Load&#xff09;&#xff0c;即数据抽取、转换、装载的过程。它是一种思想&#xff0c;主要是说&#xff0c;从不同的数据源获取数据&#xff0c;并通过对数据进行处理&#xff08;格式&#xff0c;协议等转换&a…

第32关 k8s集群管理开源神器 - k9s

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。 随着我们管理维护的K8S集群上线&#xff0c;怎么管理好集群上面成百上千的服务pod&#xff0c;就是我们该操心的事情了。这里博哥把在生产中一直在用的一个开源管理工具k8s&#xff0c;github…

Jenkins如何从GIT下拉项目并启动Tomcat

一、先添加服务器 二、添加视图 点击控制台输出&#xff0c;滑到最下面&#xff0c;出现这个就说明构建成功了&#xff0c;如果没有出现&#xff0c;说明构建有问题&#xff0c;需要解决好问题才能启动哦~

C++实现通讯录管理系统

目录 1、系统需求 2、创建项目 2.1 创建项目 3、菜单功能 4、退出功能 5、添加联系人 5.1 设计联系人结构体 5.2 设计通讯录结构体 5.3 main函数中创建通讯录 5.4 封装联系人函数 5.5 测试添加联系人功能 6、显示联系人 6.1 封装显示联系人函数 7、删除联系人 7.1…

GPT栏目:yarn 安装

GPT栏目&#xff1a;yarn 安装 一、前言 在跟GPT交互的时候&#xff0c;发现最近gpt4给出的答案率有了比较明显的提高&#xff0c;简单记录一下&#xff0c;我用gpt4拿到的答案吧。 本人已按照这个步骤成功 二、具体步骤 要安装 yarn&#xff0c;你可以按照以下步骤进行操作…

MyBatis常见面试题汇总

说一下MyBatis执行流程&#xff1f; MyBatis是一款优秀的基于Java的持久层框架&#xff0c;它内部封装了JDBC&#xff0c;使开发者只需要关注SQL语句本身&#xff0c;而不需要花费精力去处理加载驱动、创建连接等的过程&#xff0c;MyBatis的执行流程如下&#xff1a; 加载配…

Google Chrome 常用的几个参数

1 右键--Google Chrome--属性--目标 参数作用--disable-infobars此计算机将不会再收到 Google Chrome 更新&#xff0c;因为 Windows XP 和 Windows Vista 不再受支持。适用于 xp、2003 的 49.x.x.x 版本。示例1--ingore-certificate-errors忽略证书错误--disable-background-…

【计算机网络】【练习题及解答】【新加坡南洋理工大学】【Computer Control Network】

说明&#xff1a; 仅供学习使用。 一、题目描述 题目共4问&#xff0c;描述网络通信中的 帧传输时延&#xff08;Frame Delay&#xff09;、传播时延&#xff08;Propagation Delay&#xff09;&#xff0c;以及 链接利用率&#xff08;Link Utilization&#xff09; 的相关…