STM32中MODER输入模式与PUPDR的区别及按键配置疑问
STM32 MODER与PUPDR寄存器的区别及按键配置代码解析
一、MODER和PUPDR寄存器的核心区别
- MODER(GPIO模式寄存器):决定GPIO引脚的基础工作模式,是输入、输出、复用功能还是模拟输入的核心配置寄存器。每个引脚对应2位:
00:输入模式(默认复位状态)01:通用输出模式10:复用功能模式11:模拟输入模式
- PUPDR(GPIO上拉下拉寄存器):仅在引脚处于输入模式或部分复用功能模式时生效,用于配置引脚的上拉、下拉或无上下拉状态。每个引脚对应2位:
00:无上下拉01:上拉10:下拉11:保留(无效)
二、两段按键配置代码的解析
第一段代码(PB4配置)
GPIOB->MODER &= ~(3U << 2*4); // PB4 GPIOB->MODER |= (0U << 2*4);
- 第一行
&= ~(3U << 8)清除PB4对应的MODER两位(3U是二进制11,左移8位对应PB4的第8、9位),清除后这两位变为00,也就是输入模式。 - 第二行
|= (0U << 8)是冗余操作,因为清除后已经是00,或上00不会改变寄存器值,只是写法上更明确地强调要设置为输入模式。
第二段代码(PB8配置)
GPIOB->MODER &= ~(3U << 2*8); //PB8 GPIOB->PUPDR |= (2U << 2*8);
- 第一行
&= ~(3U << 16)清除PB8对应的MODER两位,使其变为00,即输入模式。这一步已经完成了输入模式的配置,不需要额外再执行|= 0U的操作。 - 第二行配置PUPDR为下拉(2U是二进制
10),此时引脚已经处于输入模式,所以该配置会生效。
三、关键结论
- 配置PUPDR前必须确保引脚处于输入模式,否则PUPDR的配置不会生效。
- 第二段代码的写法是有效的:清除MODER位后,引脚自动进入输入模式,后续配置PUPDR的操作是合法的。第一段的写法是更严谨但冗余的,两者最终效果一致。
内容的提问来源于stack exchange,提问作者AnatolianPerseus
相关产品推荐
相关产品推荐

