2017-09-05 440 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。所以如果你想使用默认的延迟机制,你不应该在你的代码中实现这些功能!