我正试图在我的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);
}
答案 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。因此,如果您想使用默认延迟机制,则不应在代码中实现这些功能!