ST意法半导体
直播中

话多显蠢

9年用户 782经验值
擅长:479461
私信 关注
[问答]

PD0内部上拉与PD1内部上拉一起工作,读取的数值与实际不符是为什么?

我们开发了一款带有 STM32G071cbu MCU 的新板,我们已经在之前的项目中成功使用了它。
在这个项目中,我们决定使用带有内部 MCU 上拉功能的按钮。按钮连接其实很简单:

因此,在这种带上拉的配置中,所有数字输入(PA0-1 和 PD0-1)应在未按下按钮时读取 1。但事实并非如此!在这个问题中,我将编写导致问题情况的最少代码(我希望有人可以编译它并检查它是否在其他带有 g071 MCU 的板上)
代码:
  • #include "stm32g071xx.h"
  • int main(void)
  • {
  •                 RCC->IOPENR |= RCC_IOPENR_GPIOAEN | RCC_IOPENR_GPIODEN;
  •                 GPIOA->MODER &= ~0x0F; // Set PA0 and PA1 as inputs
  •                 GPIOA->PUPDR |= 0x05;
  •                 GPIOD->MODER &= ~0x0F; // Set PD0 and PD1 as inputs
  •                 GPIOD->PUPDR |= 0x05;
  •                 while(1)
  •                 {
  •                 }
  • }
问题:
将此代码下载到设备后,PA0 和 PA1 按预期工作:它们默认为高电平(约 3.3V),未按下按钮时读取高电平,按下时读取 0。但是端口 D 有一个奇怪的事情。设置相同但在端口 D 只有 PD1 为高电平(3.3V),PD0 电压为 0.286V(电压很重要),因此 PD1 为高电平且 PD 为 0(按钮读取) .
当我按下 PD1 按钮时,会发生什么情况,它变为 0V,但 PD0 实际上开始显示接近 3.3V!然后是按下PD1 PD0 正常工作,但当PD1 未按下时它不起作用。
我检查了。如果将 PD0 或 PD1 用作唯一带上拉的输入,它们可以正常工作,但它们似乎不能一起工作。我在我们的其他 stm32g071cbu 板上尝试了这段代码,结果是一样的(没有按钮,但是当 PD0 和 PD1 都设置为带上拉的数字输入时,PD1 有 3.3V,PD0 有相同的 0.286V!)。
这可能是我不知道的一些软件/设置错误,还是 STM32G071CMU MCU 硬件问题?








更多回帖

发帖
×
20
完善资料,
赚取积分