hal drivers ile problemim var

Başlatan mustalata, 02 Temmuz 2015, 14:36:33

mustalata

hocam merhaba . hal driverları ile benden stm32f407 üzerinde iki led var 5er sanıye aralıkla bunları yakmam ıstenıyor. yani 5 sanıye biri yanacak o sonunce dıgerı yanacak. kütüphane tanımlayarak yapabiliyorum fakat hal driver ları ile isteniyor . onun da c kodu farklı tarzda yardımcı olur musunuz?

muratbayindir

Hal kütüphanesiyel timer kesmesi oluşturulmuş ve ledler hazırlanmış.
ledin yanıp sönme süresini aşağıdaki kodu değiştirip istediğin gibi ayarlayabilirsin

#include <stm32f4xx.h>
#include <stm32f4xx_hal.h>
#include <stm32f4xx_hal_gpio.h>
#include <stm32f4xx_hal_rcc.h>
#include <stm32f4xx_hal_tim.h>

GPIO_InitTypeDef gpio_init;
TIM_HandleTypeDef TIM_Handle;

void TIM4_IRQHandler(void)  // Timer 4 interrupt
{
   __HAL_TIM_CLEAR_FLAG(&TIM_Handle, TIM_FLAG_UPDATE);
   
   
   HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
}

int main()
{
   HAL_Init();

   __TIM4_CLK_ENABLE();
   TIM_Handle.Init.Prescaler = 671 ;
   TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
   TIM_Handle.Init.Period = 6249; //62499;
   TIM_Handle.Instance = TIM4;
   HAL_TIM_Base_Init(&TIM_Handle);     // Init timer
   HAL_TIM_Base_Start_IT(&TIM_Handle); // start timer interrupts
   
   HAL_NVIC_SetPriority(TIM4_IRQn, 0, 1);
   HAL_NVIC_EnableIRQ(TIM4_IRQn);
   
   __GPIOD_CLK_ENABLE();   
   gpio_init.Mode = GPIO_MODE_OUTPUT_PP;
   gpio_init.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
   gpio_init.Pull = GPIO_PULLUP;
   gpio_init.Speed = GPIO_SPEED_HIGH;
   HAL_GPIO_Init(GPIOD, &gpio_init);
   
   __GPIOA_CLK_ENABLE();
   gpio_init.Mode = GPIO_MODE_INPUT;
   gpio_init.Pin = GPIO_PIN_0;
   gpio_init.Pull = GPIO_NOPULL;
   gpio_init.Speed = GPIO_SPEED_HIGH;
   HAL_GPIO_Init(GPIOA, &gpio_init);
   
   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET); //
   
   while(1);
   
}

e-design

kodları yazarken

__IO uint8_t UserPressButton = 0;


şeklinde bir tanımlama yapılıyor. burdaki __IO ne işe yarıyor acaba ?

fatal16

@e-design __IO    volatile yerine yapılan tanımlama.

#define __IO volatile   // kısaca demek istediğim.

Devamını merak edersen stdint.h içerisindeydi sanırım :)