2017-09-05 200 views
0

stm32f4 발견시 LED가 깜박입니다. 여하튼 그것은 지연 기능에 갇혔다. 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(); 초기화 SysTick 타이머와 인터럽트를 가능하게한다. 그래서 HAL_Init HAL_Delay가 제대로 작동해야합니다.

참고 : STM32HAL은 override (키워드 __weak 참조) 기능을 허용합니다. HAL_InitTick, HAL_IncTick, HAL_GetTick HAL_Delay. 따라서 기본 지연 메커니즘을 사용하려면 코드에 이러한 함수를 구현하면 안됩니다.