当前位置: 首页 > article >正文

STM32 从0开始系统学习5

目录

STM32 GPIO输入的四种模式

Practice And Usage

练习与封装

Detailed And Reference

更加具体的说明

输入浮空模式

输入上拉模式

输入下拉模式

模拟功能


我们下面聊一聊输入的事情,输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接触外部中断的时候,我们仍然会选择以一种简单的手段(轮询)直接检测是否有外部信号输出来。

STM32 GPIO输入的四种模式

当然,我们的输入也有四种模式。仔细思考一下,我们能动的就是处理器内部了。实际上,根据处理器最后选择使用电路的不同,我们的外在行为也不一样。这里写一下:

  • 上拉输入:在输入引脚上连接一个上拉电阻,将引脚默认拉至高电平(逻辑1)。当输入引脚被按键或其他设备拉至低电平(逻辑0)时,可以检测到状态变化。

  • 下拉输入:在输入引脚上连接一个下拉电阻,将引脚默认拉至低电平(逻辑0)。当输入引脚被按键或其他设备拉至高电平(逻辑1)时,可以检测到状态变化。

  • 浮空输入:输入引脚处于高阻状态,没有上拉或下拉电阻连接。此时引脚的状态不稳定,容易受到外部噪声的影响。通常用于不需要确定电平状态的场合。

  • 模拟模式:输入引脚被配置为模拟输入,可以读取连续的电压值。适用于接收模拟信号(如传感器输出),并将其转换为数字信号进行处理。

你可以看到:上拉下拉就是说明我们的电平摩恩被拉到哪里起作用,你可以理解为内部的水位被抬到高还是低,只有有高度差电流才会流动。我想这样说很明白了。

功能上拉输入下拉输入浮空输入模拟模式
默认状态高电平(逻辑1)低电平(逻辑0)不稳定,未定义读取连续的模拟电压
连接方式上拉电阻连接到电源下拉电阻连接到地无连接连接模拟信号源
噪声敏感性较低(受到上拉电阻影响)较低(受到下拉电阻影响)较高(容易受外部噪声影响)视信号源质量而定
应用场景按键输入、开关检测按键输入、开关检测不需要固定状态的输入传感器输入、模拟信号读取

Practice And Usage

还是GPIO的东西,但是只需要这些地方变动:

gpio_init_struct.Pin = KEY1_GPIO_PIN; /* KEY1引脚 */ 
gpio_init_struct.Mode = GPIO_MODE_INPUT;
gpio_init_struct.Pull = GPIO_PULLUP;    // 这个地方就是选择何种上拉了
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;

使用到的读取函数就是:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

读取指定 GPIO 引脚电平状态的函数。

练习与封装

更改led_driver.c为gpio_driver.c, 使用一个按钮来控制LED是否闪烁!

提示:

新增加函数: 返回状态如何,

GPIOState gainGPIOState(CCGPIO* gpio)

当然这个GPIOState是笔者修改了GPIO_OutputState的结果. 总而言之返回的就是高低电平的区别

编写测试样例的时候需要注意按钮另一侧接的是高电平还是低电平来决定是上拉还是下拉

MCU_Libs/Drivers at main · Charliechen114514/MCU_Libs (github.com)

参考代码在这里

Detailed And Reference

更加具体的说明

输入浮空模式

上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO 口的电平完全是由外部电路决定。如果 IO 引脚没有连接其他的设备,那么检测其输入电平是不确定的。该模式可以用于按键检测等场景。

输入上拉模式

上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大,所以只是“弱上拉”,不适合做电流型驱动。

输入下拉模式

下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样可以节省一个外部电阻,但是内部下拉电阻的阻值较大,所以不适合做电流型驱动。

模拟功能

上下拉电阻断开,施密特触发器关闭,双MOS 管也关闭。其他外设可以通过模拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元单元,用于 ADC、DAC、MCO这类操作模拟信号的外设。


http://www.kler.cn/a/376333.html

相关文章:

  • 【算法+C#】重写HashCode,去重相同坐标的二维点
  • 直流电机在液压泵领域的应用
  • 系统安全架构的深度解析与实践:Java代码实现
  • 输出【namespace = LaunchConfiguration(‘namespace‘)】中具体的namespace代表的字符串
  • linux 安装php扩展:xlswriter
  • Open3D(C++) 基于法线微分的点云分割
  • 基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计
  • C语言简介
  • 训练和部署Qwen2.5,实战教程步骤,训练qwen2.5教程,vLLM,Open WebUI,LLaMA-Factory
  • Golang文件操作
  • python开发工具是选择vscode还是pycharm?两款软件优缺点对照!
  • 电商领域软件系统实战:基于TiDB的分布式数据库应用
  • 求最大公约数,最小公倍数
  • 集成旺店通旗舰版售后单至MySQL数据库
  • leetcode-88-合并两个有序数组
  • 江协科技STM32学习- P33 实验-软件I2C读写MPU6050
  • 【攻防实战】手把手带你打穿某集团内网(上)
  • RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件(2024-10-30)
  • IT界的大神-003- 史蒂夫·乔布斯 (Steve Jobs)
  • 字体反爬 fontTools | ddddocr
  • 高德地图如何标注店铺名称和位置信息?
  • timm使用笔记
  • 20221403郑骁恒第八周预习报告
  • 基于单片机的智能婴儿监控系统设计(论文+源码)
  • Istio基本概念及部署
  • Vue Router 中 router、route 和 routes 的区别 - 2024最新版前端秋招面试短期突击面试题【100道】