2017-09-05 3 views
0

Ich versuche, LEDs auf meiner Stm32f4 Entdeckung zu blinken. Irgendwie hat es sich auf der Verzögerungsfunktion festgesetzt. Ich habe die SysTick-Interrupt-Priorität auf 0 geändert und die Funktionen IncTick(), GetTick() hinzugefügt. Was vermisse ich?Verzögerung in der HAL-Bibliothek (HAL_Delay())

#include "stm32f4xx.h"     // Device header 
#include "stm32f4xx_hal.h"    // Keil::Device:STM32Cube HAL:Common 


int main(){ 
    HAL_Init(); 

    __HAL_RCC_GPIOD_CLK_ENABLE(); 

    GPIO_InitTypeDef GPIO_InitStruct; 

    GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; 
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 
    GPIO_InitStruct.Pull = GPIO_NOPULL; 
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 

    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 

    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15, GPIO_PIN_SET); 

    HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 
    HAL_IncTick(); 
    HAL_GetTick(); 
    HAL_Delay(100); 

    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15, GPIO_PIN_RESET); 
} 

Antwort

1

Funktion HAL_IncTick(); Most aus SysTick_Handler genannt Interrupt, in der Regel in stm32f4xx_it.c Datei implementiert, Sie rufen Sie nicht diese Funktion aus dem Code!

void SysTick_Handler(void) 
{ 
    HAL_IncTick(); 
} 

Die Funktion HAL_Init(); Initialize SysTick Timer auf 1 ms und Interrupt-Freigabe. Nach HAL_Init sollte HAL_Delay also ordnungsgemäß funktionieren.

HINWEIS: STM32HAL ermöglicht das Überschreiben (siehe Schlüsselwort __weak) Funktionen: HAL_InitTick, HAL_IncTick, HAL_GetTick HAL_Delay. Wenn Sie den Standardverzögerungsmechanismus verwenden möchten, sollten Sie diese Funktionen nicht in Ihrem Code implementieren!

Verwandte Themen