STM32G070CBT6上的GPIO出现奇怪问题-寄存器在ODR寄存器中显示输出值,但引脚电平不';t形开关
我对STM32G070CBT6有一个奇怪的问题 我的问题是,无论我的代码和寄存器显示什么,PB15上的输出都不会改变 我使用CubeMX创建了我的项目,其中只有PB15、PB14、PB12和PB2被设置为一个输出,在推拉模式下没有上拉或下拉。除osc引脚和电源引脚外,所有其他GPIO均设置为下拉输入。通过这种方式,我确保没有其他组件干扰和导致问题 对于这些引脚中的每一个,都连接了相同的组件:一个120欧姆的电阻器与一个100千欧姆的电阻器并联。100k电阻接地,而120欧姆电阻接MOSFET(IRLML2402) 我可以切换引脚PB14,PB12和PB2没有问题。但无论做了什么,PB15都不会切换 我使用带有IAR的Jlink跟踪,在我的GPIOB寄存器中,ODR和IDR设置为0x00008000,MODER设置为0x51000010,这意味着PB15确实被设置为输出,并且应该将引脚切换为高 这是使用cubeMX创建的初始化 PB15->电机1\u 2 PB14->电机2\u 1 PB12->电机1\u 1 PB2->MOTOR2_2STM32G070CBT6上的GPIO出现奇怪问题-寄存器在ODR寄存器中显示输出值,但引脚电平不';t形开关,stm32,gpio,Stm32,Gpio,我对STM32G070CBT6有一个奇怪的问题 我的问题是,无论我的代码和寄存器显示什么,PB15上的输出都不会改变 我使用CubeMX创建了我的项目,其中只有PB15、PB14、PB12和PB2被设置为一个输出,在推拉模式下没有上拉或下拉。除osc引脚和电源引脚外,所有其他GPIO均设置为下拉输入。通过这种方式,我确保没有其他组件干扰和导致问题 对于这些引脚中的每一个,都连接了相同的组件:一个120欧姆的电阻器与一个100千欧姆的电阻器并联。100k电阻接地,而120欧姆电阻接MOSFET(I
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, MOTOR2_2_Pin|MOTOR1_1_Pin|MOTOR2_1_Pin|MOTOR1_2_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PC13 PC6 PC7 */
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PA0 PA1 PA2 PA3
PA4 PA5 PA6 PA7
PA8 PA9 PA10 PA11
PA12 PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB0 PB1 PB10 PB11
PB13 PB3 PB4 PB5
PB6 PB7 PB8 PB9 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_13|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : MOTOR2_2_Pin MOTOR1_1_Pin MOTOR2_1_Pin MOTOR1_2_Pin */
GPIO_InitStruct.Pin = MOTOR2_2_Pin|MOTOR1_1_Pin|MOTOR2_1_Pin|MOTOR1_2_Pin;
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);
/*Configure GPIO pins : PD0 PD1 PD2 PD3 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
我在主循环中切换四个输出,在主循环中使用断点检查物理输出值。PB14、PB12和PB2切换正确。无论ODR和MODER中有什么,PB15都不会切换
while (1)
{
HAL_GPIO_WritePin(GPIOB,MOTOR1_1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,MOTOR1_1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,MOTOR1_2_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,MOTOR1_2_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,MOTOR2_1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,MOTOR2_1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,MOTOR2_2_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,MOTOR2_2_Pin,GPIO_PIN_RESET);
// HAL_GPIO_WritePin(GPIOB,MOTOR1_2_Pin,GPIO_PIN_SET);
//HAL_GPIO_WritePin(GPIOB,MOTOR1_2_Pin,GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
作为最后的努力,我举起了引脚PB15,这样它就不会连接到任何东西,并切换引脚。仍然没有成功
我在多个板上尝试了这种操作,它们都有相同的问题。我在这里不知所措。我一遍又一遍地检查文档,看看是否遗漏了STM32G070CBT6中关于PB15的内容,但什么也没看到
不知道下一步该去哪里
谢谢您的帮助。我仍然没有找到此问题的原因。也许运气非常糟糕,但在尝试第四个板后,第四个板工作正常。所以可能是生产上的问题
无论如何,我要结束这个问题。PB15是否有可能被用作外设的替代功能?在您尝试切换其输出之前,其他GPIOs寄存器的值是多少?我想最终将PB15用作PWM,但目前它严格设置为GPIO。PUPDR是0x08aaaa。OTYPER、PSpeder、LCKR、AFRL和AFRH设置为0x00000000。我创建了一个空白MXCube projet,其中只有PB15、PB14、PB12和PB2作为GPIO,未启用任何特殊功能。由于MODER为0x51000010,msb位为01,这意味着PB15处于GPIO模式,而不是备用功能