STM32的GPIO为输出模式时获取其输出状态
抛出一个问题,STM32的GPIO能否在不改变模式的情况下同时做输入和输出呢?答案是可以
STM32F103 的参考手册GPIO章节摘录:
第5点,在开漏模式时,对输入数据寄存器的读访问可得到I/O状态。从这一点我们可以看出,STM32的GPIO设置为开漏输出模式时,改变输出电平可以生效(但输出1时受外部上拉电阻影响),同时可以通过输入数据寄存器即GPIOx_IDR读取该IO口的状态。(开漏输出加外部上拉电阻,实际上就是相当于51单片机的准双向IO了。)
这里还要注意第6点,在推挽输出模式下,读取输出数据寄存器即GPIOx_ODR只能读到该IO口最后一次设定的输出电平状态,而不一定是实际的IO口状态。比如说,写寄存器使IO输出低,但外部电路使其强拉到高,这时读GPIOx_ODR只能读到低,因为最后一次写操作就是低。
注意:读最后一次设定的输出电平状态,在推挽输出模式时,除了GPIOx_ODR,读GPIOx_IDR也是一样的(假定外部电路不影响其输出电平)。(读GPIOx_ODR寄存器用的是GPIO_ReadOutputDataBit函数,读GPIOx_IDR寄存器用的是GPIO_ReadInputDataBit函数)
读最后一次设定的输出电平状态在一些特定应用场合非常有用,比如
uint8_t pwr_state=0;
void pwr_on(void)
{pwr_state = 1;GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
void pwr_off(void)
{pwr_state = 0;GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
uint8_t get_pwr_state(void)
{return pwr_state;
}
上述代码为了便于判断当前电源的开关状态,用了一个变量pwr_state作为指示电源开关状态,实际上可以将GPIOx_ODR用起来,这个寄存器就可以反映最后一次对该IO的操作。举例如下:
void pwr_on(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
void pwr_off(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
uint8_t get_pwr_state(void)
{return GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1);
}
这样省略了一个变量的操作。
STM32的GPIO为输出模式时获取其输出状态相关推荐
- GPIO输入输出模式配置
最近在看数据手册的时候,发现STM32的GPIO输入输出模式的配置种类有8种之多(输入和输入各4种): (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输 ...
- STM32:GPIO的8种输入输出模式深入详解
STM32的8种GPIO输入输出模式深入详解 输入模式 -输入浮空(GPIO_Mode_IN_FLOATING) -输入上拉(GPIO_Mode_IPU) -输入下拉(GPIO_Mode_IPD) - ...
- STM32:GPIO四种输入输出模式。
STM32 四种输入输出模式. STM32的四种输入方式: 1.上拉输入(GPIO_Mode_IPU) 上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0.1信号,读取此时的引脚电 ...
- stm32核心板可以点亮灯吗_二、STM32的GPIO输出操作
这是我STM32F103C8T6开发笔记专栏的一部分.可以到专栏中查阅更多内容. STM32F103C8T6开发笔记整理zhuanlan.zhihu.com [写在前面]: 这篇笔记的内容,主要是指 ...
- STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作
文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...
- 零基础入门STM32编程——GPIO(五)
系列教程链接 HAL库编程点灯篇https://blog.csdn.net/oHaoEr/article/details/122999523 一 GPIO简介 1.1 概述 GPIO(通用输入输出端口 ...
- STM32之GPIO工作模式
一.GPIO工作状态 stm32或者说基本上所有MCU的工作状态都基本可以分为以下几种,输出模式:推挽输出.开漏输出.复用推挽输出和复用开漏输出:输入模式:上拉输入.下拉输入.浮空输入和模拟输入. 1 ...
- 【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)
STM32F1xx官方资料: <STM32中文参考手册V10>-第8章通用和复用功能IO(GPIO和AFIO ) 芯片数据手册(datasheet) STM32的GPIO介绍 STM32引 ...
- STM32中GPIO口八种工作模式简介及LED灯测试
STM32中GPIO口八种工作模式简介及LED灯测试 一.GPIO口八种工作模式 二. LED灯测试 一.GPIO口八种工作模式 在STM32单片机里对于GPIO的配置种类有8种之多,包括4种输入模式 ...
最新文章
- mysql-基本命令
- python 比较两个字符串
- 131. 分割回文串(回溯算法)
- php 多个 csv 文件,php - 如何将CSV文件上传到多个数据库目录中? - SO中文参考 - www.soinside.com...
- SAP Spartacus Set Active BaseSite action执行的时间点 - Route路由触发方式
- 读《构建之法》第11,12章有感
- SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装
- 怎么把程序内部坐标转为屏幕坐标,如何将工作空间坐标转换为屏幕坐标?
- 新建模块 pom.xml依赖无法识别_使用模块依赖关系,第2部分
- 复变函数 —— 2. 复函数的导数与复变函数的导数(柯西黎曼方程)的定义
- C语言练习①一英寸是多少厘米?
- 从Soul APP 看社交升级新玩法
- Divergence-Free Smoothed Particle Hydrodynamics
- 为什么python打不开_Python打不开.py文件
- FFMPEG学习【libavfilter】(二)
- switch 语句 -- 超详解
- android免root管理自动启动不了,真正免root的Autostarts(管理自启)详细使用教程...
- 保险行业数据分析(案例)
- 动漫游、瑜伽游、军事游……春节定制旅游悄然兴起
- Netty(一)基础socketchannel,Buffer,selector黏包 半包解决 实战
热门文章
- 泛广电领域的卫星传输和公网传输
- LiveVideoStackCon讲师热身分享 ( 十一 ) —— 短视频APP的架构设计
- JVM之Java栈Java stack
- 首届Hadoop技术社区中国meetup来袭!对外报名正式启动!
- 安装Openface,实现人脸比对
- MySQL InnoDB Cluster安装
- ORC文件存储格式的深入探究
- leetcode 341. Flatten Nested List Iterator | 341. 扁平化嵌套列表迭代器(Java)
- 【Git】git使用:新建仓库、管理分支、冲突解决
- C语言 realloc函数 带着内存游走的函数