HAL库延迟(HAL_Delay())

时间:2017-09-05 19:32:39

标签: arm keil stm32f4discovery hal

我正试图在我的stm32f4发现上闪烁LED。不知怎的,它停留在延迟功能上。我已将SysTick中断优先级更改为0并添加了IncTick()GetTick()个函数。我错过了什么?

#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 个答案:

答案 0 :(得分:3)

函数HAL_IncTick();必须从SysTick_Handler中断调用,通常在stm32f4xx_it.c文件中实现,你不能从你的代码中调用这个函数!

void SysTick_Handler(void)
{
    HAL_IncTick();
}

函数HAL_Init();在1ms内初始化SysTick定时器并启用中断。因此,在HAL_Init HAL_Delay应该正常工作之后。

注意:STM32HAL允许覆盖(参见关键字__weak)函数:HAL_InitTick,HAL_IncTick,HAL_GetTick HAL_Delay。因此,如果您想使用默认延迟机制,则不应在代码中实现这些功能!