蓝桥杯嵌入式,stm32G431RBTx 15届省赛练习


以上是看别人写的控制led的函数,大概知道啥意思,但想问下大家我就简单地用set reset为啥不能正常运行呢,而是所有led都亮了?(而且人家写的这个只能一次亮一个灯,我把led_ctrl函数里的all_set删了也会出现全亮的问题,有办法解决吗?)
蓝桥杯嵌入式,stm32G431RBTx 15届省赛练习


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你遇到的问题是,使用 set 和 reset 函数控制 LED,但所有 LED 都亮了,而不是预期的结果。
可能的原因是:
set 和 reset 函数没有正确地设置 GPIO 模式。STM32 的 GPIO 模式需要手动设置,例如,设置为输出模式。set 和 reset 函数没有正确地设置 GPIO 的电平。例如,设置为高电平(1)或低电平(0)。set 和 reset 函数没有正确地设置 LED 的驱动电流。例如,LED 需要高电流来驱动。建议:
set 和 reset 函数是否正确地设置 GPIO 模式和电平。以下是一个简单的示例代码,用于控制 LED:
#include "stm32f4xx_hal.h"
int main(void) {
// 设置 GPIO 模式为输出
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择 LED 的 GPIO pin
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
while (1) {
// 设置 LED 高电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
// 等待一段时间
HAL_Delay(1000);
// 设置 LED 低电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
// 等待一段时间
HAL_Delay(1000);
}
}
这个示例代码设置 GPIO 模式为输出,然后使用 HAL_GPIO_WritePin 函数来设置 LED 的电平。