一、GPIO的八种模式

GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和4种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出)。

GPIO_Mode_AIN模拟输入
GPIO_Mode_IN_FLOATING浮空输入
GPIO_Mode_IPD下拉输入
GPIO_Mode_IPU上拉输入
GPIO_Mode_Out_OD开漏输出
GPIO_Mode_Out_PP推挽输出
GPIO_Mode_AF_OD复用开漏输出
GPIO_Mode_AF_PP复用推挽输出

开漏输出:mos管导通,输出强低电平;mos管截止,此时mos管电阻无穷大,如果无外部上拉电路,输出为高阻态,如果有外部上拉电路,输出为弱高电平(驱动能力较弱)

推挽输出:NMOS管导通,PMOS管截止,输出强低电平;NMOS管截止,PMOS管导通,输出强高电平

二、端口复用功能

        由数据手册可以得知,每一个IO口都有很多功能,比如PA4可以做SPI1的片选,也可以做SPI3的片选,这些都是IO端口的复用功能

使用硬件SPI时,此时的引脚需要使用复用功能,即配置为复用推挽输出

void SPI1_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_SPI1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

使用硬件iic时,引脚配置为复用开漏输出

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(i2cHandle->Instance==I2C2){__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
}

 使用软件iic时,此时的SCL和SDA引脚完全由我们控制,所以不使能复用功能,直接配置为开漏输出,然后SDA引脚读数据时配置为上拉输入模式,写数据时配置为开漏输出即可

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(i2cHandle->Instance==I2C2){__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
}

注意:SPI作为主机,MISO配置为浮空输入或者复用推挽输出都可以,原因在于,MISO引脚的功能就是读取电平信号,所以配置为输入模式没有问题,当配置为复用推挽输出时,我们会把MISO端口的使用权交给SPI,他会自己控制MISO的端口模式为输入模式

三、GPIO速度

#define  GPIO_SPEED_FREQ_LOW         0x00000000U  /*!< IO works at 2 MHz, please refer to the product datasheet */
#define  GPIO_SPEED_FREQ_MEDIUM      0x00000001U  /*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */
#define  GPIO_SPEED_FREQ_HIGH        0x00000002U  /*!< range 25 MHz to 100 MHz, please refer to the product datasheet  */
#define  GPIO_SPEED_FREQ_VERY_HIGH   0x00000003U  /*!< range 50 MHz to 200 MHz, please refer to the product datasheet  */

配置高速:输出频率高,噪音大,功耗高,电磁干扰强; 

配置低速:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能;

我们知道GPIO速度有四种模式,低速,中速,高速和超高速,其中不同的速度对应不同的时钟频率。

  • 低速:USART(115.2kbps)、按键扫描。
  • 中速:I2C(400kbps)。
  • 高速:SPI(18Mbps)、PWM高频信号。
  • 超高速:QSPI FLASH,FMC,以太网等高速。

注意事项:

1、如果你使用9600波特率UART通信,建议速度配置为低。所以,如果你想使产品更加完美,速度配置也是关键的一项。

2、比如SPI时钟配置时,如果配置为30Mhz,那么GPIO引脚的速度最起码配置为高速模式,不然信号可能会失真。

3、GPIO设为输入模式时,输出驱动电路断开,速度配置无意义。此时应关注上拉/下拉电阻配置。

4、使用Cubemx生成代码时,SPI选用软件片选信号,此时注意GPIO口速度默认为低速模式,但是SPI一般配置高速模式,此时防止数据乱码需要修改GPIO口速度

四、如何选择I/O模式

  1. 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
  2. 带上拉输入_IPU——IO内部上拉电阻输入
  3. 带下拉输入_IPD—— IO内部下拉电阻输入
  4. 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
  5. 开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
  6. 推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
  7. 复用功能的开漏输出_AF_OD ——片内外设功能(I2C的SCL、SDA)
  8. 复用功能的推挽输出_AF_PP——片内外设功能(USART的TX和RX、SPI的MOSI、MISO.SCK)

五、JTAG引脚作为GPIO使用要注意

例如PA15引脚,它默认时JTDI引脚,但是可以复用为SPI的NSS片选信号。在初始化时,需要先开启AFIO时钟,再关闭JTAG功能,否则GPIO功能仍然不起作用。初始化代码如下:

stm32f103

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);      /*使能SWD 禁用JTAG*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* CS: PA15 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);

兆易创新gd32F103 

void micromotor_alarm_gpio_config(void)
{//1.GPIO引脚时钟使能rcu_periph_clock_enable(RCU_GPIOA);		//2.复用功能时钟使能																															rcu_periph_clock_enable(RCU_AF);																		 	//3.GPIO配置为推完输出模式gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_15);				//4.重映射配置:JTAG-DP禁用和SW-DP使能	gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);						//5.引脚配置为低电平gpio_bit_reset(GPIOA,GPIO_PIN_15);																				
}

常见的调试接口:

SW调试接口: PA13、PA14共两个引脚

JTAG调试接口: PA13、PA14、PA15、PB3、PB4共五个引脚

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

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

相关文章

django rest_framework 自定义403 Forbidden错误页面

django本来有是可以很方便自定义HTTP错误页面的&#xff0c;网上资料一大把。核心是在项目的urls代码中增加handler403的定义&#xff0c;比如&#xff1a; handler403 "app.views.your_custom_view" 404&#xff0c;500都是一样的&#xff0c;重新定义handler404…

Kafka Streams架构深度解析:从并行处理到容错机制的全链路实践

在流处理技术领域&#xff0c;Kafka Streams以其轻量级架构与Kafka生态的深度整合能力脱颖而出。作为构建在Kafka生产者/消费者库之上的流处理框架&#xff0c;它通过利用Kafka原生的分区、副本与协调机制&#xff0c;实现了数据并行处理、分布式协调与容错能力的无缝集成。本文…

【嵌入式硬件实例】-555定时器控制舵机/伺服电机

555定时器控制舵机/伺服电机 文章目录 555定时器控制舵机/伺服电机1、555定时器介绍2、舵机/伺服电机介绍3、硬件准备与接线使用 555 定时器 IC 的伺服电机控制器和测试仪电路是一个简单的电路,可用于生成操作伺服电机所需的控制信号。该电路允许我们通过按下按钮手动驱动/控制…

国产麒麟 安装可视化数据库软件DBeaver(图解)

目录 ​​​​​​​​编辑DBeaver介绍 官网 通过强制使用 Ubuntu 模板来修复 add-apt-repository 重新添加 PPA 撤销更改&#xff08;可选&#xff09; 官网直接下载 DBeaver CE 下载好后安装软件 启动方式一 启动方式二 启动成功 在左侧右击新建连接 安装驱动 测…

线程池 JMM 内存模型

线程池 & JMM 内存模型 文章目录 线程池 & JMM 内存模型线程池线程池的创建ThreadPoolExecutor 七大参数饱和策略ExecutorService 提交线程任务对象执行的方法&#xff1a;ExecutorService 关闭线程池的方法&#xff1a;线程池最大线程数如何确定&#xff1f; volatile…

[论文阅读] 软件工程 + 教学 | 软件工程项目管理课程改革:从传统教学到以学生为中心的混合式学习实践

软件工程项目管理课程改革&#xff1a;从传统教学到以学生为中心的混合式学习实践 论文信息 arXiv:2506.14369 Agile and Student-Centred Teaching of Agile/Scrum Concepts Maria Spichkova Comments: Preprint. Accepted to the 29th International Conference on Knowledg…

Windows系统提示“mfc140u.dll丢失”?详细修复指南,一键恢复程序运行!

当你兴致勃勃地打开某个游戏或专业软件时&#xff0c;突然弹出一条错误提示——“MFC140u.dll丢失”&#xff0c;程序直接闪退&#xff0c;让人无比沮丧。别担心&#xff01;这个问题并不复杂&#xff0c;通常只需重新安装运行库或修复系统文件即可解决。本文将为你提供详细的修…

云XR(AR/VR)算力底座关键特征与技术路径

云XR&#xff08;AR/VR&#xff09;算力底座是支撑扩展现实技术规模化落地的核心基础设施&#xff0c;当前发展呈现以下关键特征与技术路径&#xff1a; 一、算力架构&#xff1a;云边端协同异构融合 分布式部署模式‌ 云端‌&#xff1a;承担高复杂度渲染与大数据处理&#x…

Android开发常用adb合集

Android开发常用adb合集 Android开发常用adb合集crash日志导出 Android开发常用adb合集 crash日志导出 bugreport: adb bugreportdropbox: adb shell dumpsys dropbox --print > desktop/full_dropbox_logs.txt

LTspice仿真4——exp指数函数波形

参数设置 Vinitial&#xff1a;初始电压值 Vpulsed&#xff1a;脉冲达到值 Rise Delay&#xff1a;上升延迟时间 Rise Tau&#xff1a;上升指数系数tau Fall Delay&#xff1a;下降延迟时间 Fall Tau&#xff1a;下降指数系数tau tau决定指数波形下降或者上升快慢&#x…

[Java 基础]集合框架

在 Java 中&#xff0c;我们经常需要存储和操作一组数据&#xff0c;而集合框架就是为此而生。它提供了一套统一的接口和类&#xff0c;帮助我们高效地管理各种数据集合。 常用的集合框架中的类只有 ArrayList、LinkedList、HashSet、HashMap 这 4 个&#xff0c;这些类的继承…

SQL关键字三分钟入门:WITH —— 公用表表达式让复杂查询更清晰

在实际的数据库开发和分析中&#xff0c;我们常常会遇到复杂的多层嵌套查询&#xff0c;这样的 SQL 语句不仅难以阅读&#xff0c;也容易出错。 这时候就需要使用一个非常实用又优雅的关键字 —— WITH&#xff01; 它可以帮助我们将复杂的子查询提取出来并命名&#xff0c;从…

要在 Linux 不联网服务器 上部署并运行 Gitee 上的 vue-vben-admin 项目,并且该项目使用的是 pnpm 管理依赖

目录 ✅ 目标&#xff1a;在不联网服务器中成功运行 vue-vben-admin &#x1f449; 你需要的最终环境&#xff1a; ✅ 场景&#xff1a;完全离线部署并运行开发/构建环境 &#x1f9f1; 步骤总览&#xff1a; &#x1f6e0; 详细操作流程 ✅ 第 1 步&#xff1a;联网机器准…

中国风国潮通用PPT模版

中国风答辩总结汇报类通用PPT模版&#xff0c;古风PPT通用模版&#xff0c;国学精品PPT模版&#xff0c;中国风韵PPT模版 中国风国潮通用PPT模版&#xff1a;https://pan.quark.cn/s/59cea717fe8d

【nvidia-H100-ib排障实战2】:服务器 InfiniBand 网络性能问题深度分析

目录 InfiniBand 网络性能日志: 实际生产服务器 InfiniBand 网络性能问题深度分析 一、核心问题定位:mlx5_1 设备性能异常 二、问题详细分析 1. mlx5_1 设备异常原因推测 (1)硬件连接故障 (2)驱动或固件问题 (3)资源争用或配置错误 2. CPU 频率不一致问题 三…

Postgresql中不同数据类型的长度限制

目录 一、字符类型&#xff08;Character Types&#xff09; 二、二进制类型&#xff08;Binary Types&#xff09; 三、数值类型&#xff08;Numeric Types&#xff09; 四、其他类型 五、全局限制&#xff1a;单行数据总大小 示例对比表 注意事项 验证命令 在 Postgr…

Unity Hub 新建项目,启动 Unity 闪退的解决办法

问题&#xff1a; Win11: Unity 闪退&#xff0c;提示 Could not connect project 原因 这是 Firewall & network protection 在作怪&#xff0c;真的我感觉 Windows Defender 就从来没干过好事&#xff0c;那个遍地是病毒的年代微软你不搞个杀毒软件&#xff0c;现在…

学习打卡---回溯

回溯&#xff0c;所有回溯都可以转换成树形结构进行解决 我们将树形结构分为纵向和横向两个方面 递归是纵向循环&#xff0c;也就是纵向方面&#xff0c;到了叶子节点就收网回溯 循环是横向循环&#xff0c;也就是横向方面&#xff0c;到了数组末尾就结束 回溯属于是将二叉树的…

阿里云获取DASHSCOPE_API_KEY教程,以及配置DASHSCOPE_API_KEY环境变量

要获取阿里云的 DASHSCOPE_API_KEY&#xff08;通义千问API密钥&#xff09;&#xff0c;需要在阿里云平台上完成开通服务和创建密钥的流程。以下是具体步骤&#xff1a; 1. 开通通义千问API服务 登录阿里云账号 访问 阿里云官网&#xff0c;使用账号密码或RAM用户登录。 进入…

《去哪儿网Redis高并发实战:从问题定位到架构升级》

去哪儿网Redis高并发实战&#xff1a;从问题定位到架构升级 在互联网行业竞争日益激烈的当下&#xff0c;高并发场景下的系统性能优化一直是技术团队面临的重要挑战。对于去哪儿网这类在线旅游平台来说&#xff0c;节假日期间的流量高峰更是对系统架构的严峻考验。本文将深入剖…