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

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

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

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

针对这些我们逐一分析:

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

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

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

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

开漏输出:

a178461a8150263ffc6d415996ab957f.png

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

推挽输出:

afce4fcb4afd69112b452ac6f37e6e5b.png

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

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

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

99c79cad3bee98982295461280106011.png

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

235d89707f2ff2179ada9e99b7443cdd.png

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

0aa78dd1b28566f15a36db78c898d70e.png

我们先看复位的值,我们将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寄存器的方法。

9d601b3779d4ec482ac56d36d2f4b1fb.png

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

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

1b53b93f41110e339151f8985457cfd2.png

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

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

89844d99e16b6cdce7a49e2a3ddeba41.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue控制台报错Duplicate keys detected: 'xxxx'. This may cause an update error.解决方案

key值是必须唯一的&#xff0c;如果重复就会报错 可以把key值改为index&#xff08;其实就是用索引做key值&#xff09;&#xff0c;就可以避免这个情况添加一个索引key即可 <tr v-for"(item,index) in books" v-bind:key"index"><td>{{item.i…

亚太CDN年度盛典:阿里云姚伟斌发表《场景化的CDN技术》主题演讲

在11月14日的2018亚太CDN年度盛典上&#xff0c;阿里云资深技术专家姚伟斌&#xff08;文景&#xff09;发表了《场景化的CDN技术》主题演讲&#xff0c;他认为&#xff0c;当下的CDN&#xff0c;需要根据过去CDN的发展历程&#xff0c;更清晰地分析客户不同场景下的不同需求&a…

IBM在中国发布Cloud Paks,牵手神州数码,助力企业云转型步入“第二篇章”

2019年11月5日&#xff0c;北京盘古大观IBM大中华区总部&#xff0c;2501会议室。不到80平的会议室里挤了50多人&#xff0c;包括记者、分析师&#xff0c;以及来自IBM中国和神州数码的高管和专家—— 参会记者&#xff1a;通常是开会的地方越小&#xff0c;事儿越大…… 神州…

二叉树高度的代码解析_剑指offer 从上到下打印二叉树

题目描述从上往下打印出二叉树的每个节点&#xff0c;同层节点从左至右打印。解析&#xff1a;这实际上就是二叉树的层序遍历。规律如下&#xff1a;每次打印节点&#xff0c;如果该节点有子节点&#xff0c;则将子节点放入队列末尾&#xff0c;然后取出队列头部最早进入队列的…

Vue 快速集成ElementUI

App.vue作为Vue项目的主窗口<router-view></router-view>让路由生效 main.js负责加载插件组件等 views&#xff1a;放页面 components&#xff1a;放组件 router&#xff1a;路由配置&#xff1a;相当于springmvc的视图解析器将url和组件进行关联Element UI 后台管…

双11个性化推荐背后,阿里云“舜天”如何应对百亿次挑战?

2018天猫双11在技术世界&#xff0c;创下不少新记录&#xff0c;其中有一个记录是11日当天阿里全平台共为用户做个性化推荐453亿次&#xff0c;这些推荐的图片长度加起来可以绕地球70圈。 当你在天猫/手淘上买买买的时&#xff0c;图片会以不同格式或分辨率来转码呈现&#xf…

重磅发布!阿里云推PostgreSQL 10 高可用版

2015年&#xff0c;阿里云宣布正式推出RDS for PostgreSQL服务,届时&#xff0c;阿里云成为国内首家同时支持MySQL、SQL Server 和PostgreSQL关系型数据库的云计算服务商。 用户在云上就能享受PostgreSQL引擎带来的对SQL标准和NoSQL的高度兼容、强大的处理复杂查询能力、以及丰…

axios专栏

axios 基于promise用于浏览器和node.js的http客户端 支持浏览器和node.js 支持promise 能拦截请求和响应 自动转换JSON数据 能转换请求和响应 数据 axios基础用法 get和 delete请求传递参数 通过传统的url 以 ? 的形式传递参数 restful形式传递参数 通过params 形式传递参数…

表示自己从头开始的句子_从头开始的唯美句子

1、你有力气挣扎在自己的现状里&#xff0c;却没勇气跳出自己的生活&#xff0c;重新开始。2、亲爱的&#xff0c;不必去追悔过去。人生就像摩天轮&#xff0c;总有那么一刻&#xff0c;天空&#xff0c;会为你而停留。3、找不到坚持下去的理由&#xff0c;那就找一个重新开始的…

【双11】阿里云边缘节点ENS助力淘宝构建音视频通信网络

前言 淘宝在2016年推出直播平台&#xff0c;和娱乐直播性质不同&#xff0c;电商直播的主角多为网红店铺及网红达人&#xff0c;以直播带动产品售卖。在淘宝的双11流量加持之下&#xff0c;淘宝直播平台关注度持续攀升&#xff0c;通常的网红店主一场直播带来的收益不亚于一场…

护航Lazada双11购物节 阿里云CDN全球化火力全开

2018年11月12日零点——东南亚最大的电子商务公司Lazada 2018双11购物节正式收官。这是一场超过2000万的消费者在Lazada网站上及APP上浏览和疯狂抢购的盛会。 Lazada是东南亚最大B2C平台&#xff0c;业务范围覆盖印度尼西亚、马来西亚、菲律宾、新加坡、泰国和越南六个东南亚国…

plink源码_plink: 等位型计数(allele count)

对genotype的等位型进行计数&#xff0c;需要用到以下参数&#xff1a;--freq Allele frequencies--countsModifies --freq to report actual allele counts具体用法如下命令&#xff1a;/plink-1.07-x86_64/plink --freq --counts --noweb --bfile file --make-bed --out file…

AI行业真实现状:做芯片没工作,做视觉、语音血赚

最近&#xff0c;深圳前瞻产品研究院发布了《2019年人工智能行业现状和发展趋势报告》&#xff0c;笔者看过之后&#xff0c;感觉真是用了心&#xff0c;这不仅是一份数据报告&#xff0c;更像一本“扫盲手册”。众人皆知&#xff0c;AI血赚&#xff0c;当我们谈人工智能&#…

JSON数据从OSS迁移到MaxCompute最佳实践

本文为您介绍如何利用DataWorks数据集成将JSON数据从OSS迁移到MaxCompute&#xff0c;并使用MaxCompute内置字符串函数GET_JSON_OBJECT提取JSON信息。 数据上传OSS 将您的JSON文件重命名后缀为TXT文件&#xff0c;并上传到OSS。本文中使用的JSON文件示例如下。 {"store&…

java使用String的split()方法数组下标越界问题

今天做练习的时候使用String的split(",")方法在控制台进行信息截取&#xff0c;一开始出现数组下标越界的提示我就去用for循环遍历了一下&#xff0c;有三个片段的输出信息&#xff0c;然后我网上查了说有以下几种情况&#xff1a; 1.代码编码和控制台中文编码不一致…

在MaxCompute上分析IP来源的方法

淘宝IP库 淘宝IP地址库官网地址http://ip.taobao.com/&#xff0c;其查询接口[http://ip.taobao.com/service/getIpInfo.php?ip[ip地址字串]](http://ip.taobao.com/service/getIpInfo.php?ip[ip地址字串])&#xff0c;如下所示&#xff1a; 但是在MaxCompute中禁止使用http…

egg直接取req_Egg服务器基础功能

1. 框架约定目录规则1.1 app/router.js&#xff1a;用于配置URL路由规则&#xff1b;1.2 app/controller/** &#xff1a;用于解析用户的输入&#xff0c;处理后返回相应的结果&#xff1b;1.3 app/service/**&#xff1a; 用于编写业务逻辑层&#xff1b;1.4 app/public/**&am…

我和 Spring 大神的一天

先介绍一下故事的5位主人公。 Josh Long 龙之春&#xff1a; Spring 技术布道师&#xff0c;撰写过5部著作&#xff0c;录制过3部畅销的培训视频&#xff0c;是一位开源软件贡献者。 Spencer Gibb&#xff1a; Spring 技术布道师&#xff0c;Spring Cloud核心项目的联合创始人…

Android开发中解决自定义弹窗获取不到控件对象的问题

最近做期末作业的时候遇到一个功能需要在弹窗里修改账号密码&#xff0c;弹窗里面含有两个edittext控件&#xff0c;经过查阅资料我通过setView添加了一个view在弹窗里实现了&#xff0c;但是获取的控件对象一直为空导致我取不到输入的值&#xff0c;找了好久的错误原来获取对象…