Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 5 sty 2025, o 12:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 9 lip 2015, o 21:13 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Dzień Dobry. Jestem początkujący w dziedzinie mikrokontrolerów 32-bitowych. Sprawa wygląda tak, że pojawiły się one u mnie na studiach i generalnie jest problem z zapoznaniem się z nimi. Posiadam moduł NUCLEO-L053R8 z rdzeniem Cortex-M0+ i posiadam także skonfigurowane środowisko Eclipse Luna wraz z przykładowym projektem. Chciałbym ten projekt rozbudowywać ale ciężko pewnie będzie mi to zrobić samemu i dlatego chciałem zapytać czy mógłbym liczyć na radę specjalistów w tej dziedzinie? Mam świadomość tego że istnieje dokumentacja i pewnie zostanę do niej odesłany ale chciałbym zaznaczyć że liczy ona ponad 700 stron i raczej wzbudza ona we mnie przerażenie. Załączę przykładowy kod który posiadam. Powoduje on miganie zieloną diodą która wchodzi w skład modułu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Plik nagłówkowy:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



1.Generalnie na początku chciałbym zapoznać się z nazwami rejestrów i z tym co za ich pomocą mogę zrobić

2.Chciałbym zlikwidować opóźnienie wywołane pętlą for. Wiem że można zrobić opóźnienie za pomocą tzw. SysTick Timera, ale nie wiem jak to przeprowadzić.

Na początku miałbym takie dwa założenia i jeżeli są specjaliści którzy mogliby mi jakoś pomóc w ich realizacji byłbym niezmiernie wdzięczny za jakąkolwiek pomoc.



Ostatnio edytowano 9 lip 2015, o 22:06 przez moscow18-1990, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lip 2015, o 21:53 
Offline
Użytkownik

Dołączył(a): 01 sty 2014
Posty: 116
Pomógł: 14

Sam zaczynałem z 32bitami dwa tygodnie temu;) Na początek przydadzą się książki, masz dwie pozycje po polsku:
Mikrokontrolery STM32 w praktyce Krzysztofa Paprockiego
STM32. Aplikacje i ćwiczenia w języku C Marka galewskiego

Co prawda autorzy używają SPL ale zawsze to jakiś łagodny wstęp;) Sam nie polecam używania tych bibliotek do wszystkiego bez opamiętania ale na przykład GPIO wolę ustawić przy użyciu biblioteki. Polecam na ich podstawie przeanalizować kilka przykładowych programów. Wejść w definicje funkcji z tych bibliotek i zobaczyć jakie rejestry są ustawiane. Ja jakoś nie mogłem się w nich odnaleźć, według mnie czasami utrudniały zrozumienie danego peryferium.

Powinieneś zacząć od prostego programu coś jak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Komentarze, które masz u siebie strasznie zaciemniają cały program;) Pomimo, że Manual ma te 600 stron to na początek wystarczy ci przeczytać kilka o RCC i GPIO. Może z 50 stron i masz tam wszystko co potrzebne do podstawowej zabawy z GPIO. Sam też bałem się tej dokumentacji. Teraz pierwsze co robię po uruchomieniu uC to otwieram Manuala i Datasheeta;) Bez tego niczego nie zrobisz;) Poza tym stm to nie avr i nie tak łatwo znaleźć w internecie poradniki czy przykłady a odpowiedź prawie zawsze jest w Manualu.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


taki o, prosty program. Co prawda na procesor z rdzeniem M3. Mam nadzieje, że niczego nie zapomniałem;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lip 2015, o 22:25 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Usunąłem komentarze w sumie rzeczywiście wyglądało to trochę nieestetycznie. Jeżeli chodzi o te książki to jedną z nich wypożyczyłem z biblioteki i przejrzałem i w sumie postanowiłem pójść trochę inną drogą. Uczę się programowania i tak na AVR-ach więc myślę że za jakiś czas po prostu będę próbował przenosić te programy na ARM-y. O takie totalne podstawy będę pytał na forach lub ewentualnie sam będę drążył temat. Na razie chciałbym poznać podstawy związane z GPIO(poczytam reference manual) i chciałbym inaczej zrealizować opóźnienie w moim programie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lip 2015, o 21:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 maja 2014
Posty: 126
Pomógł: 12

1. Tu pomoże tylko reference manual, nie musisz przecież czytać całego na raz.
2. W nagłówku core_cm0plus.h masz funkcję SysTick_Config(uint32_t ticks) która służy do odpalenia SysTicka, jako parametr podajesz np FREQUENCY/1000 i masz przerwanie co 1 milisekundę. Nie zapomnij o dodaniu obsługi przerwania do programu - void SysTick_Handler(void).


Autor postu otrzymał pochwałę

_________________
Pozdrawiam, Adrian.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 15:19 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Jest jeszcze jedno pytanko a mianowicie dzisiaj w swoim programie ustawiłem port jako wyjście w ten sposób:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i okazuje się że taki zapis przysporzył mi sporo problemów, ponieważ na 5 porcie ustawił mi jedynkę i zmienił stan pozostałych i zmienił stan bitów odpowiedzialnych za SWI(SWD) i nie mogłem uruchomić openocd i w związku z tym nie było komunikacji pomiędzy eclipsem a nucleo. Rozwiązałem ten problem za pomocą podania stanu wysokiego na pin BOOT0 ale tu pojawia się pytanie odnośnie linijki kodu, która znajduje się w moim programie i powoduje, że program działa poprawnie a mianowicie:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


co oznacza ta nieco skomplikowana linijka kodu. Podejrzewam że chodzi o maskowanie bitów. Najbardziej nurtuje mnie to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i to:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zastanawiają mnie te końcowe nazwy czyli MODE_5 i MODE5_0 no i generalnie cały ten zapis, który podałem jako pierwszy. Byłby ktoś w stanie pomóc mi rozłożyć to na "czynniki pierwsze"?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 15:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

W swoim "środowisku programistycznym" (Eclipse) masz ułatwienie, które nazywa się "znajdź" ("find", "szukaj" lub podobnie). Użyj go, by znaleźć interesujące cię nazwy (przeszukaj cały projekt). Z całą pewnością znajdziesz odwołania do linii zaczynających się od #define _szukana_nazwa_ i one wyjaśnią ci co to jest. Np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lip 2015, o 17:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Nie pisze tego z całą pewnością bo za mało wiem o STM-ie
ale jakbyś taki zapis
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

zamienił na taki
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

powinno pomóc .

Z drugiej strony zalecany jest zapis w takiej formie jak podałeś
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

tak że chyba lepiej jego stosować .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lip 2015, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 maja 2014
Posty: 126
Pomógł: 12

Te definicje to definicje poszczególnych bitów. GPIO_MODER_MODE5 to maska wszystkich bitów odpowiadających za ustawienie danego pinu w rejestrze. Akurat tutaj bity są dwa, więc są to dwie jedynki obok siebie, dla pinu 5 binarnie wygląda to tak: 0b110000000000. Maski tej używa się do kasowania bitów danego ustawienia, czyli u Ciebie jest to część:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Definicjie z zerem i jedynką na końcu to definicje poszczególnych bitów dla pinu 5, czyli u Ciebie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ustawia bit zerowy dla pinu 5 - pin ustawiony jako wyjście.
Schemat definicji jest uniwersalny i dla innych rejestrów jest tak samo, np:
SPI_CR1_BR_2 oznacza bit nr 2 dla ustawienia baudrate SPI w resjestrze SPIx->CR1.


Autor postu otrzymał pochwałę

_________________
Pozdrawiam, Adrian.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2015, o 22:08 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Udało mi się ogarnąć w miarę rejestry. Migam czterema diodami ale chciałbym zrealizować w końcu to opóźnienie za pomocą systicka i mam pewne pytania, ponieważ mam pewne trudności z realizacją tego opóźnienia a mainowicie:

w pliku core_cm0plus.h mam chyba konfigurację tego systick timera:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i z tego co powiedział jeden z kolegów muszę mieć funkcję void SysTick_Handler(void) ale mimo przewertowania internetu nie wiem co ma znaleźć się w tej funkcji i generalnie nie wiem jak później użyć tego opóźnienia w "mainie". Tak samo ta konfiguracja tego systicka jest dla mnie czarną magią. Zakładając że mam ten swój program:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam w związku z tym prośbę o pomoc.Założenie jest takie że chciałbym zrealizować opóźnienie zamiast pętli for czyli miganie diodami za pomocą systicka.Zadam może najpierw dwa pytania:

1.Wpisując w mianownik 1000 dostaję opóźnienie 1ms... a co musiałbym wpisać żeby uzyskać np. 100ms?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

2.Co ma się znaleźć w tej funkcji void SysTick_Handler(void)? I czy jest ona jakoś związana z konfiguracją systicka w pliku core_cm0plus.h?

Jeśli byłby ktoś w stanie mi pomóc przez to przebrnąć byłbym wdzięczny. Rejestry już w miarę ogarnąłem dzięki cennym wskazówkom.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 00:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Zobacz:
http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-1/
http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-2/
http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-3/

------------------------ [ Dodano po: 21 minutach ]

A na deser:
http://www.sunduino.pl/wordpress/start-z-stm32-vl-discovery-systick/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 14:43 
Offline
Użytkownik

Dołączył(a): 01 sty 2014
Posty: 116
Pomógł: 14

Niepotrzebnie chcesz deklarować funkcję SysTick_CLKSourceConfig() i SysTick_Config(), są one już zadeklarowane i zdefiniowane w innych plikach. Powinieneś je wywołać w funkcji main. SysTick_CLKSourceConfig() odpowiada za źródło z jakiego taktowany jest SysTick. Dokładny opis masz w pliku misc.c. U mnie na rdzeniu cortex M3 mam dwie możliwośći:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dla SysTick_Config() podajesz jaką wartością ma być ładowany licznik po zliczeniu do 0; wartość ta jest 24bitowa czyli możesz wpisać liczby 0x00000001-0x00FFFFFF. czyli od 1 do 16777215. Czyli jeśli SysTick będzei taktowany z maksymalną częstotliwością, czyli w twoim wypadku chyba 32MHz to wpisaująć tam wartość 0x00FFFFFF otrzymasz przerwanie co ponad 0,5s.

Polecam jednak ustawić przerwanie od SysTicka na 1ms i dekrementować tam zmienną w pętli aż się wyzeruje. Tak jak robi to SunRiver w poradniku;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2015, o 17:35 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Sprawa wygląda tak że udało mi się zrobić małe postępy, ale mam małe pytanko może ktoś będzie w stanie mi pomóc a mianowicie:
ustawiłem timer, migam diodą w przerwaniu wszystko normalnie działa, tylko:

1. Zastanawia mnie jaka częstotliwość jest dzielona przez preskaler

2. Mam problem ze świadomym ustawieniem czasu trwania okresu

Pokaże kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Chodzi mi o te dwie linijki:

Tutaj preskaler:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i ustawienie czasu trwania okresu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Generalnie jest tak że wszystko działa, na analizatorze logicznym czas trwania okresu to ok 2 sek. tylko może ma ktoś doświadczenie w stm-ach i byłby w stanie podpowiedzieć jak częstotliwość jest dzielona przez ten preskaler? Posiadam moduł nucleo l053r8 z rdzeniem cortex-m0+.

I czy ta częstotliwość która jest dzielona przez preskaler ma związek z ustawieniem tego rejestru? :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2015, o 20:54 
Offline
Użytkownik

Dołączył(a): 01 sty 2014
Posty: 116
Pomógł: 14

Reference manual. Zakładka system architecture. Patrzysz na jakiej szynie jest timer. W twoim przypadku jest to APB1. A jakim zegarem taktowania jest ta szyna to powinieneś wiedzieć. Linijka kodu, o która zapytujesz uruchamia tylko zegar dla timera, nic więcej;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO