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

STM32G070CBT6的PB15引脚GPIO异常:寄存器正常但电平不切换

排查STM32G070CBT6 PB15引脚输出无变化的问题

结合你的描述,我之前也碰到过类似的GPIO异常情况,咱们从软件到硬件一步步来排查:

1. 先确认引脚宏定义的正确性

检查CubeMX生成的引脚宏映射,比如MOTOR2_2_Pin是不是确实对应GPIO_PIN_15?有时候在CubeMX里配置引脚时,可能会不小心选错,或者宏定义被其他代码覆盖。你可以直接在代码里替换成GPIO_PIN_15做测试,比如把主循环里的MOTOR2_2_Pin改成GPIO_PIN_15,看引脚是否有变化。

2. 排查复用功能冲突

STM32G070的PB15支持多个复用外设功能(比如TIM1_CH3N、I2C2_SDA、LPUART1_RX),哪怕你配置成GPIO输出,如果有其他外设的时钟被意外开启,可能会抢占引脚控制权:

  • 检查你的代码中,有没有初始化TIM1、I2C2或者LPUART1的代码?这些外设的时钟是否被无意启用?
  • 你可以尝试在GPIO初始化后,强制清除PB15的复用功能位:
    MODIFY_REG(GPIOB->AFR[1], GPIO_AFRH_AFSEL15_Msk, 0); // 将AFRH的第15位设置为0,禁用复用
    

3. 极简代码测试(排除其他代码干扰)

写一个完全独立的测试程序,只初始化PB15为输出,排除其他GPIO和外设的影响:

#include "stm32g0xx_hal.h"

int main(void) {
  HAL_Init();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  while (1) {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_15);
    HAL_Delay(500);
  }
}

烧录这个代码后,用万用表直接测PB15引脚的电平,看是否能正常翻转。如果还是不行,基本可以排除软件配置的问题,转向硬件排查。

4. 硬件深层检查

虽然多块板子都出现问题,但也不能完全排除硬件设计或焊接的共性问题:

  • 用万用表测PB15引脚的对地电阻:当配置为高电平时,电阻应该接近VCC;低电平时接近GND;悬空时应为高阻状态。如果始终接近GND,可能是引脚短路到地。
  • 检查PB15的焊盘是否存在虚焊、漏焊,或者走线是否被其他信号干扰(比如靠近高频信号)。
  • 确认GPIOB的电源引脚(VDD)电压是否正常,虽然其他PB引脚正常,但电源域局部异常也有可能(概率较低)。

5. 检查芯片手册的特殊说明

再仔细核对STM32G070CBT6的data sheet,确认PB15是否有特殊的硬件限制:

  • 是否属于需要额外配置的引脚?比如某些引脚在特定供电模式下的行为。
  • 是否与BOOT模式或其他芯片启动配置有关?(PB15不是BOOT引脚,这个可能性极低,但还是确认一下)

如果以上步骤都排查完还是无法解决,建议提供极简测试后的寄存器状态(比如ODR、MODER、AFR寄存器的值),以及更详细的硬件原理图细节,方便进一步定位问题。

内容的提问来源于stack exchange,提问作者Jeph Gagnon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:53