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



Teraz jest 28 mar 2024, o 12:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 25 ] 
Autor Wiadomość
PostNapisane: 4 lut 2016, o 19:06 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Witam wszystkich!
udało mi się dorwać STM32F411 i powoli zaczynam się nią bawić.
Dużo różnic między STM32 a AVR i pierwsze problemy pojawiają się zwłaszcza na początku...
Wnikliwie czytam Reference Manual i ustawiam każdy bit po bicie. Tak jest mi łatwiej, lepiej rozumiem to co napisałem i wiem ze zawsze znajdę info o tym w reference ;)
Zacząłem od zabawy diodą, potem przejdę do timerów itd a następnie zamieszonej na płycie scalaków.
Chciałbym zapytać o to co moze być powodem rozbieżności między tym co chcę ustawić a tym co uzyskuję.
Otóż próbuję wycisnąć maksymalne taktowanie 100 MHz i zapalać sobie diodę co około 1 sek.
Rozumiem, zę takie rzeczy robi się na timerach ale czy na prostym delay'u nie powinienem uzyskać mniej więcej tego samego?

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


Pozdrawiam! ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 20:15 
Offline
Użytkownik
Avatar użytkownika

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

Nie wiem jaki masz efekt w tym programie, ale podejrzewam, że kompilator optymalizuje ci funkcję delay() jako nic nierobiącą, czyli zbędną. Zatem ją usuwa. Spróbuj w tej funkcji dorzucić coś, albo w opcjach kompilatora wyłącz optymalizację (choć w tym przypadku nawet brak optymalizacji kompilacji nie musi zadziałać).

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 20:46 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Funkcja działa jednak nie uzyskuję odpowiedniego czasu opóźnienia.
Gdy wpisuje w delay 100 mln co powinno odpowiadać 1sekundzie przy 100MHz otrzymuję potężne opóźnienie.
Przy delay około 1.500.00 - 1.650.00 mam zmianę stanu diody co około 1 sek.

Wychodzi na to ze albo coś nie tak z HSE albo jest coś jeszcze o czym po prostu nie wiem :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 21:47 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

No i wiem że mogę sobie użyć CubeMX i zrobić gotowy projekt ;)
Chcę tylko nauczyć się całości od podstaw, dlatego pytam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 22:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

W ten sposób nigdy właściwie nie obliczysz delay'a. Jeden obieg pętli nie równa się jednemu cyklowi zegara. Użyj SysTicka'a :)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 22:25 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Systick'a? ^^
Gdzieś widziałem ale co do czego ;d poszukam ^^



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 22:59 
Offline
Użytkownik
Avatar użytkownika

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

Powinno pomóc:
http://www.sunduino.pl/wordpress/start-z-stm32-vl-discovery-systick/
http://www.sunduino.pl/wordpress/start-z-stm32-vl-discovery-systick-2-zmiana-clk/
http://www.sunduino.pl/wordpress/coide-toglujemy-porty-na-discovery-f4/


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 23:29 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Sunduino znam, wielokrotnie przeglądałem.
jedyne co mnie odstrasza to takie fragmenty:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

Gdzie konkretne definicje sobie sam piszę z Reference Manual.
Ale tak czy siak co do SysTicka podpatrzę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 23:39 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Oprócz tego nie czekasz na rozkręcenie PLL, oraz nie włączasz opóźnienia FLASH, oraz nie ustawiasz regulatora napięcia na 1.8V i zapewne leci na 1.2V
Po drugie większość IDE samo dodaje pliki z konfiguracją zegarów i ustawianie tego co wyżej opisałem, więc możliwe że samo ci się to ustawia a nawet o tym nie wiesz. Pokaż drzewko projektu.

Ale pokłony z mojej strony za to, że jako jeden z nielicznych nie zaczynasz od tej śmiesznej biblioteki SPL, tylko czytasz Reference i sam ustawiasz rejestry.
Co do Systicka to ustaw go sobie funkcjami z CMSIS, one akurat są w porządku, a i nie ma sensu bawić się w ustawianie systicka rejestrami. Ale oczywiście można jeżeli tak ci wygodniej.


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 23:52 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

krafin, w stmf4 też jest problem opóźnienia FLASH? bo gdzies widziałem że w F4 zostało to dość ograniczone.
Drzewko projektu, nie wiem czy chodzi ci po prostu o to ale pierwsze na myśl wklejam :
Obrazek
squeez, widziałem, pobrałem - będzie czytany :) i co do poprzedniego posta - PM?
Edit:
PM- Programming manual xd Właśnie w tym dłuuugim pdfie znalazłem :)

Skroję coś z tym SysTickiem, może uda się ruszyć, tak czy siak wrzucę efekty. Dziś spooooro czasu zajęła mi zabawa z PLLem i ogółem ustawianiem tych zegarów ^^



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 00:03 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Oczywiście, że nadal trzeba ustawiać odpowiednio delay-e. Popatrz na zakładkę Embedded flash memory interface w RM, a dokładniej na rozdział 3.4 i tabelkę w nim. Potem odwiedź register description ;) Ale u ciebie ustawia się zapewne przez funkcję w pliku system_stm32f4.c Popatrz na jego funkcję a sam zobaczysz.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 00:12 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Dużo tego jak na razie ^^
Zmęczenie już swoje robi, a chciałbym tego SysTicka zrobić ;d nie poddaję się ^^



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 00:52 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Fajnie, kumam.
Tylko ten zapis. Rzadko widuję i nie bardzo wiem o co chodzi:
__attribute__((interrupt))
Dokładniej co za co jest odpowiedzialne?
interrupt no nie wiem, wskazuje że funkcja jest przerwaniem (zgaduję)
Edit.
Sprawdziłem również bez tego zapisu - również działa ^^
Ale zawsze ciekawość :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 01:07 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Ten zapis nie jest do niczego potrzebny. Wystarczy sam void SysTick_Handler(void){}
Ale ja zapytam z innej beczki, z jakiego IDE korzystacie bo nie widzę plików z CMSIS a Systick_Config() jest jego częścią. I domyślnie o ile wykorzystujemy CMSIS mamy plik stm32fxxx_it.c w którym to mamy zdefiniowane przerwanie od systicka i wyjątków.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 01:23 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Ja korzystam z EmBitz w wersji 0.42. Ktoś kiedyś skrytykował nie pamiętam o co chodziło - mi działa bez zarzutów, szybko się odnalazłem w tym interface i fajny, jasny debugger.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 01:34 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Co do eclipse - bardzo lubię to środowisko ze względu na to że pracowałem na nim z AVR (głównie ze względu ze Pan Mirek wszystko krok po kroku pokazywał)
Niestety miewałem różne problemy. czasem działało miesiać potem się wysypywało bez żadnego powodu i wszystko od nowa - cała konfiguracja. W ARM postanowiłem odejśc od eclipse i postawić na coś nowego - mile zaskoczony tym embitzem żadnej konfiguracji - pierwsze uruchomienie i wszystko działa. Jedyne co to nie umiałem uruchomić debuggera - ale to nie wina środowiska tylko po prostu tego, ze nigdy tego nie robiłem ^^



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 02:17 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Ja korzystam i bardzo polecam TrueStudio. Szybki konfigurator, z automatu includuje wszystko co potrzebne, no i najważniejsze - działa właśnie na Eclipsie do którego też jestem przywiązany. Instalujemy, odpalamy i gotowe bez zagłębiania się w szczegóły. Po za tym obsługuje dużo innych rodzin uC co szczególnie doceniam gdy czasami działam jednocześnie na Stm oraz Lpc

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 09:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

Na początki z STM32 dobry jest keil. Co prawda ma ograniczenie kodu do 32kB ale na początek wystarczy. Zaś jego zaletą jest to że wszystko działa od strzała, nie trzeba nic kombinować.
Odpaliłem sobie Eclipse dla pracy z ARM ale stabilność pozostawiała wiele do życzenia.

Szybie ustawienie SysTicka na zadaną częstotliwość:
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 lut 2016, o 12:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

Najważniejsze żeby IDE działało i dało się z niego klepać kod :D

Funkcja SystemCoreClockUpdate() odczytuje jak programista ustawił częstotliwość pracy rdzenia a następnie przypisuje ją zmiennej SystemCoreClock. W ten sposób można sobie sprawdzić czy faktycznie dobrze ustawiliśmy taktowanie.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 13:44 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Juffre, bardzo przydatna funkcja ;)
Dzięki ;)

------------------------ [ Dodano po: 41 minutach ]

squeez, ustawiałeś już PLL'a z tym poradnikiem w tym dłuuuugim pdfem? xD
systick śmiga, teraz próbuję zamieszać trochę z taktowaniem, coś pozmieniać PLLem. Bardzo ciekawe cacko :D

Ciekawe ale wkurzające jak nie działa xD
Wydawałoby się że ustawiam wszystko właściwie ale niestety rejestry od PLLa nie ustawiają mi się wcale.
Oczywiście staram się ustawiać gdy PLL jest wyłączony, ale niestety się nie wyłącza.
Może przypadkiem ktoś jakiś pomysł ma?^^



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 17:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

Musisz ustawić flash latency, spójrz na rejstr FLASH->ACR.
Pamiętaj, że po włączeniu PLL trzeba odczekać pewien czas zanim pętla się ustabilizuje. W praktyce oznacza to czekanie aż ustawi się bit w jednym z rejestrów. Bit nazywa się jakoś tak: RCC_CR_PLLRDY



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 18:38 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Tak, uwzględniłem wszystko o czym napisałeś :)
Potem jeszcze raz posprawdzam i zobaczę czy coś uda się ruszyć :)
Edit:
Był mały błąd, jednak wciąż nie wyłącza mi się PLL - a jak pll się nie wyłącza to nie mogę oczywiście skonfigurować mnożników.
Może akurat ktoś jest na bieżąco i coś drobnego zauważy.
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 lut 2016, o 19:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

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

Kod ustawia prędkość rdzenia na 168[MHz] co jest max. częśtotliwością dla F407.

Może zbyt wcześnie włączasz PLL - ale to strzał.


Autor postu otrzymał pochwałę


Ostatnio edytowano 5 lut 2016, o 19:29 przez Juffre, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 19:28 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Dzięki, zobaczę potem, porównam i dam znać :)

------------------------ [ Dodano po: 8 minutach ]

Nie wytrzymałem, od razu sprawdziłem i nie widzę niczego co mógłbym pominąć bądź zrobić nie tak jak trzeba.

Teraz jeszcze przed ustawieniem bitów zresetowałem ustawienia. Bity ustawiają się znacznie przyjemniej :)
tylko jeszcze nie osiągnąłem tego co chcę, Dam znać jak się uda i pokażę cały kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 22:06 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

No dobra, ustawione, taktowanie mam tak jak chciałem 100MHz.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dzięki wszystkim za zainteresowanie tematem :)



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: 25 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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