arkadaşlar merhaba stm32cube de timer programını kurdum 600 ms de bir giriyor içerisinde de bir değişken tanımladım her girmede artacak ama 20 21'e kadar artıyor sonra artmıyor led yakıyorum o kısımda mesela 21 den sonra yanmıyor başına gelen oldu mu böyle bir sorun yardımlarınız beklerim
Kodunuzu da paylaşırsanız daha fazla yardım alacaksınız.
Moderasyon: Kodlarımızı paylaşırken kod tagı içinde olmasını sağlayalım.
uint8_t irs=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
irs++;
if(htim->Instance == TIM1)
{
if(irs>10){
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_10);
}
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_4) // INT0 = PB4
{
irs++;
//HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_10);
if(intedg0 == 1) // Yükselen kenar
{
}
}
}
Kodum bu şekilde timer programında irs>10 için giriyor ama onu 11 12 vs yaptığımda oraya girmiyor ve lcd de irs değerinin artışını göremiyorum.
İlgili değişkeni fonksiyon içerisinde "static" olarak tanımlayınız.
Interrupt içinde kullanılan değişkenlerde volatile tanımlaması kullanırız. Bunu da deneyebilir misin ?
arkadaşlar dediklerinizi yaptım ama değişen birşey yok bana örnek bir kod paylaşabilirmisiniz bu uygulama ile ilgili bunu yapamadığım için projemi ilerletemiyorum.
İlgili değişkene sabit bir değer verin, bu değeri istediğiniz yerde görüyorsanız; bence kesme işleminizde bir sorun var. Belli zamanlarda mcu resetleniyor veya hataya giriyor. ErrorHandler içine PC13 için toogle ekleyin ve bu fonksiyona düşüp düşmediğine bakın.
Ayrıca, alttaki linkte bulunan uygulamalar ve videolar yardımcı olacaktır.
https://controllerstech.com/
hocam yaptım dediğinizi değişkene sabit bir değer girdiğimde giriyor istediğim yere timer fonksiyonuda çalışıyor ama değişken her timer tetiğinde artmıyor
Hazır kod bulmanız zor. Hele ki STM32 ile. Belki proje bulursunuz o da kendi uygulamanıza eklenemeyebilir.
MX ile sistem frekansı 72MHz olacak şekilde hazırlayın, PC13 çıkış olsun.
RCC -> HSE = Kristal
SYS -> Debug = Serial Wire, Timebase Source = SysTick
Timers, TIM2 -> Clock Source = Internal Clock, PSC = 7200-1, Counter Period = 5000-1 (500ms ile çalışacak, diğer hızları kendiniz hesaplarsınız)
NVIC -> TIM2 global interrupt "işaretli"
Sonra kodu oluşturun.
Proje kodlarında:
Core -> Inc içerisine counter.h adında bir dosya ekleyin. İçerisine;
#include <stdint.h>
extern volatile uint16_t myCounter; // Tanım değil, bildirimsatırlarını ekleyin.
Src -> main.c:
/* USER CODE BEGIN 0 */
volatile uint16_t myCounter = 0; // 0-49999 aralığı
/* User Code Begin 2 */ altına
HAL_TIM_Base_Start_IT(&htim2); // Kesmeyi çalıştır
Src -> stm32f1xx_it.c:
/* USER CODE BEGIN Includes */
#include "counter.h"
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM2) {
myCounter++;
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
if (myCounter >= 50000) myCounter = 0;
}
}
satırlarını ekleyin. Diğer eklentileri kendiniz oluşturursunuz...