You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:01:36