Na wypadek, gdybyś nie zauważył: przy takich deklaracjach i treści procedury konfiguracji DMA, jakie masz obecnie, do rejestru adresu pamięci DMA wpisujesz wartość bajtową odczytaną z pamięci ze zmiennej TxBuf, rozszerzoną zerami do 32 bitów, czyli wysyłasz przez UART zawartość tablicy wektorów wyjątków.
No to musisz mieć tablicę wektorów w RAM [; 4\/3!!
Dla całej aplikacji. W pliku z tablicą wektorów.
Freddie, to wiadomo. Zastanawiam się właśnie na tablicą wektorów przerwań. Myślałem, że do FreeRTOS muszę mieć to inaczej rozwiązane niż dla programu bez systemu. Rozumiem, że wystarczy mi plik z tablicą wektorów.
Słuszna uwaga z tym startupem. Mam go w katalogu projektu, który jest wskazany w ścieżkach eclipsa, ale nie wiem dlaczego nie jest linkowany. Może ma nieprawidłowe rozszerzenie? Teoretycznie istotna jest wielkość liter. Freddie, czy masz może jakiś ładny przykładowy projekt dla CM0? Dla STM32F0 nie, ale możesz spokojnie zrobić małego frankensteina...
W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
Nie dziala jest barszo ogólnym stwierdzeniem. Co nie dziala? DH? masz debuger. Coś innego? Yo tylko była tablica wektorów oczywiście.
Cortex, po resecie, odczytuje adres stosu i początku programu z początku pamięci. I tego nie przeskoczysz. Przesuwanie tablicy wektorów przydaje się np. jeśli na początku flasha masz kod bootloadera (z własną tablicą wektorów) a potem przechodzisz do właściwej aplikacji, która ma swoją osobistą tablicę wektorów pod innym adresem.
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
jeśli nie ma stosownego wpisu w tabeli wektorów przerwań? No dobra, wpis w tabeli jest ale jest o tym napisane tak małymi literkami że mi umknęło :-) Technika jednakowoż nie jest, wydaje mi się, tylko ciekawostką, można ją uznać za przydatną np. w programowaniu zdarzeniowym. Innym mi znanym przykładem jest RTOS QP/C gdzie handlery przerwań tzw. kernel...
teraz postanowiłem uruchomić timer 2 i w żadnych plikach nie widzę funkcji do tego timera. To poszukaj dobrze - musi być w pliku w którym jest tablica wektorów, być może jest to ten sam plik w którym jest startup.
Przeczytaj ten wątek i kup sobie inną płytkę. Co ma płytka wspólnego z tym problemem. Jak tablica wektorów jest zła to nic nie pomoże. Nawet zrobiłem porównanie STM-owego nagłówka z tym autora.
A ja zapytam : czy w tablicy wektorów przerwań znajduje się pod właściwym adresem handler obsługi przerwania od UART4? Bo zapewne nie i dlatego ląduje w DefaultHandlerze. Podejrzewam, że tablicę wektorów masz od STM32 z trzema uartami.
Proponowałbym raczej plik vectors jednak mieć w C, a nie C++ (nic to nie zmienia, poza właśnie problemem z manglowaniem nazw funkcji) (; Ewentualnie właśnie "extern" umieścić w pliku z tablicą wektorów. 4\/3!!
Witam, Wg manual'a do procesora Cortex M3 jeśli się zmienia kod programu lub/i tablicę wektorów przerwań, to przed następną instrukcją powinno się użyć instrukcji ISB, DSB i DMB aby bufory załadowały nowe wartości.
No ale jak zrobisz takie przyporządkowanie o jakim piszesz (bez podziału) to funkcja Reset_Handler ma adres w RAM, więc w tablicy wektorów będzie adres w RAM. Oczywiście zanim ten Reset_Handler się uruchomi, to w RAM nic nie ma - tak więc to nie ma prawa działać... 4\/3!!
Pytasz mnie po co jest tablica wektorów czy dlaczego jest w osobnym pliku? 4\/3!!
Nie zapomnij ustawić wskaźnika stosu przed skokiem do głównego programu. Jego wartość jest na samym początku kodu programu głównego. Ustalając adres bazowy głównego programu pamiętaj o wyrównaniu dla tablicy wektorów przerwań, nie pamiętam dokładnie, ale chyba do 512.
Jak jestem w przerwaniu i robię tak to działa: Większość funkcji FreeRTOSa zwraca jakiś kod błędu, wystarczy go sprawdzić a nie ignorować. Czy jak używam przerwań na FreeRtos to funkcja powinna mieć naked+ interrupt, czy tylko interrupt tak jak tu: W pliku FreeRTOSConfig.h po prostu dorzuć coś takiego: [syntax=C]#define vPortSVCHandler SVCall_Handler...
Tablica wektorów przestawia się sama w zależności od konfiguracji pinów BOOTx. 4\/3!!
Hehe, chyba ślepnę powoli :P Masz dobrą tablicę wektorów? Tablicę wektorów oczywiście napisałem sam, na podstawie twoich projektów dla µC LPC11xx i STM32. No i faktycznie, w tablicy wektorów zapisane miałem: Nie powinieneś działać na rejestrze 0? Tak, dokładnie, jedynka była wynikiem moich poszukiwań niepowodzenia, wcześniej widniało tam zero....
Zapisujesz do flash przy pierwszym uruchomieniu po programowaniu. Po resecie sprawdzasz czy tam jest ta wartość i jezeli jest to jest pierwsze uruchomienia, a jeżeli nie to kolejne Bez flagi to raczej się nie da (aslbo przynajmniej sprawdzenia czy coś jest zaprogramowane). Oczywiście mogę sobie wyobrazić rozwiązanie typu - ResetHandler jest do procedury...
hmmm Dobre pytanie. Ponieważ takie umieszczenie bootloadera pozwala mi uniknąć zabawy z tablicą wektorów przerwań, ominięcie przesunięcia początku programu i tym podobne.
Kod z użyciem samych rejestrów jest mało czytelny, trudny do ewentualnej migracji pomiędzy mikrokontrolerami itp, itd... Nie zgadzam się z Tobą. Ja piszę na rejestrach tak samo. Ten "szablon" to tylko copy paste z różnych fragmentów tego STM dostarczyło. Nie wiadomo nawet jak ta tablica wektorów wygląda i jakie są handler-y.
Też nie bardzo wiem jaka jest nazwa (wektor) funkcji tego przerwania, więc mam tak: Przecież wystarczy zajrzeć do tablicy wektorów i wszystko stanie się jasne... Można też zajrzeć do manuala, aby dowiedzieć się, że system CSS jest zmapowany na przerwanie NMI. Nie wiem czy czekanie na odpowiedź na forum jest naprawdę szybsze... 4\/3!!
:) Kto szuka nie (ten) błądzi. Dzięki za cierpliwość. Na chwilę obecną przyjmę to za pewnik. Temat jednak pozostawiam otwarty. Jeśli ktoś z czytelników rozumie mą rozterkę i potrafi mi wyjaśnić dlaczego tak a nie inaczej...to proszę się nie krępować :D PS Szczerze mówiąc dziwi mnie trochę to, że Ciebie jako fana logiki nie zastanawia pozorna bezsensowność...
No jak nie masz startupa i tablicy wektorów to czego oczekujesz? Zacznij od kompilacji przykładowego projektu dla STM32 z mojej strony - dopiero jak zrozumiesz co i jak to zmieniaj całkowicie "skład" projektu. 4\/3!!
Trzeba zmienić PROGRAM. Domyślnie w STM32 tablica wektorów znajduje się w flash, a to skąd uruchamiasz program czy jak jest skompilowany nie ma żadnego znaczenia. Manual: Boot from the embedded SRAM: SRAM is accessible only at address 0x2000 0000. Note: When booting from SRAM, in the application initialization code, you have to relocate the vector table...
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Najprościej będzie chyba wziąć pliki z projektu dla LPC1114 i poprawić w nich stosowne rzeczy (rozmiary pamięci, ich adresy i rozmiary stosów w skrypcie linkera, przerwania w tablicy wektorów). Nie jest to dużo roboty, choć jest dosyć nudna.
A przyczyna była błacha. Albo to przeoczyłem bo zdublowałem trochę kodu z aplikacji st u siebie - albo tego tam nie było. Nie był ustawiony adres bazowy tablicy wektorów przerwań - a powinien być na flash. A przed wywołaniem kodu st była u mnie pozostałość (z wcześniejszych aplikacji) która ustawiała adres bazowy tablicy wektorów na ram. no i przerwania...
Co będzie błędne, bo pierwszą rzeczą jaką robi Twój program jest jednak Reset_Handler, a nie to co przypadkiem trafiło na początek sekcji .text. Co nic nie zmieni bo i tak tablica wektorów jest zapisana "na sztywno" w większości projektów. Tak naprawdę jest to wartość ignorowana jeżeli tablica wektorów jest zrobiona tak jak w większości projektów -...
Po czym to rozpoznałeś? Powtarzające się bloki po 8 bajtów na początku pliku wyglądają na zaszyfrowaną tablicę wektorów przerwań. Nie zaszyfrowane powinny się powtarzać 4 bajty adresu we flashu lub ramie. Ktoś się nie przyłożył do szyfrowania. Jak by było zrobione porządnie to cały plik wyglądał by na losowy. Nie jest to AES ani prosty XOR. XTEA? Raczej...
Ok, wydaje mi się że przewalczyłem ten problem. Tzn teraz mam plik *.ld (sam zedytowałem jakiś znaleziony w bibliotekach STM32) i dodałem tablicę wektorów znajdującą się w w pliku stm32f10x_it.c. (chodzi mi o to by wykorzystać biblioteki bez przeróbek). Wszystko się teraz ładuje do Flasha z tym że jak debuguję to procesor skacze po programie. Tzn wchodzi...
Wygląda na to, że się całość się jakoś skompilowała pomimo warningów i zlinkowała (bo powstały mi pilki hex i elf). ...aczkolwiek rozmiar pliku wynikowego *.hex = 34 bajty każe przypuszczać, że jeszcze sporo przede mną... Brakuje Ci tablicy wektorów i startupa. Prościej będzie Ci zacząć od kompletnego przykładu, ewentualnie od przykładu + modyfikacje...
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Na początku podziękuję za dobry tutorial. A teraz mam prośbę. Próbowałem odpalić przykład z biblioteki STM32_USB-FS-Device_Lib_V3.3.0 (Virtual_COM_Port). Po pewnych bojach udaje mi się wszystko skompilować, natomiast po uruchomieniu program staje w nieskończonej pętli w funkcji static void __Default_Handler(void) z pliku vector.c. Czyli w tym pliku...
No właśnie. Main de facto jest wywoływany ze startupu. Dokładniej z Reset Handlera. Żeby go mieć musisz mieć tablicę wektorów... błędne koło :) Wbrew pozorom main nigdy nie jest punktem startowym całego programu.
Trzeba tylko przerobić tablicę wektorów. W każdym razie - zajrzyj do skryptu linkera i poczytaj ze zrozumieniem komentarze przy wartościach które są tam na górze. 4\/3!!
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
A czy ja się upieram, że poprawną? Ale te przewidziane 'prawidłowe' też nie zawsze działają. Dajemy 'reset' a program nie uruchamia się z bootloader-a i co wtedy? A nie uruchamia się ponieważ: włączony jest remap, przeniesiona tablica wektorów, zawiera 'byle co', nieustawiona 'power domain' itp. Twardy jump na adres fizyczny w ROM bywa skuteczniejszy.
po co w niektórych implementacjach takich 'rozbiegówek' mamy kod assemblerowy który kopiuje adres stosu do rejestru SP procesora? STM32 może używać dwóch stosów - jednego dla przerwań (nazwanego wyjątkowo myląco "main stack") i drugiego dla wątków (nazwanego "process stack") - a więc i dla "main()". To co jest w tablicy wektorów ląduje w MSP ("main...
Witam, Czy mógłbyś w 2 zdaniach napisać, na czym polegał problem, poza zmianą nazw wywoływanych handlerów w tablicy wektorów ? Sam walczę z właśnie FreeRTOS'em i zachowuje się on bardzo dziwnie. Raz działa, raz nie działa, raz uruchamia się prawidłowo tylko jeden wątek ..
Ustawiłeś odpowiedni adres tablicy wektorów? Rdzeń domyślnie skacze na sam początek przestrzeni adresowej, a jeśli twój program nie przeniesie wektorów w ten obszar, to po prostu nie będzie działał... 4\/3!!
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Skoro linker się nie zajmuje ustawieniem LSB tablicy wektorów, to chciałbym zapytać się jak to się dzieje? Zasugerowałem się informacjami na tej stronie http://pygmy.utoh.org/riscy/cortex/led-s... wprawdzie autor, tylko podejrzewa ;) pzdr.
Witam, ze względu na używanie bootloadera w obszarze od 0x8000000 do 0x8004000, potrzebuję pozostałą część aplikacji (nazwijmy ją częścią B) umieścić w dalszym zakresie. Tak więc zmieniam adres aplikacji B oraz wektora przerwań i niestety urządzenie jest rozpoznawane w systemie. Aczkolwiek sam kod działa. Jeśli aplikacji B zmienię adres startowy na...
Może po prostu w szale experymentów pomieszałeś trochę zbyt bardzo, bo startup MUSI być "do pary" z linkerem i tablicą wektorów. Ten pliki które zamieściłeś robią to samo co moje i tyle. Ja nie wierzę aby to było jakimkolwiek problemem tutaj... 4\/3!!
Pierwszy raz słyszę, żeby za pomocą komentarzy dało się cokolwiek zrobić w C :) Poszukaj w postach freddiego chopina, zrobił cały tutorial do toolchaina i udostępnił publicznie i nieodpłatnie projekt właśnie do migania diodą na STM32, zawierający plik startup, tablicę wektorów i konfigurację portów GPIO ze sterowaniem jednego pinu za pomocą bitbandingu....
Po prostu przechodzę z avr a tam przy pustej main bylo nieco ponad 100 bajtów. Bez sensu to Twoje porównanie. To przecież dwa różne światy. Sama tablica wektorów przerwań w F103 to 200bajtów (ok. 50 wektorów * 32 bitowy adres). Plus inicjalizacja rejestrów i samego C, plus ustawienie zegara. Wychodzi 1k, jest bardzo dobrze. Nie ma się co tym przejmować,...
Wszystko fajnie, pod warunkiem, że chce się używać STM32. Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę...
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
Datasheet podaje, że wytrzymałość pamięci flash to minimum 10000 cykli. Przemyśl, czy naprawdę warto kombinować, bo - uwierz - niepoprawne uruchomienie programu z RAM potrafi czasem sporo namieszać (szukasz błędu który nie istnieje). Co do komend, to po pierwsze musisz mieć inny skrypt linkera (bo nie używasz już flash), musisz wiec inaczej linkować...
Tak wracając do tego off-topica - o ile w standardzie gnu89 nic mi nie brakuje, to zostałem zapewne jednym z pierwszych orędowników najnowszego standardu c++11 (czy z racji wersji kompilatora c++0x) jak zwykle w odmianie gnu++11 (gnu++0x). W najnowszej odmianie tego języka jest parę naprawdę fajnych rzeczy, jak na przykład ujednolicenie inicjalizacji,...
arcyimperator napisał: po skoku do Aplikacji z Bootloadera pojawia się dziwne zachowanie: zaczyna się wykonywać kod main() który jest przerwany i widzę w debugerze wykonywanie konstruktorów obiektów globalnych. Możesz pokazać jak to wygląda w debuggerze? Te konstruktory wykonują się jakby z main() czy jakby z przerwania? Późnym wieczorem sprawdzę i...
Bo ten program jest zły! Cortex-M3 pod konkretnymi adresami oczekuje konkretnych rzeczy - na samym początku flasha - wartości dla SP, potem adresu (adresu! nie instrukcji!) wektora obsługi wyjątku reset itd. Zapomnij o takim prostym programiku - to tak po prostu nie zadziała. Potrzebna Ci jest tablica wektorów, potrzebny Ci jest "normalny" skrypt linkera...
Praktycznie wszystkie te pliki są konieczne, a właśnie to co jest w /inc już nie, bo to jest potrzebne Twojej aplikacji... Pliki konieczne: Makefile startup skrypt linkera tablica wektorów + chyba wymagany jest jeden z plików hdr_..., bo jest zainclude'owany w startupie. Jeśli bawi Cię tworzenie od zera czegoś co już jest gotowe, to proszę bardzo -...
Chce zaimplementować emulację EEPROMu za pomocą FLASHa w mikrokontrolerze STM32F429. Te mikrokontrolery mają taki podział sektorów: https://obrazki.elektroda.pl/6074785200_... (tabelka jest z F41x, ale dla F42x i F43x jest tak samo). No i jak widać używanie ostatnich sektorów jest niewygodne, bo są one bardzo duże. Trzeba użyć któregoś...
Ja stawiam na złe rozszerzenie plików assemblerowych (powinno być .S, a nie .s), bo jakby je w ogóle kompilował i linkował to byś miał błąd, że masz DWA startupy i DWIE tablice wektorów. Jak zwykle więc polecam oprzeć dalsze działania o mój przykładowy projekt, który - w przeciwieństwie do innych znalezionych "w necie" - działa (; http://www.elektroda.pl/rtvforum/topic13...
Jak wygląda sprawa z przerwaniami? Tam zamiast przerwań są używane callbacki. To nie tak jest. Callbacki są całkiem do czego innego. W programie HALowym, to użytkownik pisze obsługę przerwań sprzętowych (tak jak w klasycznym podejściu "rejestrowym") a specyfiką HAL jest tylko to że dostarcza pewnych gotowców na obsługę przerwań. Przykładowo weźmy uart....
Mam pytanie: jak obliczyć wartość napięcia skutecznego napięcia sinusoidalnego? Podaje sobie napięcie o amplitudzie 1V (+offset 1V) na kanał przetwornika ADC. I tu się pojawia problem. Jak powinienem napisać program, aby zbierać te próbki do jakiegoś bufora (rozumiem, że może być tablica float)? I dalej: jak policzyć tą wartość skuteczną? Wiem, że wzór...
Nie wiem jak wygląda Twój projekt. Ja mam w pliku port.c gdzieś tam dopisane tylko 3 linijki: [syntax=c] void PendSV_Handler(void) __attribute__ ((interrupt, naked, alias("xPortPendSVHandler"))); void SysTick_Handler(void) __attribute__ ((interrupt, alias("xPortSysTickHandler"))); void SVC_Handler(void) __attribute__ ((interrupt, naked, alias("vPortSVCHandler")));...
Skrypt linkera z Cube'a "działa" tak, że na początku pamięci ram ląduje sekcja data (zmienne inicjalizowane przy starcie programu - lokalne statyczne i globalne), potem jest bss (zmienne zerowane przy starcie programu - nie inicjalizowane statyczne i globalne). Następny kawałek to _user_heap_stack - czyli sterta i stos "w jednym". Rozmiar data i bss...
Witam, A tablica z wektorami się zgadza ? Pozdrawiam
Tak naprawdę jak dla mnie jedyna trudność jaką miałem to ogarnięcie środowiska i plików początkowych (startup ,linker, makefile, tablica vektrów) i nadal lekkie problemy mi one czasami nastręczają. No i wiadomo zrozumienie organizacji mikrokontrolera. Jak to się już zrozumie to obsługa konkretnego peryferia to żadem problem większość peryferii (timery...
1. Podstawowa zasada jest taka, że najpierw konfiguruje się to co ma wywoływać przerwania, a dopiero potem się to włącza. Innymi słowy - najpierw EXTI, potem NVIC 2. Wywal funkcję NVIC_Conf() - po co Ci ona, domyślnie tablica wektorów jest w pamięci flash i niech tam zostanie. 3. Funkcja obsługi przerwania musi mieć jakiś atrybut świadczący o tym, że...
liczba=atoi(nrfRX To jest tzw Undefined Behaviour. I jest to błąd bardzo poważny. Wytłumaczę Ci, co to robi. Bierze jeden bajt (zakładam że typ tego jest uint8_t []) i konwertuje do wskaźnika do char. Następnie to na co wskazuje ten wskaźnik (a będzie on wskazywać na jakiś adres w zakresie 0x00:0xff (czyli na tablice wektorów)) jest traktowane jako...
No ale przecież nie masz skryptu linkera - bez tego to po prostu nie ma prawa działać... A ta wtyczka z której korzystasz kompiluje pliki assemblera tylko jeśli mają rozszerzenie .S, a nie .s. Zestaw porad jest taki: http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Weź przykładowy projekt dla STM32,...
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Czołem, zajrzyj do plików core_cmFunc.h i core_cmInstr.h - sam zobaczysz, że "nic" ciekawego tam nie ma ;) Jedynie dołączają kolejny plik zależnie od używanego kompilatora. Poniżej wycinek z core_cmFunc.h : FreddiegoChopina . O wtyczce się nie wypowiadam, bo nie znam ;)
Tylko u mnie nie jest to żadna sekwencja. Kanaly 11 i 12 są zamienione. No właśnie - dlaczego? Jak to stwierdziłeś? Próbowałeś kilka razy pod rząd uruchomić konwersję? Wziąwszy pod uwagę Niedoceniasz "HALa" od ST... (; pozostaje uruchomić debugger i sprawdzić co się właściwie dzieje w uC oraz HAL-u. Docelowo warto również sprawdzić metodę Użyj DMA...
Fajnie że podałeś jakieś errory czy coś... Mamy zgadnąć co zrobiłeś źle? Powtórzę też to co napisałem ostatnio - poskładałeś sobie projekt z jakichś przypadkowych plików (mój Makefile, jakiś skrypt, startup z tamtej biblioteki), więc jak oczekujesz, żeby to działało, skoro skrypt linkera, startup i tablica wektorów są ze sobą nierozerwalnie połączone,...
(at)habrat włączasz taktowanie AFIO? Dodano: Tak sobie myślę, że grono osób chętnych do analizowania Twojego kodu byłoby większe, gdyby był ładnie sformatowany i ogołocony ze wszystkiego co nie potrzebne, ale to Tobie powinno zależeć ;) Bo teraz to... szybciej można to napisać od zera: [syntax=c]int main(void) { RCC_InitMax(); /* HSE, PLL, 72MHz */...
Tutaj chodzi o sygnał audio, zwyklą muzykę. Chcę z tych 24 bitów zrobić 16 bitów bo taką mam pamięć SRAM. Potem ten sygnał będzie "domiksowany" do sygnału głównego, 24-bitowego. Skoro nasz sygnał muzyki jako już zedytowany, znormalizowany materiał to faktycznie 16 bitów wystarczy w zupełności bez kompromisu jakościowego. Zauważ zresztą że miksując...
Witam Opracowałem prosty program, żeby nauczyć się eliminować programowo drgania styków. Idea jest taka, że po starcie wyświetla się napis „Test0 „ po naciśnięciu przycisku „Test1” i „Test2”. Wykorzystałem rozwiązanie z przykładu 9.6 z książki K. Paprockiego, sam przykład po uruchomieniu działa prawidłowo, czyli zlicza...
A zna ktoś może jakiś dobry przykład pod stm32f107 bo przykłady Freddiego Chopina są na stm32f103. ... Przecież wystarczy zmienić rozmiary pamięci w skrypcie linkera (tylko i wyłącznie). No i zgodnie z RM0008 zmodyfikować tablicę wektora przerwań, którą właściwie już masz w swoim projekcie więc wystarczy, że ją tam przekopiujesz. Minuta roboty Btw....
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Tak jak pisze Freddie Chopin mozna ale to bedzie reczne rzezbienie i skladanie kodu tak by zostawic dziure... Ale to jest rzezba okropna i utrudni na pewno prace nad kodem. Takiego rzezbienia nawet w binarce jest jeszcze kilka opcji, ale to nie najlepsze rozwiazanie. Wystarczy zapełnić tą jedną czy dwie strony rzeczami które praktycznie nigdy nie zmieniają...
Witam, Mam problem z realizacją przerwania z USART3 na STM32L152RBxx. W momencie wywołania przerwania debugger zatrzymuje się na funkcji default_handler(). Poniżej umieszczam kod: main: #include "stm32l1xx.h" #include "stm32l1xx_conf.h" #include <string.h> void GPIO_Conf(void); void RCC_Conf(void); void NVIC_Conf(void);...
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef? Dziękuję bardzo za wytknięcie błędu. Jeszcze sporo nauki przede mną. Po zmianie wywołania z HAL_UART_Receive_IT(&huart2, &Received, 1); na HAL_UART_Receive_IT(&huart2, Received, 1); UART zaczął ładnie odbierać dane...
Popatrz bardzo dobrze na te linijki: GPIOA->MODER = (0x01 < (2 * 0)); //Pin PA0 jako wyjście //GPIOA->OTYPER &= ~(1 < 0); //Pin PA0 jako Push-Pull GPIOA->OSPEEDR = (0x03 < (2 * 0)); //Pin PA0 jako High Speed Tablica wektorów ma marginalne znaczeni dopóki nie używasz przerwań - bez nich wykorzystywane...
Pomysł BlueDracko żeby to bootloader przestawiał offset tablicy wektorów jest bardzo dobry (; (a przynajmniej tak jest w normalnych Cortex-M, nie wiem, jak w STM32F1, który całkiem normalny nie jest). Może Freddie jako ekspert od F1 potwierdzi albo zaprzeczy. Obecny! Tutaj nie ma co zaprzeczać, ale przy okazji jakichś tam dociekań dowiedziałem się w...
Ok. Przeszukaj pliki w swoim projekcie po nazwie "SysTick_Handler". Znajdziesz tą nazwę w pliku asemblerowym (lub w pliku *.c) w tablicy wektorów przerwań. Ta tablica zawiera między innymi adres funkcji o nazwie SysTick_Handler. Linker umieszcza tablicę pod odpowiednim adresie w pamięci (zgodnie z datasheet procesora).
Witam, Mam problem z komunikacją STM32 z komputerem. Moja płytka to STM32L-Discovery [url=http://www.st.com/internet/evalboar... Chciałem napisać sobie najprostszy program do komunikacji z komputerem. Jak na razie nic nie działa. Pisałem program z pomocą książki "Mikroprocesory STM32 w praktyce" Krzysztofa Paprockiego. Musiałem...
Problem wynika z tego, że w Cortexach jeden ze stosów jest inicjalizowany SPRZĘTOWO, po resecie, tak samo pobierany jest adres funkcji Reset_Handler(). Problem o którym piszesz jest znany i polega na tym, że procka resetujesz, on w tym momencie wczytuje sobie SP oraz adres funkcji Reset_Handler(), a następnie programujesz do niego coś nowego, zupełnie...
Wydaje mi się że nie "przesunąłeś" tablicy wektorów przerwań: SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; w pliku system_stm32l4xx.c Chyba trzeba szukać dalej: Tablica wektorów jest przesunięta w bootloader: SCB->VTOR = APP_ADDRESS; Tę linię należy usunąć z tego pliku o ile nie masz zamiaru zmieniać mapowania pamięci na adres 0x0 (a...
te 2 pliki musze zmienić oraz dane w makefile i linkerze tak ?? W Makefile to za dużo zmian nie będzie (może jakieś nazwy plików), więc głównie linker i tablica wektorów. O to jaki kompilator będzie użyty chodziło mi że w includes są scieżki do g++ i jeśli będzie kompilować się w edge to nie będzie żadnych komplikacji ?? Te ścieżki są wykrywane automatycznie...
Nie wiem o co chodzi, support STM mi powiedział, żebym wgrał kod do ramu oraz wektor przerwań. Cały problem od początku: Zadanie programu jest następujące: ze sterownika sczytuję wartości enkoderów i zapisuję je do pamięci flash. (powinno to być wykonywane timerem co 10ms). Następnie odczytuję te wartości z flasha w celu odtworzenia ruchu i odpowiednie...
Cześć, Ponieważ pojawiła się prośba o możliwość udostępnienia uproszczonej wersji na inny uC to przedstawię krótką instrukcję jak dostosować projekt do potrzeb. Generalnie w obecnej wersji obsługiwane są dwie rodziny procesorów czyli STM32F4xx i STM32H7xx - prawdopodobnie nie powinno być większych problemów z innymi podobnymi układami STM natomiast...
Zmieniłem trochę w projekcie. Zastosowałem najnowszą wersję FatFS. Plik z konfiguracją funkcji zadeklarowanych diskio.h pobrałem ze [url=http://www.siwawi.arubi.uni-kl.de/a... strony i przerobiłem go by pasował do STM32L. Po testach objawy wyglądają tak: Karty 512MB i 16GB: porgram mniej...
Witam. probuje zrobic wlasna stałą tablice skokow w pilku startowym .s (potrzebne mi jest to do bootloadera). probuje zrobic tak: globals .bt_vectors .section .ident_section,"a",%progbits .type bt_vectors, %object .size bt_vectors, .-bt_vectors bt_vectors: .word WriteFunction .word ReadFunction .word 0 gdzie WriteFunction i ReadFunction to sa funkcje...
Witam, Mam problem z komunikacją przez USART, będąc w debugu wykonując poniższą pętle krok po kroku (step into) wszystko jest ok, dane są wysyłane i odbierane. Natomiast po wciśnięciu run czy step over czasami zostanie wysłany i odebrany [Tx i Rx zwarte] jeden, maksymalnie trzy bajty(najczęściej liczba wysłanych jest o 1 większa) i hard fault, czasami...
Witam Jak wyliczyć coś takiego za pomocą preprocesora ? Criterion for valid user code: The reserved Cortex-M0 exception vector location 7 (offset 0x 0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The bootloader code checksums...
Witam, Używam FSMC do obsługi wyświetlacza, a timera do generowania przebiegu który steruje serwomechanizmami. Zauważyłem taką przypadłość, że jak coś zmieniam na ekranie to serwa lekko drgają, co zapewne jest spowodowane jakimś opóźnieniem w wysterowaniu wyjścia przez zegar i/lub uruchomieniu przerwania które ładuje następna wartość do rejestru (jeden...
Hej Freddie, tym razem to już mam poważny problem i proszę Cię o pomoc. Problem mam cały czas z przerwaniami. Nigdy mi w sumie tak naprawde nie zadziałaly na tym projekcie od stm. Przerobiłem Twoją tablice wektorów przerwań: /** \file vectors.c * \brief STM32 (STM32F101 - STM32F103) vector table and __Default_Handler() * \details STM32...
Witam, Chcę obsłużyć przycisk USER za pomocą przerwania. Projekt oparty jest na ćwiczeniu 9 z książki "STM32 Aplikacje i przykłady w języku C". NVIC_Config(void) void NVIC_Config(void){ //Konfigurowanie kontrolera przerwan NVIC NVIC_InitTypeDef NVIC_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; #ifdef VECT_TAB_RAM // Jezeli tablica wektorow...
Witam, Żadne rozwiązanie z innych tematów nie działa. Posiadam płytkę STM32VLDISCOVERY, zasilam ją z portu USB. Dodatkowo posiadam konwerter na FT232, konwerter działa poprawnie, echo jest przesyłane. Korzystam z programu Terminal v1.9b. Program na odebranie 49 ma zapalać diodę LED a po odebraniu 50 ma gasi diodę. Proszę o pomoc w znalezieniu błędu....
Witam! Dzięki za szybkie odpowiedzi. Starałem się odpowiednio zmodyfikować kod korzystając z sugestii Piotra i VanThora, aby uzyskać pożądany efekt. Jednak nadal nie wygląda to dobrze. Dla kodu zamieszczonego poniżej uzyskuję na oscyloskopie jeden okres sygnału o aplitudzie ok. 4-5mV (sygnał bardzo zaszumiony). [syntax=C] #include "stm32f10x.h" void...
Gdy dodałem jako atrybut do funkcji "weak" żeby kompilator nie dodawał na wejciu odkładania na stos Atrybut "weak" służy do zupełnie czego innego. To o co Ci chodzi to atrybut "naked" - funkcja z tym atrybutem w zasadzie powinna zawierać tylko assemblera. Co do plików których używasz, to ja mogę polecić jak zwykle to samo, czyli mój szablon dla STM32F1...
A tablica wektorów na 100% poprawna? Jak podejrzysz w pliku .lss wektory, to pod właściwym adresem jest adres Twojej funkcji obsługi? P.S. Ten plik na pewno jest main.c, a nie main.cpp? Bo w tym drugim przypadku faktycznie uruchomienie przerwań wymaga kilku wciśnięć klawiszy więcej. 4\/3!!
tablica wektor stm32 tablica wskaźników tablica adresem stm32
konwerter antenowy wycieraczek renault scenic żółta kontrolka samochód kluczykiem
Alternatywy dla stabilizatora 7805: LDO, DC-DC, LM317 TRACO POWER TSR1-2450 - Specyfikacja i Zastosowania