HAL库中的延迟(HAL_Delay())出现了延迟。

7
我正在尝试在我的STM32F4 Discovery上闪烁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个回答

12

函数HAL_IncTick()被从SysTick_Handler()中断中调用,通常在stm32f4xx_it.c文件中实现。您不需要从自己的代码中调用此函数!

void SysTick_Handler(void)
{
    HAL_IncTick();
}

函数HAL_Init()初始化了SysTick定时器为1ms间隔并启用相关中断。因此,在调用HAL_Init()之后,函数HAL_Delay()应该可以正常工作。

注意:STM32 HAL允许您重写(参见关键字__weak)如下功能:

  • HAL_InitTick()
  • HAL_IncTick()
  • HAL_GetTick()
  • HAL_Delay()

因此,如果要使用默认的延迟机制,则不应在代码中实现这些功能!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接