我们开发了一款带有
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 硬件问题?