2017-02-04 3 views
1

Ich habe Eclipse Neon GNU ARM Eclipse Plugin Vers. 3.2.1 und ein STM32F411RE Nucleoboard. Ich folgte dieser Anleitung: http://gnuarmeclipse.github.io/GNU ARM Eclipse 3.2.1 Leere Vorlage HAL_Delay verursacht inf Schleife

Ich erfolgreich installiert die Toolchain, machte ein Blinky-Programm mit der Vorlage, die funktioniert, kann ich auch sagte Blinky prog, mit der d. H. Die HAL_Delay(ms) Funktion.

Sobald ich jedoch ein leeres Projekt erstellt habe, wird jedes Mal, wenn der Code die HAL_Delay-Funktion erreicht, eine Endlosschleife ausgelöst.

Dieser Code funktioniert mit dem Online-Compiler:

int main(){ 

    __HAL_RCC_GPIOA_CLK_ENABLE(); 
    GPIO_InitTypeDef GPIO_InitStruct; 
    GPIO_InitStruct.Pin =GPIO_PIN_5; 
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 
    GPIO_InitStruct.Pull = GPIO_PULLDOWN; 
    GPIO_InitStruct.Speed = GPIO_SPEED_FAST; 
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); 

    // Infinite loop 
    while (1) 
    { 
     HAL_Delay(2000); 
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); 
     HAL_Delay(2000); 
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); 
    } 
} 

jedoch in Eclipse Ich erhalte eine Endlosschleife, wenn es HAL_Delay erreicht. ABER die Funktion funktioniert in der Blinky-Vorlage, die init @ SysCLK ist für beide gleich.

Kann mir bitte jemand sagen, was ich hier vermisse?

+0

Edit: Habe gerade die HAL_Delay zu arbeiten, Lösung war die _inithardware.c im Quellordner zu ändern. Zeile 70, // Bei Verwendung von RTOSes deaktivieren, da sie ihren eigenen Handler haben. #if 1 <<< das war 0 vorher auf 1 geändert. Auch ich habe die elseif in der SystemClock_Config verwendet, mit HSI anstelle von HSE, machte ich Kommentare um die 1. wenn HSE-Teil, so dass HAL_Delay() jetzt funktioniert. –

+0

Wenn Sie die Lösung selbst gefunden haben, können Sie Ihre eigene Frage beantworten, anstatt sie in einem Kommentar zu aktualisieren. –

+0

@ bence ja es war spät und ich habe den Knopf dafür nicht gesehen: P, fertig. –

Antwort

1

Antwort ist, die if-Anweisung in _initialize_hardware.c Zeile 70/71 auf 1 zu setzen, damit Systick_Handler() HAL_IncTick() aufrufen kann;

Verwandte Themen