HAL_Delay() Fonksiyonu Takılıyor

Başlatan Reactionic, 05 Eylül 2017, 23:23:55

Reactionic

Merhabalar STM32F4 discovery kartıyla ARM'a ufaktan giriş yapmaya çalışıyorum ama mikroC ile PIC ve Arduino'dan sonra biraz karışık geldi açıkçası. StdPeriph yerine HAL kütüphanesini kullanıyorum pek fazla örnek olmadığı için led yakıp söndürmede(söndürememe) takıldım. Hazır böyle bir fonksiyon varken, HAL dökümanına bakarak bir şeyler yapmaya çalıştım ama delay'de takılıp kalıyor kod.  :-\ Böyle basit bir şeyde dahil takılınca gözüm korktu biraz  :-[

#include "stm32f4xx.h"
#include "stm32f4xx_hal_cortex.h"
#include "stm32f4xx_hal.h"

void SystemClock_Config(void);

int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  __HAL_RCC_GPIOD_CLK_ENABLE();
	
	GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.Pin   = GPIO_PIN_15;
  GPIO_InitStructure.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStructure.Pull  = GPIO_PULLUP;
  GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);

  HAL_InitTick(0);
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);   
  HAL_IncTick();
  //HAL_GetTick();
  while (1) {
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
  }

}

static void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks
dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); }

bayelektronik

    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
   HAL_Delay(100);

   Bu şekilde düzenle. Diğer türlü zaten sönmez delay ile ilgili değil sorun


MC_Skywalker

Pin toggle da kullanabilirsiniz.
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
HAL_Delay(100);



Tek gecikmeyle halletmiş olurdunuz.
Set ve Reset ile yaptınızda iki durum sınrasında da gecikme koymanız gerek.


İlk gecikme LED on süresi, ikinci gecikme ise LED off süresi olarak.

Reactionic

Haklısınız sorunu başka yerde aramaktan görememişim.
Birde HAL_IncTrick() fonksiyonunu şu hale getirmem gerekti çalışması için.

void SysTick_Handler(void)
{
    HAL_IncTick();
}