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?
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);
}
kodları yazarken
__IO uint8_t UserPressButton = 0;
şeklinde bir tanımlama yapılıyor. burdaki __IO ne işe yarıyor acaba ?
@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 :)