文章目录

  • 前言
  • 一.GPIO 8 种工作模式
  • 二.八种使用方法简单归纳
  • 三.CUBEMX配置过程
    • 1.选择引脚类型
    • 2. 配置引脚
    • 3.巧用User Label
  • 总结

前言

GPIO(英语:General-purpose input/output),通用型之输入输出的简称,其接脚可以供使用者由程控自由使用,PIN 脚依现实考量可作为通用输入(GPI)或通用输出(GPO) 或通用输入与输出(GPIO)


一.GPIO 8 种工作模式

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 复用推挽输出

二.八种使用方法简单归纳

1、上拉输入(没有输入信号的时候默认输入高电平)、下拉输入(在于没有输入信号的时候默认输入低电平)可以用来检测外部信号;IO内部下拉电阻输入例如,按键等;

2、浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的 I2C、USART 的接收端我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的

3、模拟输入
输入模拟信号

4、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5V 电平。

5、对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。

6、在使用任何一种开漏模式时,都需要接上拉电阻。

三.CUBEMX配置过程

1.选择引脚类型

GPIO_Input-输入引脚 GPIO_Output-输出引脚

2. 配置引脚

对于输入引脚,可以配置的就是 GPIO Pull-up/Pull-down。这分别对应的就是 Pull-up(输入上拉)与 Pull-down (输入下拉)。

  • Pull-up: 输入上拉就是把电位拉高,比如拉到
    Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平。电阻同时起到限流的作用。弱强只是上拉电阻的阻值不同,没有什么严格区分。
  • Pull-down: 输入下拉就是把电压拉低,拉到
    GND。与上拉原理相似。简单的说,如果你希望你的引脚平时处于高电平用于检测低电平,你就使用
    Pull-up。如果你希望你的引脚平时处于低电平用于检测高电平,你就使用 Pull-down。


只有浮空,上拉,下拉输入选择

对于输出引脚,比输入多了更多的配置:

  • GPIO output level -> 初始化输出电平
  • GPIO mode -> 输出方式 -> 开漏或推挽输出
  • GPIO Pull-up/Pull-down -> 上拉或下拉输出
  • Maximum output speed 选中 GPIO 管脚的速率

选中 GPIO 管脚的速率的输出模式下,有 3 种输出速度

  • (Low - 2MHz、Medium - 10MHz、High -50MHz)

这个速度是指 I/O 口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在 I/O 口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的 EMI 性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
举个例子:
1、USART 串口,若最大波特率只需 115.2k,那用 2M 的速度就够了,既省电也噪声小。

2、I2C 接口,若使用 400k 波特率,若想把余量留大些,可以选用 10M 的 GPIO 引脚速度。

3、SPI 接口,若使用 18M 或 9M 波特率,需要选用 50M 的 GPIO 的引脚速度。

3.巧用User Label

对于任意引脚,它都有这么一个选项。我想告诉你这个选项特别特别好用!这个选项简单的说就是它帮你在 main.h 中生成 defifine 语句。但是对于 HAL 库编程,main.h 会被用户的每个模块调用,也就是这些 defifine 语句的作用域几乎是全局。其强,无论是换引脚还是换单片机型号,我只需要在 Cube MX 中配置一下,就可以马上投入使用

总结

  • 掌握八种工作模式并了解简单的硬件结构
  • 记忆八种模式的英文名
  • User Label的使用
  • 强化GPIO的使用

清泉HAL库开发STM32之GPIO相关推荐

  1. 清泉HAL库开发STM32之基础概念

    文章目录 前言 一.STM32标准库和HAL库分别是什么? 二.HAL库开发 cubemx新建工程 1.选择 CPU 型号 2.确认时钟源 3. 配置 IO 口 4. 配置系统时钟 5. 进一步配置 ...

  2. 清泉HAL库开发STM32之EXIT

    文章目录 前言 二.外部中断编程实战 HAL库编程步骤 初步调试程序 总结 前言 . STM32F1 外部中断简介 我们首先讲解 STM32F1 IO 口中断的一些基础概念.STM32F1 的每个 I ...

  3. 清泉HAL库开发STM32之USART

    文章目录 前言 一.USART硬件特征 1.物理层 2.协议层 二.STM32 的 USART 简介 USART 和UART 三.编程实战 串口阻塞式发数据 串口非阻塞式发数据 实践现象 总结 前言 ...

  4. 清泉HAL库开发STM32之TIM中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.STM32常见定时器资源? 1.定时器和计数器的区别 2.定时器所关注的问题 3.定时器模式下的时钟概念 4.定时 ...

  5. 使用HAL库开发STM32:ADC基础使用

    文章目录 目的 基础说明 基础使用 配置选项说明 轮询 单通道 单次 轮询 单通道 连续 轮询 多通道 扫描 中断 单通道 中断 多通道 扫描 DMA 单通道 单轮 DMA 单通道 连续 DMA 多通 ...

  6. STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发

    modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...

  7. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  8. 配置CLion进行嵌入式STM32的HAL库开发

    前言 时不可以苟遇,道不可以虚行. 一.准备 1.软件 CLion-2020:百度网盘提取链接放在文章最后. STM32CubeMX:使用 6.5.0 版本的,不要使用最新版本的 CubeMX,不然没 ...

  9. STM32系列之HAL库开发

    STM32系列文章目录 文章目录 STM32系列文章目录 前言 一.HAL库之串口收发 1.配置STM32CUBEID 2.使用串口中断收发 2.1 配置串口中断 2.2 HAL库中断处理逻辑 3 测 ...

最新文章

  1. iOS性能分析-Xcode Instruments Allocations 分析APP内存使用情况
  2. 五大常用算法之二:动态规划算法
  3. 3310复刻版 java_终于等到你:诺基亚3310复刻版开箱简评
  4. python类的参数加self_python类参数self使用示例
  5. python2.7出现的错误
  6. C++ IO常用读写操作
  7. javascript class static
  8. 请领导批阅文件怎么说_有请考过的说物业经理资格证怎么考?
  9. tftp刷路由器 linux,开启tftp服务器 WIN7路由器开启tftp服务器命令方法 | 帮助信息-动天数据...
  10. 首次在matable中安装libsvm碰到的问题和解决方法---- mxGetIr 已过时 错误
  11. 杜比服务器系统安装教程,win10杜比音效如何安装?win10安装杜比音效的详细教程...
  12. 基于aspnet+20ajax问卷调查系统的设计和实现_百度文库,基于ASP.NET问卷调查系统的设计与实现.doc...
  13. PS证件照蓝底转白底红底转白底
  14. python中count什么意思_python中函数COUNT()的功能是什么
  15. 来到 “鹅厂” 的 2019
  16. python从入门到实践十二章
  17. error An unexpected error occurred “httpsregistry.npmjs.orgd3-geo-proje
  18. 洛谷P5545 炸弹攻击2
  19. Mac M1芯片Android Studio使用模拟器
  20. 对finalize的理解

热门文章

  1. 《乌合之众--大众心理研究》读书笔记
  2. 计算机丢失amd-ags-x64.dll,修复amd_ags_x64.dll
  3. java和js中替换字符串的方法
  4. 路人甲的 Python 总结
  5. linux cpu 使用10个进程,linux下获取占用CPU资源最多的10个进程
  6. 三翼鸟:羽翼渐丰,腾飞指日可待
  7. 不同数据库之间的数据迁移方案设计及迁移工具选择
  8. 苹果拟4亿美元收购音乐识别软件Shazam
  9. 大学开学初计算机水平测试,大学新生计算机水平层次划分方法思考与探索
  10. 监控平台实践(三)Telegraf 实现组件监控