2017-09-05 438 views
0

我想閃爍我的stm32f4發現leds。不知何故它卡在延遲功能。我已將SysTick中斷優先級更改爲0,並添加了IncTick(),GetTick()函數。我錯過了什麼?從SysTick_Handler稱爲HAL庫中的延遲(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); 
} 

回答

1

功能HAL_IncTick();要打斷,一般在stm32f4xx_it.c文件中實現的,你不會從你的代碼中調用這個函數!

void SysTick_Handler(void) 
{ 
    HAL_IncTick(); 
} 

上1ms的功能HAL_Init();初始化系統定時器定時器和使能中斷。所以,在HAL_Init HAL_Delay應該正常工作之後。

注意:STM32HAL允許覆蓋(請參閱關鍵字__weak)函數:HAL_InitTick,HAL_IncTick,HAL_GetTick HAL_Delay。所以如果你想使用默認的延遲機制,你不應該在你的代碼中實現這些功能!