首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STM32F401RE核发光二极管及纽扣实例

STM32F401RE核发光二极管及纽扣实例
EN

Stack Overflow用户
提问于 2015-04-07 16:05:32
回答 6查看 49.1K关注 0票数 1

我正试着在我的新的核心板上运行一个简单的程序,

我制作这个程序是为了当我按下用户的按钮(蓝色的)时,打开和关闭绿色的led,

代码语言:javascript
运行
复制
#include "stm32f4xx.h"
#include "stm32f4xx_nucleo.h"
#include "system_stm32f4xx.h"
#include "stm32f4xx_hal_gpio.h"
#include "stm32f4xx_hal_rcc.h"

GPIO_InitTypeDef GPIO_InitStructure; 

int main(void) {

    HAL_Init(); 

    __GPIOA_CLK_ENABLE();
    GPIO_InitStructure.Pin   = GPIO_PIN_5;
    GPIO_InitStructure.Mode  = GPIO_MODE_OUTPUT_PP;    
    GPIO_InitStructure.Pull  = GPIO_PULLUP;
    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;  
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);    

    __GPIOC_CLK_ENABLE();
    GPIO_InitStructure.Pin   = GPIO_PIN_13;
    GPIO_InitStructure.Mode  = GPIO_MODE_INPUT;
    GPIO_InitStructure.Pull  = GPIO_PULLDOWN;
    GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

    while (1) {
        if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)) {         
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); 
        } else {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        }
    }
}

但是我得到了错误的结果:

  • 当我按下用户的按钮,什么都不会发生,
  • 当我继续按下用户的按钮并重新启动(通过按下黑色的按钮),我得到了很好的结果,

程序似乎只在第一次运行时才检查蓝色按钮的状态,我不知道为什么,

如果您对问题的来源有任何想法,或者您有一个正在运行的程序来切换led按钮,请帮助我。

EN

回答 6

Stack Overflow用户

发布于 2017-05-03 02:55:43

我也有同样的问题--这就是我是如何解决的:

代码语言:javascript
运行
复制
while (1) {
        int stateOfPushButton = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
        if ( stateOfPushButton == 1 ) {         
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); 
        } else {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        }
    }
票数 6
EN

Stack Overflow用户

发布于 2016-06-14 19:12:30

将按钮的GPIO拉力设置为“拉”:

代码语言:javascript
运行
复制
#include "stm32f4xx.h"
#include "stm32f4xx_nucleo.h"
#include "system_stm32f4xx.h"
#include "stm32f4xx_hal_gpio.h"
#include "stm32f4xx_hal_rcc.h"

GPIO_InitTypeDef GPIO_InitStructure; 

int main(void) {

    HAL_Init(); 

    __GPIOA_CLK_ENABLE();
    GPIO_InitStructure.Pin   = GPIO_PIN_5;
    GPIO_InitStructure.Mode  = GPIO_MODE_OUTPUT_PP;    
    GPIO_InitStructure.Pull  = GPIO_PULLUP;
    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;  
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);    

    __GPIOC_CLK_ENABLE();
    GPIO_InitStructure.Pin   = GPIO_PIN_13;
    GPIO_InitStructure.Mode  = GPIO_MODE_INPUT;
    GPIO_InitStructure.Pull  = GPIO_PULLUP;
    GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

    while (1) {
        if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)) {         
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); 
        } else {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-10-12 08:18:25

GPIO_PULLDOWN模式更改为GPIO_FLOATING (或类似的内容)!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29496072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档