和前面提到的一样,上拉模式设置BSRR寄存器后,改变并不会同步到输入寄存器IDR上,只会同步到输出寄存器ODR上 检查在输出模式下的Led引脚是否也是这样: 如图,把我的IDR该位清零了,再接着测试写BSRR 再把上拉、下拉输入的key引脚设置CRL、BSRR过程中,IDR和ODR的变化记录下来: 我这时才发现,其实我是在看浮空输入下(CRL复位为0x4
在该模式下读IDR寄存器的位将返回对应I/O引脚上的电平值。将 DDRx 位置1就选择了输出模式。在该模式下向ODR寄存器的位写入数据将会通过锁存器输出对应数字值到I/O口。读IDR的位将会返回相应的I/O引脚电平值。通过软件配置CR1,CR2寄存器可以得到不同的输出模式:上拉输出,开漏输出。 复位后引脚状态为悬空输入。...
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL【控制端口0~7】,GPIOx_CRH【如有,控制端口8~15】), 两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),(直接设置输入输出的状态,高低电平(0,1)) 一个32位置位/复位寄存器(GPIOx_BSRR),(高16位清零,低16位置1,均为1时有效,0不影响) 一个16位复位寄存器(GPIO...
GPIOx_IDR寄存器:这个寄存器用于读取GPIO口的输入值。例如,可以使用GPIOx_IDR寄存器读取GPIO口的输入电平。 GPIOx_ODR寄存器:这个寄存器用于设置GPIO口的输出值。例如,可以使用GPIOx_ODR寄存器将GPIO口的输出电平设置为高电平或低电平。 GPIOx_BSRR寄存器:这个寄存器用于设置GPIO口的输出值,同时还可以通过它将GPIO口的...
GPIOx_IDR(x = A..E)端口输入数据寄存器 GPIOx_ODR(x = A..E)端口输出数据寄存器 GPIOx_BRR(x = A..E)端口位清除寄存器 GPIOx_BSRR(x = A..E)端口位设置/清除寄存器 GPIOx_LCKR(x = A..E)端口配置锁定寄存器 1.2 库函数操作 对于寄存器的详细描述在此不展示,下文我们通过一个GPIO输出一个低/...
2.1 GPIO 寄存器映射 外设位带区覆盖了所有片上外设寄存器,理论上可通过宏为每个寄存器位定义别名地址。但实际开发中,通常仅针对高频操作的 GPIO 寄存器(如输出数据寄存器 ODR、输入数据寄存器 IDR)启用位操作。 根据手册,GPIO 的 ODR 和 IDR 寄存器相对于 GPIO 基址的偏移分别为 12 和 8(GPIOx_BASE由库函数定义...
stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。
然后这两节可能更多偏向于如何去做,就是吃现成的鱼,具体的寄存器主要涉及到BSRR以及IDR,如何阅读官方参考手册,用寄存器方式去实现,以及GPIO的原理后面会单独开一节来记录。 然后回归正题吧。我们继续接上一节的项目工程来做。以读取按键为例,来介绍STM32单片机如何处理用户输入。 硬件原理 我们还是先从硬件原理入手,一...
GPIO在输出方式时是同时往输入数据寄存器采样的;而在输入方式下 输出缓冲器被禁止,不会有输出。 所以要把第二条的输入配置删除才行。另外:输出配置为开漏模式时,对输入数据寄存器的读访问可得到端口状态 ;输出配置为推挽式模式时,对输入数据寄存器的读访问得到最后一次写入输出寄存器的值(在外部电路...