STM32的GPIO引脚功能中,IDR(Input Data Register)和ODR(Output Data Register)分别扮演着关键角色。IDR允许我们查看特定GPIO引脚的当前电平状态,它就像一个读取器,告诉我们引脚是否处于高电平或低电平。而ODR则是用来设置或控制GPIO引脚的输出状态,它是执行实际输出操作的控制器。在你的代码示例中,GP...
该寄存器是只写寄存器,通过写入 “置位/复位寄存器GPIOx_BSRR”状态,可分别对 “输出数据寄存器GPIOx_ODR” 进行置位和复位。 或许你有以下疑惑:既然ODR 能控制管脚高低电平,为什么还需要BSRR寄存器?意法半导体给的答案就是用BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。也就不需要关闭中...
GPIO->ODR是32位的输出数据寄存器(高16位保留,低16为依次对应某个GPIO口的16个引脚)。对ODR赋值是一次操作16位的,也就是同时设置了16个引脚的输出电平;而GPIO_PIN是指某个端口的具体某一个引脚,是位操作,可以通过设置BSRR或BRR寄存器来设置某一特定引脚的输出电平,而保持其他引脚输出不变,速...
IDR是查看引脚电平状态用的寄存器,ODR是引脚电平输出的寄存器。1>>4:1右移4位为0,所以,你这句 GPIOA->ODR|=1>>4 是没用的。1<<4:1左移4位为0x10,所以GPIOA->ODR|=1<<4 拉高的是PA4。你说能点亮,是因为它们默认就是高的。扩展:1、STM32是基于ARM® Cortex® M 处理...
ODR是stm32的IO端口输出数据寄存器,该寄存器31-16位始终读为0,15-0位输出数据。GPIO->ODR^=0X02 是输出数据与0x02异或,即输出数据的第二位如果与1相同,该位置0,反之出1,因此实现取反,输出数据保存在ODR,每执行一次输出数据的第二位取反一次。
置位或者复位寄存器(GPIOx_BSRR),对GPIOx_ODR具有按位写权限 锁定机制(GPIOx_LCKR),可冻结IO配置(这些简单理解就是比如我们用引脚控制灯,我们就是只用一个引脚就可以了,后面不用改变这个引脚,然后我们就可以将这个引脚改成冻结配置模式,好处就是我们不小心碰了一个引脚转态,这个冻结就可以帮我们锁定,不然固定功能...
1:既然有GPIOx_IDR,那读GPIOx_ODR有啥作用呢? 2:GPIOx配置成输入,设置GPIOx_ODR有啥作用呢? 3:GPIOx配置成输出,那读GPIOx_IDR有啥作用呢? 0 2020-7-22 06:53:13 评论 淘帖 邀请回答 张婷婷 相关推荐 • 请问GPIOB_BASE指的是GPIOB端口寄存器的“基础地址”吗? 3790 • STM32F401RCT...
如图中蓝色路线所示,在该模式下,GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效。 输出的高低电平来自其它内部外设,其他和开漏输出功能相同。 该模式下施密特触发器是开启的,即输入可用。可以通过输入数据寄存器GPIOx_IDR读取IO的实际状态。 复用推挽 如图中蓝色路线所示,在该模式下,GPIO复用为其他外设,输出数据寄存器...
最后再做一个测试,把上述翻转GPIO的代码做一点修改,上述用了BSRR、BRR寄存器来实现置位和清零,如果使用ODR寄存器会有什么效果呢? 可以看到,翻转速率直接只有4Mhz。 通过汇编代码可以看到,多了一条MOVS指令,该指令需要1个指令周期,所有最高翻转速率为24Mhz/(3+3)=4M...