今天有网友私信我,问我怎么没有更新文章,我有点惭愧没有能够及时更新文章。因为都没有太多时间准备,所以更新的有点慢,但是我还是决定每天给大家分享一点知识。之前我们讲了STM32的时钟,讲完时钟之后我开始为大家讲一些外设我们从最基本的GPIO开始讲。我们打开STM32的手册(由于STM32的手册网上很多,大家可以自己找,如果没有的朋友也可以私信我,我会及时反馈并将资料给到你),我们看第9章 General-purpose and alternate-function I/Os (GPIOs and AFIOs)。这节主要讲STM32的通用IO与复用IO相关知识,我们看任何一款芯片一定要把官方给的参考手册看透,这样才能对芯片了如指掌。首先我们来了解一下IO口的模式以及该模式的一些相关知识:

输入:浮空输入 ─ 上拉输入 ─ 下拉输入 ─ 模拟输入

输出:开漏输出 ─ 推挽输出 ─ 开漏复用输出 ─ 开漏复用输出

针对这些我们逐一分析:

首先是浮空输入,什么是浮空输入:就是IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的,这种输入一般用作按键的检测。

上拉输入,很明显就是在元器件的内部加上了一个上拉电阻,由于内部有上拉电阻,能够起到限流的作用,是我们使用过程中也比较常见的情况。

下拉输入 - 就是元器件的内部将该引脚通过电阻链接到GND上面了,将该引脚的电平默认设置为低电平,作用与上拉有点相似。

模拟输入 - 这个输入口主要用于检测IO口输入的电平的电压。其实对于输出来讲已经算是很清楚了,从字面意思我们都可以很清楚的了解到,在使用的过程中我们也可以根据实际情况来进行设置,比如你有一个IO口外部忘记接上啦电阻,而你又想当外部没有输入的情况下默认是高电平,你就可以设置为上拉输入。看完输入我们再来看输出,输出就有点讲究:

开漏输出:

我们从图中可以看出,当我们外部IO口没有电压的时候其实这个功能是失效的,根本没用,所以再我们设置开漏的时候外部一定要接上拉电阻,这样我们就可以通过控制CTRL端控制外部的输入。

推挽输出:

  上图就是推挽输出,当我们的CTRL信号为高电平的时候,Q1导通、Q3截至,IO口输出高电平,当CTRL信号输出低电平的时候,Q1截至Q3导通,IO口输出低电平。

而复用推挽输出以及复用开漏其实是作为第二功能时的配置说明,使用方法与此方法一致。

  讲完了IO口的模式,我们再来讲讲STM32IO口的相关的寄存器,我们从下图文档中:

可以看出,每个通用IO口都有2个32位的配置寄存器,2个32位的数据寄存器,一个32位的置位/复位寄存器,一个16位的复位寄存器以及一个32位锁存寄存器。我们先看通用IO口,在通用IO口的复位期间以及刚复位后,复用功能未开启状态,IO口是被设置成为浮空输入的,所以这点我们要注意,在设计的时候一定要考虑到开机的时候这些IO的状态会不会影响我们的设计,我之前在设计的时候就碰到过这样的情况。我们看手册中,有些特定的总线手册给了我们一些GPIO的模式配置,这些配置在第9章的9.1.11章节中,我们以后配置的时候一定要看清楚是否与是按照这些配置来配置的,千万不要搞错了。

我们正式进入GPIO寄存器相关知识,我们先看GPIOx_CRL和GPIOx_CRH这两个寄存器,这两个寄存器是IO口配置寄存器,主要配置IO是输入还是输出以及IO口的速度。

我们先看复位的值,我们将0x4444 4444分解为二进制,他的值就是0100 0100 0100 0100 0100 0100 0100 0100,我们将这些数字一一对应带入该寄存器的对应位,我们拿MODE0和CNF0作为对象,可以知道CNF0[1:0] = 01 ,MODE0[1:0] = 00,通过这两个数值然后根据下面的图示查询可以得出,默认的状态是InputMode,01:Floating Input状态,与我们之前手册上的一致,这就是我们分析GPIOx_CRL与GPIOx_CRH寄存器的方法。

由于我们的引脚有16个引脚,而每个寄存器只能配置8个引脚,所以我们需要两个寄存器来配置这些引脚。GPIOx_CRL配置的低8个引脚,而GPIOx_CRH配置的高8个的引脚。

分析完模式,我们再来分析端口输入寄存器GPIOx_IDR。

我们从图中可以看出,该寄存器的高16位作为预留位置未使用,而使用了低16位。该寄存器的IDR0~IDR15对应的就是引脚0~15的输入值,而高16位都是0,这些位只能是只读的模式并且只能以字的形式读出。

看完端口输入寄存器我们再来看看端口输出寄存器GPIO_ODR:

与GPIO_IDR相识,端口输出寄存器的高16位也是保留的,而只用了低16位,每一位都可以读也可以写。ODR0控制这GPIOx_Pin0,ODR15控制这GPIOx_Pin15,这些位也只能以字(16位)的形式进行操作。今天有点晚了,该休息了,明天接着写,谢谢大家,大家晚安!!!!!

也希望大家劳逸结合,身体健康,喜欢我的朋友给我加个关注,有需要什么资料的也可以找我,我尽我所能给大家帮助,谢谢大家了!!!!

1 io口 stm32_从STM32分享各种硬件以及总线之GPIO简介相关推荐

  1. stm32 pc13~pc15 tamper-rtc OSC32-IN/OSC32-OUT 配置成IO口

    在STM32的数据手册的管脚分配图中可以看到:PC14与OSC32_IN公用一个引脚,PC15与OSC32_OUT公用一个引脚,它们的使用方法如下: 当LSE(低速外部时钟信号)开启时,这两个公用管脚 ...

  2. STM32的IO口有幺蛾子(bug)

    在做最近的项目时,我发现一个这样的问题:对STM32中的IO进行配置(以对B系列下的PB10.PB13配置成输出模式为例),即使在配置参数一样的情况下,这两个IO输出能力还是有很大的差别. 情况一:如 ...

  3. STM32 PB3 PB4 PA15引脚作为普通IO口使用指南

    STM32 PB3 PB4 PA15引脚作为普通IO口使用指南 stm32的PB3 PB4 PA15引脚可以在使用SWD仿真和烧录的情况下释放出来,作为普通IO口使用. 查看数据手册的引脚定义可以看到 ...

  4. 51单片机8255扩展c语言,51单片机8255A扩展IO口

    <51单片机8255A扩展IO口>由会员分享,可在线阅读,更多相关<51单片机8255A扩展IO口(23页珍藏版)>请在人人文库网上搜索. 1.一个芯片可扩展多个并行I/O口 ...

  5. 树莓派 IO 口驱动开发

    关注+星标公众号,不错过精彩内容 转自 | 一口Linux IO开发是最基础的,也是入门必备技能,虽然很多已入门的读者来说,IO操作很简单,但对于很多初学者却不那么简单. 微机总线地址 地址总线: 百 ...

  6. 32位芯片IO口的工作模式详解

    目录: 一.IO口基本信息 二.IO口的寄存器 三.IO口对应不同配置的基本结构 四.IO口的不同配置简介 4.1推挽输出 4.2.开漏输出 4.3.浮空输入 4.4.在 STM32 中选用 IO 模 ...

  7. hc05与单片机连接图_单片机科普:单片机的IO口不够用了怎么办?如何扩展单片机的IO口...

    单片机是一种可编程器件,在各种消费类电子.工业电子.汽车电子等行业应用广泛,目前开发产品的构架就是以单片机为核心,根据不同的功能搭建不同的外设电路.同样的功能,每个人.每个团队所做的技术方案都不会相同 ...

  8. 树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册

    地址总线: 百度百科解释: 地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/ ...

  9. 树莓派+多个微雪电子Serial Expansion HAT扩展板叠加方法(扩展多个IO口、串口)

    微雪电子官方教程仅介绍了单层扩展板配置方法, 因此本文参考官方教程的基础上,进行多个扩展板的叠加配置. 文章目录 一.打开I2C接口 二.安装库 三.生成设备 四.堆叠教程 五.扩展IO口配置 总结 ...

最新文章

  1. python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
  2. [POI2007]堆积木Klo
  3. 12种高效率热门编程语言,你会用几个?
  4. c++判断一个数字是否为buzz number的算法(附完整源码)
  5. 8.初探python之集合
  6. 小师妹学JavaIO之:目录还是文件
  7. AttributeError: 'NoneType' object has no attribute '__array_interface__'
  8. 包装又缩水!iPhone 13包装盒塑料膜变纸质拉条 网友:要将环保进行到底?
  9. java画板代码_java 画板画图程序
  10. graphx 基础算法
  11. 用Excel制作甘特图跟踪项目进度(附绘制教程)
  12. Android可折叠收缩伸展的Expandable分组RecyclerView:模型抽象和封装(二)
  13. 伍斯特理工学院计算机科学硕士,美国伍斯特理工学院计算机科学硕士入学要求.pdf...
  14. 极米科技非“极客”:研发多年未掌握核心科技,还向竞品购买专利
  15. python的注释符号有哪些_python注释符号
  16. php 多个curl 很慢,PHP下CURL异常慢
  17. CFD网格你应该了解的常识
  18. C语言 10_随机数
  19. 基于java的校园新闻_基于jsp的校园新闻-JavaEE实现校园新闻 - java项目源码
  20. twitter图片视频批量下载

热门文章

  1. Hadoop Kerberos 认证下 Sentry 安装 + Sentry 权限设置使用
  2. 量化感知训练实践:实现精度无损的模型压缩和推理加速
  3. “视频云营业厅”发布,蚂蚁 mPaaS 加速金融机构数字化转型
  4. DTCC 2019 | 阿里云TSDB: 教你解锁时序时空数据库的种种黑科技
  5. Knative Eventing 中如何实现 Registry 事件注册机制
  6. 服务化改造的云上利器 | 阿里云 EDAS 重大升级发布
  7. GPU云服务器深度学习性能模型初探
  8. (Python)时序预测的七种方法
  9. 当你和天猫精灵对话时,它在想什么?阿里智能对话技术深度解读
  10. 浅述 Docker 的容器编排