olek623 Napisano Grudzień 19, 2016 Udostępnij Napisano Grudzień 19, 2016 Witam, tak jak w temacie chcę wykorzystać systicka przy przycisku tzn. aby uniknąć w while zmiany kilka razy wartości (np przy funkcji toggle zmianna może nastąpić kilka razy przy jednym wciśnięciu). Dlatego robię zmienną buttonczas, którą w momencie wciśnięcia ustawiam na 50 i systick liczy, jak skoczy zmienną flagową a ustawi na 1. Niestety mój program od razu przypisuje a=1 i cały program działa nieprawidłowo. Proszę o pomoc #include <stm32f0xx_rcc.h> #include "stm32f0xx_gpio.h" uint8_t buttonczas; uint32_t time; int a=0; void init(void) { SystemInit(); SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/1000); } void SysTick_Handler(void) { if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)) { buttonczas=50; } if (buttonczas>0) { buttonczas--; } else { a=1; } } void LED() { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOC, &GPIO_InitStructure); } void PRZYCISK() { GPIO_InitTypeDef MGPIO; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); MGPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; MGPIO.GPIO_Mode = GPIO_Mode_IN; MGPIO.GPIO_OType = GPIO_OType_PP; MGPIO.GPIO_Speed = GPIO_Speed_50MHz; MGPIO.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOA, &MGPIO); } int main(void) { PRZYCISK(); LED(); init(); while(1) { if(a==1) { GPIO_SetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9 ); } else { GPIO_SetBits(GPIOC, GPIO_Pin_9); GPIO_ResetBits(GPIOC, GPIO_Pin_8 ); } } } Link do komentarza Share on other sites More sharing options...
Maniek93 Grudzień 19, 2016 Udostępnij Grudzień 19, 2016 Twój kod potrzebuje przebudowy, w ten sposób nie ma prawa zadziałać. if (buttonczas>0) { buttonczas--; } else { a=1; } W tym miejscu jest powód dla którego odrazu przypisywana jest wartość a=1. Nie przypisujesz wartości początkowej dla zmiennej buttonczas, a nawet jeśli byś to zrobił to by i tak po chwili się wyzerowała. Dziwi mnie trochę, że to wogóle coś robi skoro te zmienne nie są typu volatile. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »