抛出一个问题,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为输出模式时获取其输出状态相关推荐

  1. GPIO输入输出模式配置

    最近在看数据手册的时候,发现STM32的GPIO输入输出模式的配置种类有8种之多(输入和输入各4种): (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输 ...

  2. STM32:GPIO的8种输入输出模式深入详解

    STM32的8种GPIO输入输出模式深入详解 输入模式 -输入浮空(GPIO_Mode_IN_FLOATING) -输入上拉(GPIO_Mode_IPU) -输入下拉(GPIO_Mode_IPD) - ...

  3. STM32:GPIO四种输入输出模式。

    STM32 四种输入输出模式. STM32的四种输入方式: 1.上拉输入(GPIO_Mode_IPU) 上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0.1信号,读取此时的引脚电 ...

  4. stm32核心板可以点亮灯吗_二、STM32的GPIO输出操作

    这是我STM32F103C8T6开发笔记专栏的一部分.可以到专栏中查阅更多内容. STM32F103C8T6开发笔记整理​zhuanlan.zhihu.com [写在前面]: 这篇笔记的内容,主要是指 ...

  5. STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作

    文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...

  6. 零基础入门STM32编程——GPIO(五)

    系列教程链接 HAL库编程点灯篇https://blog.csdn.net/oHaoEr/article/details/122999523 一 GPIO简介 1.1 概述 GPIO(通用输入输出端口 ...

  7. STM32之GPIO工作模式

    一.GPIO工作状态 stm32或者说基本上所有MCU的工作状态都基本可以分为以下几种,输出模式:推挽输出.开漏输出.复用推挽输出和复用开漏输出:输入模式:上拉输入.下拉输入.浮空输入和模拟输入. 1 ...

  8. 【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第8章通用和复用功能IO(GPIO和AFIO ) 芯片数据手册(datasheet) STM32的GPIO介绍 STM32引 ...

  9. STM32中GPIO口八种工作模式简介及LED灯测试

    STM32中GPIO口八种工作模式简介及LED灯测试 一.GPIO口八种工作模式 二. LED灯测试 一.GPIO口八种工作模式 在STM32单片机里对于GPIO的配置种类有8种之多,包括4种输入模式 ...

最新文章

  1. mysql-基本命令
  2. python 比较两个字符串
  3. 131. 分割回文串(回溯算法)
  4. php 多个 csv 文件,php - 如何将CSV文件上传到多个数据库目录中? - SO中文参考 - www.soinside.com...
  5. SAP Spartacus Set Active BaseSite action执行的时间点 - Route路由触发方式
  6. 读《构建之法》第11,12章有感
  7. SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装
  8. 怎么把程序内部坐标转为屏幕坐标,如何将工作空间坐标转换为屏幕坐标?
  9. 新建模块 pom.xml依赖无法识别_使用模块依赖关系,第2部分
  10. 复变函数 —— 2. 复函数的导数与复变函数的导数(柯西黎曼方程)的定义
  11. C语言练习①一英寸是多少厘米?
  12. 从Soul APP 看社交升级新玩法
  13. Divergence-Free Smoothed Particle Hydrodynamics
  14. 为什么python打不开_Python打不开.py文件
  15. FFMPEG学习【libavfilter】(二)
  16. switch 语句 -- 超详解
  17. android免root管理自动启动不了,真正免root的Autostarts(管理自启)详细使用教程...
  18. 保险行业数据分析(案例)
  19. 动漫游、瑜伽游、军事游……春节定制旅游悄然兴起
  20. Netty(一)基础socketchannel,Buffer,selector黏包 半包解决 实战

热门文章

  1. 泛广电领域的卫星传输和公网传输
  2. LiveVideoStackCon讲师热身分享 ( 十一 ) —— 短视频APP的架构设计
  3. JVM之Java栈Java stack
  4. 首届Hadoop技术社区中国meetup来袭!对外报名正式启动!
  5. 安装Openface,实现人脸比对
  6. MySQL InnoDB Cluster安装
  7. ORC文件存储格式的深入探究
  8. leetcode 341. Flatten Nested List Iterator | 341. 扁平化嵌套列表迭代器(Java)
  9. 【Git】git使用:新建仓库、管理分支、冲突解决
  10. C语言 realloc函数 带着内存游走的函数