stm32读GPIOx_ODR问题求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32读GPIOx_ODR问题求解相关的知识,希望对你有一定的参考价值。

请问
1:既然有GPIOx_IDR,那读GPIOx_ODR有啥作用呢?
2:GPIOx配置成输入,设置GPIOx_ODR有啥作用呢?
3:GPIOx配置成输出,那读GPIOx_IDR有啥作用呢?

GPIOx_IDR是端口的输入数据寄存器,GPIOx_ODR是端口的输出寄存器,我们配置引脚的输入输出模式是通过GPIOx_CRL和GPIOx_CRH两个寄存器来配置的,但是每个端口的16个引脚它们有的可能是输出模式,有的是输入模式,甚至一会输出一会输入,而GPIOx_IDR和GPIOx_ODR两个寄存器是以word模式访问而不能以bit模式访问,GPIOx_IDR只能读,而GPIOx_ODR可以读写。你也可以试想一下,如果输入输出公用一个寄存器,你读出的数据到底应该是输入的数据呢还是输出的数据呢?这样MCU将无法判别。追问

2:GPIOx配置成输入,设置GPIOx_ODR有啥作用呢?
3:GPIOx配置成输出,那读GPIOx_IDR有啥作用呢?

追答

2.跟你配置的输入模式有关,如果是analog input或者input floating模式,那么与GPIOx_ODR无关,如果配置成pull-down模式,则应将GPIOx_ODR各位都设置0,如果是pull-up模式,则有设置成1。详见参考手册8.1节的Table 17及8.1.7 Input configuration一节
3.在开漏open-drain模式下,通过读GPIOx_IDR来获取IO状态。详见参考手册8.1.8 output configuration一节

参考技术A 应为标准的输入输出是分开的,输入的时候输出无效,输出的时候输入无效,如果你想输入,那么输出必须为高或者高阻,不能为低,因为一般低电平可以把高电平拉低,就像51上面是准双向IO,但是输入的时候必须先输出高,(一般有编译器完成).
说白了就是输入输出是分开的,需要切换.

stm32串口发送正常,接受只能收到一个字符,求解,急

首先看看信号是不是过来了的,用示波器看看!其次你是怎么接收的,中断?如果是中断那直接改查询接收(只调试串口程序,去掉其他的)。看看能不能收到。一般来说都是中断的问题 参考技术A 问题问的不够详细

以上是关于stm32读GPIOx_ODR问题求解的主要内容,如果未能解决你的问题,请参考以下文章

stm32的地址分配方面的问题求解,恳请大神细心指针,不胜感激~~~

求解释stm32固件库中关于DMA方式做DAC的例程

我在用STM32串口DMA接收数据时,为啥在接收过程中,我的程序停止运行了,接收完成后又开始运行,求解?

STM32第二章I/O端口应用

STM32系列单片机IO口模式设置

求解器加载项错误,未找到求解器 32.dll 并发生意外错误