STM32F103引脚输入输出模式详解

news/2024/7/7 22:51:05

目录

一:输入模式

1.1:模拟输入

1.2: 浮空输入

 1.3:上拉输入

 1.4:下拉输入

1.5: 为什么没有复用输入配置模式

 二:输出模式

2.1:推挽输出

2.2:开漏输出

 2.3:复用推挽输出

2.4:复用开漏输出 


一:输入模式

1.1:模拟输入

模拟输入(GPIO_Mode_AIN):这种输入方式和浮空输入非常相似,都不接入内部的上拉和下拉电阻,它们二者唯一的区别在于,模拟输入不接入TTL肖特基触发器,它接入的信号是完全的模拟信号,所以称为模拟输入。

当引进外部不接稳定的电路时,他的电平状态我们无从得知,可以说他的引脚电平状态完全取决于外部输入。

TTL肖特基触发器:简单说就是将相对缓慢变化的模拟信号变成矩形信号,便于后面读取。

(如果大家想要深入的了解,可以去百度一下)

注意:模拟输入则将信号传输到其他外设。

 输入路径如下图所示

1.2: 浮空输入

 

浮空输入(GPIO_Mode_IN_FLOATING):这种输入模式不接入上拉下拉电阻,但是经过TTL肖特基触发器,使得它输入进来的电平数据更加稳定。当然,在该引脚不接入外部电路时,它引脚的电平状态我们也无从得知,它的电平(输入)状态完全取决于外部信号。

输入路径如下图所示

 1.3:上拉输入

上拉输入(GPIO_Mode_IPU):这种输入方式内接入上拉电阻,当没有外部信号输入时,默认引脚电平为高电平,当外部为低电平时,也可以明显的读出低电平。这种模式一般用于按键检测之类的。

输入路径如下图所示

 1.4:下拉输入

下拉输入(GPIO_Mode_IPD):这种输入方式内接入下拉电阻,当没有外部信号输入时,默认引脚电平为低电平,当外部为高电平时,也可以明显的读出高电平。

1.5: 为什么没有复用输入配置模式

我在学习这些配置模式的时候,发现对于stm32单片机来说,如果需要使用到它的一些内置外设(USART),就必须配置对于的输出接口为复用输出模式,但是却没有复用输入模式,都是直接配置为上拉输入或者浮空输入模式。下面是网友给的答案

没有必要单独做个复用输入的模式吧。GPIO输入、复用输入本质都是输入,也就是电平只读,别说是2种类型的只读,就是10000种类型的电平只读,也不会对任何类型造成任何影响,所以就没有区分。

其实我们从引脚的电路图也可以看出,对于输入的引脚来说,只是对电平的读取,读取到的数据高电平转换为1,低电平转换为0。而高低电平最终都会传输到A点,所以说当对应引脚的复用功能开启时,那些内置外设也可以从A点读入高低电平。

 二:输出模式

2.1:推挽输出

推挽输出(GPIO_Mode_Out_PP):这种输出方式比较常用,它是完全可以正常的输出高低电平的输出模式。当需要输出高电平时,上面的P-MOS管导通,此时D点的电压就是VDD点的电压,也就是我们常说的输出1。 当需要输出低电平时,下面的N-MOS管导通,此时D点的电压就是VSS点的电压,也就是我们常说的输出0。

2.2:开漏输出

 开漏输出(GPIO_Mode_Out_OD):这种输出模式,在没有外接入上拉电阻时只能输出低电平,不能正常的输出高电平(之前踩过一次坑,模式配置错误后,整个驱动模块都失效了,就是因为这种模式不能正常的输出高电平)。

这种配置模式也有它的优点,就是当外接的驱动模块需要的电压过高时,而内置的VDD电压不能满足,我们就必须使用该种模式,去外接更高电平的上拉电阻,从而驱动对应的模块。

 2.3:复用推挽输出

复用推挽输出(GPIO_Mode_AF_PP)之前学习的时候,比较奇怪的时,为什么有了推挽输出模式,还需要复用推挽输出呢???看过32单片机的数据手册的都知道,对于芯片的每一个内置外设来说,都有它自己的数据寄存器(DR)。而复用推挽输出的输出模式和普通推挽输出的输出模式不同点就在此处。

复用输出时,引脚的高低电平数据来源于复用外设模块的数据寄存器。

普通输出时,引脚的高低电平数据来源于32中GPIO模块的数据寄存器。

所以说我们在使用一些复用功能时,就需要将输出的引脚配置为复用输出模式。

2.4:复用开漏输出 

复用开漏输出(GPIO_Mode_AF_OD):这种输出方式不能正常的输出高电平,但是在外接的驱动模块需要的电压过高时,而内置的VDD电压不能满足,我们就必须使用该种模式,去外接更高电平的上拉电阻,从而驱动对应的模块。

当然它的数据来源也是来源于复用功能的外设数据寄存器。


http://lihuaxi.xjx100.cn/news/1001944.html

相关文章

并发情况下, 必须对iterator 进行加锁

java集合操作中, remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁, 为什么并发情况下, 必须对iterator 进行加锁 在并发环境下,如果多个线程同时尝试访问同一个集合并且其中某个线程正在使用Iterator遍历该集合&…

【day2】Android Jetpack Compose环境搭建

【day2】Android Jetpack Compose环境搭建 以下是适用于 Jetpack Compose 的环境要求: Android Studio 版本:4.2 Canary 15 或更高版本Gradle 版本:7.0.0-beta02 或更高版本Android 插件版本:4.2.0-beta15 或更高版本Kotlin 版本…

C# 结构体

C#中的结构体(Struct)是一种轻量级的数据类型,用于存储数据。与类(Class)不同,结构体是一种值类型,即在赋值或传递参数时是按值传递的,而不是按引用传递的。 结构体的声明和使用方式…

docker push时出现denied: requested access to the resource is denied

1、首先确认自己已经登陆 docker login2、修改镜像到自己账户的名下 docker tag ${原镜像的名称} ${自己的账户名称}/${原镜像的名称} docker push ${自己的账户名称}/${原镜像的名称}

HTB-Popcorn

HTB-Popcorn信息收集开机提权信息收集 前1000个常用端口 全体端口 22 ssh OpenSSH 5.1p180 http Apache httpd 2.2.12 80端口的页面如下。 dirmap gobuster dirbuster 得出如下结果: 当前可访问 http://10.10.10.6/indexhttp://10.10.10.6/testhttp://10.1…

【K8S系列】深入解析无状态服务

目录 序言 1. 无服务介绍 1.1 优点 1.2 使用场景 1.3 资源类型 1.4 总结 2 使用介绍 2.1 Deployment 使用场景: 2.2 ReplicaSet 使用场景 2.3 pod Pod 资源定义示例 2.4 service 创建一个Deployment: 创建一个Service: 总结…

全志D1S在rt-smart下驱动OLED方法分享

D1S使用rt-smart驱动OLED 前言 本次使用RT-Smart的IIC驱动OLED屏幕,进行基本的字符串显示,在使用的过程中遇到一些问题,在这里做记录分享,本次以熟悉RT-Smart使用为主。 过程 本次直接开始添加离线包,环境搭建请参考上一篇文章…

05 dubbo源码学习_服务目录

1. 入口2. Directory实现类2.1 StaticDirectory2.2 StaticDirectory源码2.3 RegistryDirectory2.4 RegistryDirectory源码dubbo的Directory属于集群容错的一部分,集群容错分别包括:Directory、Router、Cluster、LoadBalance四部分; Direcotry它有一个核心的list方法,获取服…