Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => ARM7 Mikrodenetleyici => Konuyu başlatan: Reactionic - 05 Eylül 2017, 23:23:55

Başlık: HAL_Delay() Fonksiyonu Takılıyor
Gönderen: Reactionic - 05 Eylül 2017, 23:23:55
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); }
Başlık: Ynt: HAL_Delay() Fonksiyonu Takılıyor
Gönderen: bayelektronik - 05 Eylül 2017, 23:54:38
    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

Başlık: Ynt: HAL_Delay() Fonksiyonu Takılıyor
Gönderen: MC_Skywalker - 06 Eylül 2017, 07:47:34
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.
Başlık: Ynt: HAL_Delay() Fonksiyonu Takılıyor
Gönderen: Reactionic - 09 Eylül 2017, 10:33:49
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();
}