清泉HAL库开发STM32之GPIO
文章目录
- 前言
- 一.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相关推荐
- 清泉HAL库开发STM32之基础概念
文章目录 前言 一.STM32标准库和HAL库分别是什么? 二.HAL库开发 cubemx新建工程 1.选择 CPU 型号 2.确认时钟源 3. 配置 IO 口 4. 配置系统时钟 5. 进一步配置 ...
- 清泉HAL库开发STM32之EXIT
文章目录 前言 二.外部中断编程实战 HAL库编程步骤 初步调试程序 总结 前言 . STM32F1 外部中断简介 我们首先讲解 STM32F1 IO 口中断的一些基础概念.STM32F1 的每个 I ...
- 清泉HAL库开发STM32之USART
文章目录 前言 一.USART硬件特征 1.物理层 2.协议层 二.STM32 的 USART 简介 USART 和UART 三.编程实战 串口阻塞式发数据 串口非阻塞式发数据 实践现象 总结 前言 ...
- 清泉HAL库开发STM32之TIM中断
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.STM32常见定时器资源? 1.定时器和计数器的区别 2.定时器所关注的问题 3.定时器模式下的时钟概念 4.定时 ...
- 使用HAL库开发STM32:ADC基础使用
文章目录 目的 基础说明 基础使用 配置选项说明 轮询 单通道 单次 轮询 单通道 连续 轮询 多通道 扫描 中断 单通道 中断 多通道 扫描 DMA 单通道 单轮 DMA 单通道 连续 DMA 多通 ...
- STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发
modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...
- 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项
目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...
- 配置CLion进行嵌入式STM32的HAL库开发
前言 时不可以苟遇,道不可以虚行. 一.准备 1.软件 CLion-2020:百度网盘提取链接放在文章最后. STM32CubeMX:使用 6.5.0 版本的,不要使用最新版本的 CubeMX,不然没 ...
- STM32系列之HAL库开发
STM32系列文章目录 文章目录 STM32系列文章目录 前言 一.HAL库之串口收发 1.配置STM32CUBEID 2.使用串口中断收发 2.1 配置串口中断 2.2 HAL库中断处理逻辑 3 测 ...
最新文章
- iOS性能分析-Xcode Instruments Allocations 分析APP内存使用情况
- 五大常用算法之二:动态规划算法
- 3310复刻版 java_终于等到你:诺基亚3310复刻版开箱简评
- python类的参数加self_python类参数self使用示例
- python2.7出现的错误
- C++ IO常用读写操作
- javascript class static
- 请领导批阅文件怎么说_有请考过的说物业经理资格证怎么考?
- tftp刷路由器 linux,开启tftp服务器 WIN7路由器开启tftp服务器命令方法 | 帮助信息-动天数据...
- 首次在matable中安装libsvm碰到的问题和解决方法---- mxGetIr 已过时 错误
- 杜比服务器系统安装教程,win10杜比音效如何安装?win10安装杜比音效的详细教程...
- 基于aspnet+20ajax问卷调查系统的设计和实现_百度文库,基于ASP.NET问卷调查系统的设计与实现.doc...
- PS证件照蓝底转白底红底转白底
- python中count什么意思_python中函数COUNT()的功能是什么
- 来到 “鹅厂” 的 2019
- python从入门到实践十二章
- error An unexpected error occurred “httpsregistry.npmjs.orgd3-geo-proje
- 洛谷P5545 炸弹攻击2
- Mac M1芯片Android Studio使用模拟器
- 对finalize的理解