2401_86933341 2025-03-10 20:08 采纳率: 0%
浏览 8

stm32蓝桥杯嵌入式省赛提问

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

img

img


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

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-10 20:23
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    你遇到的问题是,使用 setreset 函数控制 LED,但所有 LED 都亮了,而不是预期的结果。

    可能的原因是:

    1. setreset 函数没有正确地设置 GPIO 模式。STM32 的 GPIO 模式需要手动设置,例如,设置为输出模式。
    2. setreset 函数没有正确地设置 GPIO 的电平。例如,设置为高电平(1)或低电平(0)。
    3. setreset 函数没有正确地设置 LED 的驱动电流。例如,LED 需要高电流来驱动。

    建议:

    1. 检查 setreset 函数是否正确地设置 GPIO 模式和电平。
    2. 检查 LED 的驱动电流是否正确。
    3. 使用调试工具(例如,ST-Link)来检查 GPIO 的电平和 LED 的状态。

    以下是一个简单的示例代码,用于控制 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 的电平。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日