24-07-2016, 21:48
Trochę się pogubiłem w temacie utworzonych MACR dla LEDów. Prosiłbym o przybliżenie tematu, zarówno do Z003, jak i wcześniejszego Z001v3, gdzie macra były zastosowane po raz pierwszy.
Rysio!
Rysio!
GPIOG->BSRRL = GPIO_Pin_14; //1->LED, dioda świeci
GPIOG->BSRRH = GPIO_Pin_14; //0->LED, dioda gaśnie
GPIOG->BSRRL = GPIO_Pin_14;
#define LED_RED_GPIO GPIOG
#define LED_RED_RCC RCC_AHB1Periph_GPIOG
#define LED_RED_PIN GPIO_Pin_14
#define LED_RED_OFF LED_RED_GPIO->BSRRH = LED_RED_PIN //niski stan na pinie
#define LED_RED_ON LED_RED_GPIO->BSRRL = LED_RED_PIN //wysoki stan na pinie
LED_RED_ON; // zamiast: GPIOG->BSRRL = GPIO_Pin_14;
#define _gpio_mode_set(gpio,pin_maska) gpio->MODER |= pin_maska //ustawia tryb pracy pinow na porcie
//domyślny po resecie INPUT oraz
#define GPIO_14_MODE_OUT ((uint32_t)0x10000000)
#define GPIO_14_MODE_AF ((uint32_t)0x20000000)
#define GPIO_14_MODE_ANL ((uint32_t)0x30000000)
_gpio_mode_set(GPIOG, GPIO_14_MODE_OUT); //na rejestrach lub
_gpio_mode_set(LED_RED_GPIO, LED_RED_MODE); //nazwy symboliczne
(26-07-2016 10:48)QRP73 napisał(a): [ -> ]Obsluga enkodera jest niepokojaco krotka w porownaniu do przykadow z internetu.
(26-07-2016 16:20)SP5FCS napisał(a): [ -> ]Długi kod to źle bo trudno go zrozumieć, za krótki też niedobrze bo to niemożliwe żeby te kilka linijek mogły robić to samo co rozbudowane funkcje. Wychowałem się na małych procesorach i generalnie jestem zwolennikiem prostych i szybkich aplikacji, lubię rejestry i przerwania. Obsługę encodera można zrobić na kilka sposobów, ten jest najprostszy i u mnie działa poprawnie.
(26-07-2016 16:20)SP5FCS napisał(a): [ -> ]Po pierwszych postach w tym wątku widziałem duży potencjał grupy i spodziewałem się prezentacji wielu własnych programów oraz ciekawej dyskusji. Niestety na tą chwilę tylko Paweł i ja zamieszczamy działające przykłady. Zachęcam wszystkich, bez tego nie będzie postępów ani w kursie ani nauce.
#define LED_RED_ON() { LED_RED_GPIO->BSRRL = LED_RED_PIN; }
#define LED_RED_ON() do { LED_RED_GPIO->BSRRL = LED_RED_PIN; } while(0)