Programowanie ARM, nauka, środowiska programistyczne IDE - Wersja do druku +- HomeMade (http://sp-hm.pl) +-- Dział: Oprogramowanie (/forum-84.html) +--- Dział: Technika programowania mikroprocesorów (/forum-85.html) +--- Wątek: Programowanie ARM, nauka, środowiska programistyczne IDE (/thread-2692.html) |
RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ8MVY - 18-07-2016 10:12 (17-07-2016 23:44)SP6LUN napisał(a): Praktycznie mam w tej chwili "uruchomione" Więc zabawa się zaczęła.... RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ5KHA - 18-07-2016 14:28 Czy sprawdzał ktoś część odbiorczą z Z002? Dokładnie chodzi o to, że znak znajduje się w buforze RX, ale nie jest ustawiana flaga, że pojawiła się wartość w rejestrze USART1->DR. RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ8MVY - 18-07-2016 15:17 Cześć, Tak działa dobrze. Jak masz w programatorze firmware J-Linka to zmień do tego przykładu na ST-Linka. J-Link ma strasznego babola, objawiającego się tym, że nie przesyła prawidłowych danych z komputera do STM-a Cytat:znak znajduje się w buforze RX, ale nie jest ustawiana flaga, że pojawiła się wartość w rejestrze USART1->DR. A sprawdź też pozostałe flagi dotyczące błędów np. błąd ramki FE. Jak się ustawiają, to prawdopodobnie RXNE się nie ustawi, bo wartość w rejestrze odbiorczym jest błędna. Przy okazji zauważyłem jeszcze jedną rzecz, która prawdopodobnie mi się przestawiła jak porządkowałem kolejność ustawiania rejestrów USART1, a tyczy się przykładu w archiwum Z002v1. W pliku usart1.c w funkcji usart1_Init jest obecnie: Kod: //Ustawiamy Pull-Up-a dla nóżki RX-a, aby nie wisiał w powietrzu, jak nie będzie do niczego podpięta a powinno być: Kod: GPIOA->PUPDR |= GPIO_PUPDR_PUPDR10_0; Przez przypadek zamiast Pull-Up-a włączyłem Pull-Down-a. Pomimo takiej drobnostki przykład działa bezbłędnie. RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ5KHA - 18-07-2016 17:13 Dzięki za odpowiedź, jeszcze popatrzę na to uważniej, wartość w rejestrze USART->DR jest taka sama jak wysłam z PC. RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ8MVY - 18-07-2016 18:08 Tu jest jeszcze jednen problem, z odczytem wartości rejestrów USART w debuggerze. Wspomniany bit RXNE (RX Not Empty) jest kasowany sprzętowo (programowo też można go skasować poprzez wpisanie 0 do tego rejestru) poprzez odczyt danej z rejestru DR. Więc jak debugger podaje Ci prawidłową wartość rejestru DR, to ta wartość musiała być fizycznie odczytana przez debugger. Jeśli tak, to i flaga RXNE automatycznie zostaje niezauważalnie skasowana. Trzeba być bardzo uważnym, aby zaobserwować zmianę flagi RXNE, bo widać ją tylko przez 1 odczyt rejestrów USART-a. Zawartość rejestru DR przez odczyt nie jest kasowana, więc widnieje cały czas w podglądzie rejestrów USART-a. Dopiero jak nadejdzie portem szeregowym nowa dana, to zostaje ona przepisana z rejestru szeregowego (niewidocznego) do rejestru DR, zastępując poptrzednią wartość... Nadal nie podałeś nic na temat tego, czy przykład w normalnym trybie (bez debugowania) Ci działa prawidłowo, jakie firmware masz obecnie w zintegrowanym programatorze, oraz jaką wersję płytki Discovery posiadasz. Są to kluczowe informacje, bez których można tylko gdybać.... RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ5KHA - 18-07-2016 20:09 Ok, dzięki za pomoc, pomęczę się jeszcze trochę sam, jak nie będzie wyników to będziemy się martwić, chodzi o to że program nie wchodzi w warunek (nie pamiętam z pamięci) funkcji usart1_getc() i return zwraca cały czas wartość zero, ale póki co się nie poddaję . RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ8MVY - 18-07-2016 20:25 Ok, jestem do dyspozycji .. A tak z ciekawości, które archiwum pobrałeś ? Z002.zip, czy to poprawione Z002v1.zip.. RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SP5FCS - 20-07-2016 16:17 (06-07-2016 12:07)SP6IFN napisał(a): A mnie dodatkowo interesuje też co jest na tej płytce ... Krótki opis modułu STM32F429-DISCO z Elektroniki Praktycznej w załączniku. RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SP6IFN - 20-07-2016 22:32 Dziękuję za załącznik jw. Nikt o nic nie pyta, Nikt się nie chwali, to ja sobie pozwolę napisać. Zadanie Z002 zostało przerobione, temat zrozumiałem, program jest wgrany do płytki uruchomieniowej i prawidłowo współpracuje z terminalem PUTTY. Nie obyło się bez problemów, ale dzięki Kolegom Piotrowi i Pawłowi, wszystkie problemy zostały rozwiązane. Komunikujemy się przy wykorzystaniu komunikatora qTox, warto go zainstalować, gdyż bezpośredni kontakt w sprawie pomocy jest nieoceniony. Rysio! RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SP5FCS - 23-07-2016 17:52 Podstawowym celem zadania nr. 1 było nauczenie się podstaw konfiguracji pinów portów GPIO. Poznaliśmy kod do ustawienia pinów jako wyścia do sterowania LED-ów oraz jako wejście do odczytu stanu klawisza BUTTON. Zadanie nr.3 obsługa encodera Kolejnym etapem poznawania konfiguracji pinów będzie poznanie sposobu odczytu stanu encodera. Piny do których podłączony jest nasz enkoder (PG2, PG3) są domyślnie ustawione w tryb INPUT, należy dodatkowo włączyć rezystory podciągające do plusa zasilania (PUPD_UP). Aby obsługa ekcodera była szybka, prosta i abyśmy nie gubili impulsów zrobimy to z wykorzystaniem systemu przerwań. Każdy pin może generować zewnętrzne przerwania sprzętowe EXTIx, np. pin encodera GPIO_G2 będzie generował przerwanie EXTI2. Rozpoznanie kierunku obrotu encodera jest zrobione w kodzie obsługi przerwania. Zmienna [ int8_t encoder_counter ] zawiera ilość odczytanych impulsów, wartość dodatnia to obrót w prawo, wartość ujemna obrót w lewo. Na podstawie obrotu enkodera jest modyfikowany okresu przełączania zielonej diody w przedziale 20...2000ms. Obracając encoder w lewo zielona dioda mruga coraz szybciej a w prawo coraz wolniej. Jeśli mamy odwrotnie należy zamienić wejścia A, B encodera. Wciśnięcie niebieskiego klawisza przywraca okres diody do wartości początkowej 500ms. W zadaniu mamy wydzielone pliki z funkcjami do konfiguracji pinów ( f4_cmsis_gpio.h, f4_cmsis_gpio.c ), trzy funkcje do ustawiania pojedynczy pinów oraz trzy do jednoczesnej konfiguracji wielu pinów na tym samym porcie. Takie podejście jest moim zdaniem najbardziej uniwersalne. W załączniku paczka z plikami do zadania nr. 3 Na zdjęciu podłączenie encodera do modułu DiskoveryF429 (GND-czarny, PG2-żółty, PG3-zielony). Bezpośrednio do wejść encodera a masą przylutowane są dwa kondensatory ceramiczne po 10nF do tłumienia drgań styków. |