STM32F401RE-Nucleo LED-und BUTTON-Beispiel
Ich versuche zu laufen, ein einfaches Programm auf meinem neuen Nucleo board,
Ich habe dieses Programm entwickelt, um ein-und ausschalten der grünen led, wenn ich drücken Sie die Benutzer-Taste (die Blaue),
#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);
}
}
}
Aber ich bin immer falsche Ergebnis:
- wenn ich drücken Sie die user-Taste, nichts passiert,
- wenn ich drücken Sie die Benutzer-Taste, und ich neu starten (durch drücken der schwarzen Taste), bekomme ich gute Ergebnis,
Scheint es, wie das Programm überprüft den Zustand der blauen Taste nur bei der ersten Ausführung, ich weiß nicht, warum,
Bitte helfen Sie mir, wenn Sie irgendwelche Ideen, was das problem kommt, oder wenn Sie ein Programm, schalten Sie die led-Taste drücken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Problem, das ist, wie ich es lösen:
Ändern Sie die
GPIO_PULLDOWN
- Modus zuGPIO_FLOATING
(oder so ähnlich)!Stellen Sie Ihre button-GPIO Ziehen PULLUP:
Dieses Stück code ist, was Sie verwenden möchten, wenn Sie Ihre Tasten sind die höheren Strom-Vielfalt wie meine mechanische 2-state-Schalter:
und das hinzufügen einer int-Variablen wäre auch nicht verletzt, so stellen Sie sicher, dass Sie die Initialisierung der Variablen nur einmal vor dem Start des Haupt -, während-Funktion, sonst sind Sie am Ende mit undichten Speicher.
auch ich sehe, Sie sind nicht vertraut mit den Funktionen, versuchen Sie Folgendes:
oder wenn Sie nicht sicher sind, verwenden Sie ein tool wie dieses:[http://www.st.com/en/development-tools/stm32cubemx.html%5D