W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
W EP03'2018 był artykuł z przykładami. Po co kopiować tablice do RAM, jeśli możesz się do nich dostawać bezpośrednio (po adresach) przez QSPI?
W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz to wykluczyć, przed wysłaniem ramki do komputera wyślij cokolwiek do STM32, żeby ten zarejestrował adres IP i MAC w swojej...
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.
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!!
W Twoim działającym przykładzie do rejestru wpisujesz adres tablicy ("&" może być albo może go też nie być - również zadziała wg mnie), natomiast w przykładzie niedziałającym najpierw do funkcji podajesz adres tej tablicy, a potem jeszcze raz wyciągasz adres tego adresu - żeby zaspokoić Twoje potrzeby kompilator zmienną tab umieszcza gdzieś na stosie...
Nie używaj tej głupawej biblioteki to będziesz wiedział dokładnie Co zrobiłeś i jak to cofnąć. Zmiana wskaźnika stosu PRZED wywołaniem jakiejś funkcji (FLASH_Lock() ) też nie wydaje mi się szczególnie dobrym pomysłem. W ogóle proste zadanie, ale tak je zakręciłeś jakimiś dziwnymi konstrukcjami, że nie wiadomo o co chodzi... A tak przy okazji, to skoro...
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.
Czyli w domyślnej podstawowej konfiguracji nie muszę inicjować stosu w inny sposób niż ustawienie odpowiedniej wartości w tablicy przerwań?
Podsumowując... Loader umieszczony jest we flash od adresu 0 i nie ma od tego odstępstw. Aplikacja umieszczona jest pod dowolnym adresem we flash z wyrównaniem do 512. Żadne biblioteki nie maja kodu na stałe przypisanego pod konkretny adres, nawet SPL, wszystkie startupy i tak zależą od linkera, no chyba, że ktoś sobie coś udziwił i coś na stałe przypisał....
po takiej deklaracji w sekcji .ssitag lądują wskaźniki do tej tablicy, a nie sama tablica, jak wymusic żeby całosć tam wylądowała? Musiałbyś albo w tablicy umieścić nie napisy ("...") tylko po prostu wskaźniki do tych napisów (osobnych obiektów), z których każdy miałby również ten atrybut. Druga opcja to zrobienie tablicy tablic (obecnie masz tablicę...
Witam Jak w temacie chcę połączyć dwa stm32 przez Ethernet ale bez PC, ustawić adresy statycznie, i wymieniać między nimi dane. W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz...
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ś...
Pokaż cały kod - inicjowanie, main, Reset_Handler i tablicę adresów wyjątków. Im dłużej patrzę w te kawałki, które podsyłasz, tym więcej mam podejrzeń.
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.
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.
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...
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...
Jak sprawdzić gdzie kompilator Keila umieścił tablice? Zadeklarowałem jedną zwykłą w RAM a drugą jako static do Flash. A chciałbym się przekonać że tak na prawdę jest. Przeglądałem plik .map ale jak wyłowić z niego potrzebne informacje? Ctrl+F w pliku map i sprawdzasz czy tablica jest pod adresem 0x08xxxxxx (flash) lub 0x20xxxxxx (RAM). Zresztą zobacz...
zostanie wysłana po i2c cała paczka danych, czy może się zdarzyć, że zostanie wysłany kawałek starej tablicy i kawałek nowej ? (w trakcie wysyłania zostaną już nadpisane dane) Czy jednak trzeba sobie jakoś samemu zapewnić to, żeby takie "zbiory" były wysyłane jako całość ? W czasie przesyłania przez DMA, możesz modyfikować zawartość, bo i tak DMA widzi...
http://www.st.com/content/ccc/resource/t... lub znajdz funkcję static void low_level_init(struct netif *netif) i tam jest zdefiniowana tablica z adresem. Nazywa się róznie w zależności od wersji (bo to lokalna zmienna)
Ja się pozbyłem tablicy pozwalając funkcjom przepisującym zwiekszać sobie adresy od 0 do numbofvar-1. Adresy wirtualne zrobiłem w taki prosty sposób bez udziwnien, przy których potrzebna jest ta tablica.
Witam Chciałem umieścić tablice pod stałym adresem w pamieci flash, ale nie na koncu flasha. Do tej pory robiłem to tak: wycinek z pliku linkiera dla GCC [syntax=c] MEMORY { rom (rx): org = 0x08000000, len = 192k var (rx) : org = 0x08030000, len = 64k ram (rwx): org = 0x20000000, len = 64k } .... SECTIONS { .dane : { KEEP(*(.dane)) *(.dane*) } >var...
Tak na chłopski rozum to tablica przerwań może się zaczynać tylko od adresów, które mają 7 najmłodszych bitów równe 0 i dlatego w rejestrze VTOR te bity są nie zaimplementowane. Wyszczególnienie bitu 29 jako selektora FLASH/RAM służy chyba do zaznaczenia, że np. pamięć zewnętrzna nie może służyć do przechowywania tablicy wektorów przerwań, pomimo że...
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.
1) Czy dla zmiennych o rozmiarze poniżej 32bity zawsze przydzielane jest 4 bajtowy rozmiar pamięci? To nie ma nic wspólnego z 32 bitami :) Masz wyrównywane adresy do 4 bajtów, dlatego kompilator dodał Ci w środku tablicę 3 bajtową. Jeżeli chcesz żeby taka struktura miała 9 bajtów to musisz jej nadać atrybut packed. 2) Czy stosowanie zmiennej 8 bitowej...
Co ty za bajki opowiadasz? to tablicy unsigned charow w flashu stm32 juz nie mozna trzymać? Co cie obchodzi szerokość słowa flash do zapisu , skoro tabelkę 'progmem' constów masz w RO? Kompilator sie martwi jak umieścić tą tablicę. Morzesz mu narzucić makefile'em region/sekcje w której chcesz mieć tą tablicę. Gdzie jest problem? To, że ci nie działa...
Istnieje szansa że tak - program po prostu postarał się przypisać adresom odpowiadające im rozkazy no i wyszedł taki oto mix [; Widać tutaj, że tablica wektorów raczej jest dobra, teraz podejrzyj Reset_Handler, a konkretnie adresy które ładuje on do "czyszczenia" .bss i inicjalizacji .data - wg pliku map Reset_Handler był pod adresem 0x08015128 4\/3!!
W tym wypadku chyba najprościej będzie to zrobić tak: [syntax=c] float wspkal; uint8_t * ByteArray; ByteArray = (uint8_t *)&wspkal; i2cwrite(adr1, ByteArray[0]); i2cwrite(adr2, ByteArray[1]); i2cwrite(adr3, ByteArray[2]); i2cwrite(adr4, ByteArray[3]); [/syntax] Wtedy traktujesz to co znajduje się pod adresem wspkal, jako tablice czterech bajtów i możesz...
Jest napisane: ustaw PSIZE na 32 bity. To wpływa na sposób i czas zapisu i nie ma nic wspólnego z organizacją pamięci. W F4 pamięć zapisuje się w słowach 32-bitowych - zrzutuj wskaźnik na uint32_t na tę tablicę i zapisuj po 32 bity.
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ś...
To chyba jakiś wiekowy kod, bo w tym samym pliku występowały liczby binarne zapisane z przedrostkiem 0b. Taki przedrostek to jest rozszerzenie GCC, nie wiem czemu miałoby to świadczyć o wiekowości lub niewiekowości czegoś - ktoś znał i sobie użył, bardzo wygodne. I wcale nie takie stare, bo oficjalne dopiero od wersji 4.3 (jakieś ~6 lat). Sprawa czysto...
No to wstaw tam dowolny wkaźnik, żeby reset handler był przesunięty o te 4 bajty. Analogicznie do innych zarezerwowanych. Swoją drogą, czy tablica wektorów musi zawierać osobne adresy do funkcji reserved ? Zdaje się, że starczyła by jedna (pomijając fakt rozszerzalności takiego rozwiązania).
Funkcja wyświetla na LCD kolejne wartości wprowadzane do tablicy bufor, nie tylko z pod adresu bufor Ja nie rozumiem tego -> jak można wyświetlać pozycję której nie ma? Ja też tego nie rozumiem, ale wyświetla się zawsze więcej cyfr niż zadeklarowana tablica...
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.
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!!
Jeszcze nie pracowałem na procesorach STM32 (co zmieni się jutro), ale z tego co już wyczytałem, to: - w pamięci PMA (widocznej przez okno zaczynające się od 0x40006000) musi znajdować się tablica BTABLE oraz bufory na dane - (ad3) wartość wpisana do BTABLE to offset wewnątrz pamięci PMA, pod którym zaczyna się tablica deskryptorów buforów. EPnTxAddr...
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...
A gdzie włączasz adc? Nie znam cuba czy tam innega mx'a, ale gdzie i jak konfigurujesz adc? Chyba przy inicie DMA powinien być adres adc podany, chyba że masz inny kanał dmą piszący do tych buforów? Jakoś może weź to blokowo rozrysuj jak to ma działac. Może zamiast adc wklep tablice np. sinusa I wysyłaj tego sinusa i patrz czy wychodzi z daca i czy...
To za mało - w RAM musiałaby się znaleźć tablica adresów procedur obsługi wyjątków oraz wszystkie funkcje wołane z procedury przerwania (np. SPL). Moim zdaniem problem leży gdzie indziej, np. w źle napisanej obsłudze przerwań UART lub w grubszym błędzie koncepcyjnym.
O wskaźnikach kolega słyszał? Jak najbardziej słyszał i używał jednakże w tym przypadku wg. mnie wskaźnik będzie miał identyczne zastosowanie jak tablice. Potrzebny podwójny wskaźnik, który mógłby być zwracany z jakiejś funkcji, jednakże należy zauważyć, że wartości tablic są stałe, więc tworzenie wskaźnika, dynamiczna alokacja a następnie wypełnienie...
- po co było rzutowanie *(__IO uint32_t*) i dlaczego adres wyliczał się błędnie Nie wiem czemu to usunąłeś, ale to jest KONIECZNE. A to dlatego, że ty nie masz skoczyć pod adres (tablica_wektorów + 4), tylko pod adres który jest zapisany w (tablica_wektorów + 4). I właśnie po to było tam rzutowanie i dereferencja wskaźnika. 4\/3!!
W braku tablicy wektorów (; Przykładowy projekt pojawiłby się bardzo chętnie, tyle że nie mam niczego z takim układem - może pożyczysz jakąś małą makietkę na kilka dni? <: W każdym razie proponowałbym postąpić zupełnie inaczej. Weź projekt dla STM32 - w nim jest najmniej do zmiany: 1. w skrypcie linkera ustawiasz inne adresy i rozmiary pamięci 2....
Prawdopodobnie nie włączyłeś przerwania odbioru danych w USART - bit RXNEIE w rejestrze CR1. A poza tym . oczekiwanie w procedurze obsługi przerwania to nie jest dobry pomysł, a właśnie to robisz. Masz poniżej tablicę do zainicjowania USART z przerwaniem odbioru w STM32F0 - adresy rejestrów i ich zawartości - wychodzi to sporo krócej niż przy użyciu...
cześć takie dwie sprawy. 1. Zakładając że mam zadeklarowane dwa takie ciągi znakowe [syntax=c]char *str1 = "string numer 1"; char str2[] = "string nr 2";[/syntax] oraz jakąś funkcję która wysyła przekazany ciąg znaków dla przykładu na RS choc może być to jakiś LCD [syntax=c]void wyslijRS(char * ciag);[/syntax] z tego co rozumiem to str1 jest ZMIENNĄ...
Niestety nadal nie pokrywają mi się wyniki. Oczywiście brałem wartość począrkową jako 0xFFFF FFFF. A jeżeli chodzi jeszcze o ustawianie DMA + CRC. W takiej knfiguracji ustawiam transmisję memory to memory, gdzie adresem docelowym jest CRC->DR. Jako Peripheral (DMA2_Stream4->PAR) jest tutaj adres w pamięci gdzie jest zapisana tablica z danymi. Inkrementowany...
Niee :) Pod adresem 0x0000:0000 znajdziesz sektor w którym jest zapisana tablica partycji. Jeżeli jest prawidłowa, to musisz sprawdzić zawartość bajtów komórek z offsetem 0x01BE i 0x01C2, a z offsetem 0x01C6 masz adres (w bajtach) pierwszego sektora partycji danych czyli BootPartitionRecord (BPR), w którym dopiero masz zapisane wszystkie ważne informacje....
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....
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...
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...
Nic nie stoi na przeszkodzie, aby ten plik był sobie i plikiem C++, byle miał owe extern "C" - ta deklaracja oznacza tylko, żeby nie manglowało nazw, możesz w takich funkcjach wywoływać dowolne klasy itp. Tak czy siak extern "C" przyda się w pliku z tablicą wektorów, ale i przed faktyczną funkcją obsługującą przerwanie (bo taka może być w dowolnym pliku...
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...
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ę...
Program się tam nie zaczyna. Tam programator ładuje Twoją binarke i tam zaczyna się tablica wektorów. Ale zdecydowanie nie program :) Taki trochę skrót myślowy ;) Jeżeli chcesz tablica wektorów była zgodna z wpisami w elf-ie to musisz (przykład ze startupu STM-a gdzie tablica jest w pliku asemblerowym) Skrypt linkera: /* ENTRY(Reset_Handler)...
Zastanawiam się w jaki sposób wygenerować sumę dwóch sygnałów sinusoidalnych o różnych parametrach z wykorzystaniem DAC i DMA. Czy mogę jednorazowo (na początku programu) wyliczyć sumę dla poszczególnych próbek i przy konfiguracji DMA podać jedynie adres na początek tablicy przechowującej wartości czy muszę obsłużyć przerwanie od DMA w połowie transmisji...
Dziękuję Ci jeszcze raz za pomoc ale niestety nadal mam to samo. Ale wykryłem jeszcze jedną ciekawą rzecz: Jeśli odczytuję 7 razy ten sam Rejestr to otrzymuję zawsze dobrą wartość oprócz 2 razu. Ale jeśli zmienię na auto-inkremętację adresu (po prostu (MSB-1) ustawiam na 1) to oczekiwana wartość jest dopiero na 3 miejscu. Czy jest możliwość że mam jakiś...
Powinno się dać Konfigurujesz 3 kanały DMA odpowiednie dla każdego kanału timera TIM2_CH1 - DMA1-5 TIM2_CH2 - DMA1-7 TIM2_CH3 - DMA1-1 DMA konfigurujesz jako transfer pamięć -> peryferial, z inkrementacją tylko pamięci, podajesz adres tablicy, adres rejestru CCR, ilość transferów, rozmiar danych i tryb kołowy, W timerze zezwalasz na żądanie DMA (rejestr...
1. Pierwsze 14 wyjątków pochodzi z rdzenia (2+14 adresów w tablicy). Te z rdzenia mają numery ujemne lub 2..15, spoza rdzenia - nieujemne lub od 16 w górę. 2. Jw, ale część wyjątków rdzenia też ma ustawiany priorytet. 3. Najlepiej zapomnij o "grupowaniu". W praktyce nie ma żadnego sensu korzystanie z tego. Domyślnie po reset mamy zawsze konfigurację...
(at)stmx, dopiero teraz zauważyłem dlaczego ostatnie rozmowy były takie chaotyczne... Ponieważ podczas pisania mojego postu dodałeś swój post nr.#17 i nie zauważyłem go. Dlatego nie rozumiałem po co odwołujesz się do jakieś funkcji writeF w kolejnych swoich postach :lol: :lol: :lol: :D Napisałeś: [syntax=c]*(volatile uint16_t *)(pageaddr) = *uint16_t_ptr;[/syntax]...
Zupełnie naplątałeś... Po pierwsze, nie przejdzie *ple=99.1 . Dlaczego? Bo 'ple' jest wskaźnikiem na unsigned int , więc kompilator nie będzie przypisywał ci wartości zmiennoprzecinkowych do typu całkowitego, więc otrzymujesz ekwiwalent przypisu *ple=99; ... Po drugie, czy ty może dysponujesz debuggerem? Wypadałoby sprawdzić co dzieje się z pamięcią...
Witam ponownie, jakiś czas temu zadałem pytanie odnośnie przechowywania bitmap w pamięci flash mikrokontrolera. Jednakże troszkę to zagmatwałem ,więc postanowiłem otworzyć nowy temat. Postaram się wyklarować pytanie najbardziej jak potrafię. :) Mianowicie mam do przechowywania tablicę mieszczącą 76800 elementów 16-bitowych oraz kilka innych mniejszych....
Co ma CLK do naszego przypadku z LCD jak go nie używamy?? To jest najważniejsze: p.FSMC_AddressSetupTime = 1; p.FSMC_DataSetupTime = 1; Ja mam wszystko w rejetrach na wartości minimalne czasów i nadal lipa. Uzywam stm32f217 z 120 MHz taktowania, więc powinno być lepiej niż w STM32f1, ale tak nie jest. Zauważyłem, że jak zmieniłem ilość danych z 16 na...
Dzięki za odpowiedź, tak wiem że EBI nie ma być szybkie lecz odciążyć i zautomatyzować. A jaka jest prędkość ebi? Taka jak rdzenia czy 2x większa jak EBI? Bo już się pogubiłem. Miałem nadzieję że EBI jest 2x szybsze niż rdzeń, i wtedy pomimo obecności obliczeń da radę wycisnąć przetoczenie danych (z inkr adresu) przynajmniej na połowie prędkości rdzenia,...
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...
Witam, scalak STM32F103, mam problem z dziwnym zachowaniem się logiki - utworzone zmienne się na siebie czasami nakładają, znaczy to tyle, że tworząc np dwie tablice 4 elementowe ostatni element pierwszej i pierwszy drugiej się na siebie nakladaja - na co to może wskazywac ?? Jak zrobię wiecej elementów w tablicy niż jest wykorzystywane, to jest jakaś...
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,...
Generalnie wszystkie operacje jakie robisz w przerwaniach są jak dla mnie zbędne. 1. Wyłączasz to samo SPI w obydwóch przerwaniach... po co? Przecież może sobie zostać włączone. Gdy jest wyłączone np mogą się pojawiać niechciane stany na pinach zegara czy CSa. 2. Wyłączasz kanał DMA, choć on się wyłącza sam. 3. Kasujesz flagi, choć one kasują się same....
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ć,...
Korzystam z: Układ STM32 P103 (procesor STM32 F103 RBT6) Programator ARM-USB-OCD-H Środowisko CrossWorks v2.1.1 Problem: Pisząc własną obsługę USB wzorowałem się na przykładzie dla Keila (USB HID) i paczce z przykładowymi programami do USB ze strony Olimexa dla układu STM32 P103. Pierwszy (dla Keila) nie działał (operował na innych PINach itp.) ale...
Została mi jeszcze jedna rzecz do zrobienia. W projekty na których się wzorowałem stworzone zostały dla rodziny STM32F10x MD, ja mam zestawik ewaluacyjny z układem z rodziny STM32F10X MD VL. Zauważyłem, że poza oczywiście peryferiami, rozmiarami pamięci i maksymalną prędkością taktowania różnią się również adresami przerwań. Czy żeby to pozmieniać to...
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...
tmf napisał: w końcu standard C nigdzie nie definiuje, że stałe muszą być we FLASH. Standard C nie wie nic o FLASH, ale to nie powód. To oświeć mnie, co jest powodem. Rzeczywiscie - plik .c z taką tablicą skompiluje w ciągu pewnie 0.2 sek (a stanie się to raz o ile coś się w tym pliku nie zmieni), zlinkuje w ciągu kolejne 0.05sek. Pitolenie z ar i...
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...
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...
Przeglądałem co było w reference manual, a na SPL mam działający przykład na innej płytce z stm32f407 tylko tam jest wysyłane do pamięci wyświetlacza przez FSMC z użyciem DMA ale nie bardzo wiem jak to rozgrzebać, tutaj mam przypięty wyświetlacz pod port i napisałem sobie do niego "ręczną" obsługę, żeby nie mapować pinów od FMC ( wyświetlacz jest tylko...
Witam kolegów, mam problem z transmisją szeregową z wykorzystaniem DMA. Chciałbym osiągnąć następujący wynik, po każdym zdarzeniu TXE wysyłana będzie ramka poprzez USART3. Poniżej zamieszczam kod: Ustawienie USART3: [syntax=cpp] RCC->APB1ENR |= RCC_APB1Periph_USART3; USART3->SR =(USART3->SR & 0xffbf); USART3->CR1 = (1 << 2) | //Włączenie...
A tam na początku pamięci to nie jest tablica deskryptorów buforów? Jeśli tak, to chyba nie można tam wpisywać co popadnie, bo np. pod 0x4000_6002 byłby 9-bitowy USB_COUNT0_TX. Owszem, tablica deskryptorów jest tam (BTABLE), i w tym właśnie problem, że nie mogę jej poprawnie zdefiniować, z powodu opisanego problemu. Pod adresem 0x40006002, tak jak...
Witam! Tworzę projekt, który polegać ma na bezprzewodowym połączeniu STM32F303 Discovery i HC-05 z ELM327 (wersja bluetooth). Jestem bardzo początkujący, jeśli chodzi o programowanie a zależy mi na tym projekcie, dlatego postanowiłem zwrócić się o pomoc. Korzystam z STM32CubeMX oraz Eclipse z wbudowanym rozszerzeniem „System Workbench for STM32”....
Próbuje ustawić częstotliwość na QN8025, aby przy pomocy słuchawki móc puszczać muzykę. Mam problem, ponieważ pierwszy raz robię projekt tego typu i nigdy wcześniej nie komunikowałem się przez i2c. Używam płytki NucleoF103RB i kod piszę używając STM32CubeIDE. Moduł z układem QN8025 podłączyłem według schematu https://obrazki.elektroda.pl/5432896100_...
Witam Niedawno zacząłem "zabawę" z zestawem Kamami ZL27ARM z procesorem STM32F103VB. Mam problem z przerwaniem od timera SysTick. Jest ono generowane 4 razy za często - miało być 1 raz na sekundę, a jest 4. Kwarc 8MHz, SYSCLK = 72MHz, SysTick_CLK= 72/8=9MHz czyli załądowanie do licznika wartości 9'000'000 powinno dać zgłoszenie przerwania co 1s, więc...
Powróciłem do projektu po przerwie i niestety ma problemy z odpalaniem aplikacji przesuniętej o offset 0x10000 (wpadam w Hard Fault), jeśli z yamla wyrzucę wszystko od 'memories' to program działa. Mój yaml, taki jak kiedyś :] : SCB->VTOR = 0x08010000; #ifdef DISTORTOS_ARCHITECTURE_ARM_CORTEX_M3_R1P... SCB->CCR |= SCB_CCR_STKALIGN_Msk; #endif//...
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...
Czy mógłby mi ktoś wyoślić , jak w C można uzyskać nałożenie małej grafiki na większą pełnoekranową w wyświetlaczu LCD-TFT ? Telegraficzny skrót problemu: -na LCD z karty SD wczytuję obrazek (na cały ekran , 320X240 , kolor, grafika "bazowa") , używam bibliotek GLDC , FatFS.Wrzucam plik odczytany z SD do zadeklarowanej tablicy i potem pętlą wczytywane...
Witam , Wracam do tematu . Zegar skończony i przetestowany . Podziękowania dla autora za pomoc . Kilka krótkich filmów z pracy zegara wykonane telefonem . https://filmy.elektroda.pl/11_1551555088... https://filmy.elektroda.pl/90_1551555174... https://filmy.elektroda.pl/15_1551555225... https://filmy.elektroda.pl/89_1551555287... Jedna z dwóch gier...
Witam, posiedziałem odrobinę i większość problemów się rozwiązała. <Pituś Bajtuś> oczywiście masz całkowitą rację. Po adresie początku stosu ma być tablica wyjątków/przerwań a nie instrukcje. Tak się ciekawie złożyło że kod się uruchamiał (ale pewnie tylko pod debuggerem ) czyli głupi ma zawsze szczęście jeśli nawet jest ono złudne ;) dodałem...
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...
Po pierwsze ta linijka jest bardzo ciekawa: DISCARD : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } Ja bym to wywalił od razu, bo to wcale nie usuwa informacji debugowania, tylko CAŁOŚĆ kodu biblioteki, który w tym momencie nie będzie zlinkowany - dzielenie, funkcje matematyczne, dowolne funkcje "standardowe" - aż dziwne że z czymś takim się to kompiluje....
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...
Bawienie się we wlasne tablice to zawracenie wody w Wiśle i proszenie się o kłopoty już na początku masz błedy [syntax=armasm] .word _estack (void*) STACKEND,// adres stosu .word Reset_Handler main, // reset .word NMI_Handler 0, // NMI .word HardFault_Handler 0, // Hard Fault .word MemManage_Handler 0, // Mem manage .word BusFault_Handler 0, // Bus...
Cześć Próbuję stworzyć komunikację z diodami WS2812 za pomocą licznika i DMA. Licznik ma mi generować PWM o wypełnieniu pobieranym z tablicy. Wypełnienie to ma być przesyłane przez DMA w momencie osiągnięcia wartości maksymalnej licznika. Sam licznik działa prawidłowo i generuje PWM wpisany na sztywno lecz transfer danych nie jest inicjowany przy osiągnięciu...
Witam od dwóch dni walczę z bibliotekami Fatfs, i mam niezidentyfikowany błąd, wykończyły mi się pomysły. Sprawa wygląda tak posiłkuje się przykładami z książki STM32 w praktyce Autor: Krzysztof Paprocki. W zasadzie chce skompilować gotowy kod , (przykład R9 sd_fatfs) działam na układzie STM mini http://allegro.pl/zestaw-uruchomieniowy-...
Witam wszystkich, Rozpocząłem swoją przygodę z mikrokontrolerami stm32 od najprostszego z możliwych programów, a mianowicie miganie diodą. Po rozkręceniu PLL do 72 MHz, postanowiłem zmieniać stan diody co około 1s(w pętli opoźniającej zliczałem zmienną "int i" do 72000000). Problem polega na tym, ze stan diody zmienia się nie co 1s, a co kilka sekund....
Witam Zaczynam swoją przygodę z STM32 (nie chce rozmawiać dlaczego nie atmega itp). Zakupiłem zestaw STM32F429- DISCO. Postanowiłem pracować z książką "STM32 Aplikacje i ćwiczenia w języku C". Programy od producenta działają bez problemu. Jednak podczas przepisywania szkieletu programu z książki występują problemy z biblioteką stm32f4xx.h (tak, jest...
Dzień dobry, Zacząłem naukę STM32 i mam problem z USART2. Chciałem się połączyć z hyperterminalem. Od strony terminala wszystko działa poprawnie (sprawdzone przez zwarcie tx i rx). Od strony stm-a wygląda to tak, że kiedy chcę odebrać jakiś znak, to program wisi na fladze oczekującej na odebranie znaku. Natomiast kiedy chcę wysyłać, to nic się nie dzieje...
Witam Ten program powinien działać w taki sposób, żeby zliczał naciśnięcia przycisku Pin15 w czasie 2s. Mógłby mi ktoś powiedzieć w jaki sposób go zmienić aby działał? Z góry dziękuję za odp /* Includes ----------------------------------------... #include "stm32f10x.h" /* Private typedef ----------------------------------------...
Cześć wszystkim. Jestem początkującym ludzikiem który zaczyna swoja zabawę z stm32. Pracuje nad projektem do którego niezbędny jest mi RTC i tu pojawia się problem... otóż kompilacja przebiega bez błędnie ale UC nie reaguje. wstawiam kod całego programu. [syntax=c]#include "stm32f10x.h" #include "stm32f10x_rtc.h" void RCC_Conf(void); void GPIO_Conf(void);...
Uprościłem znacząco zadanie tak by wyeliminować wpływ komunikacji na wartość przepisywaną do zmiennych, które służą do aktualizacji rejestrów CC. Otóż na chwilę obecną program "mruga" dwiema diodami, po naciśnięciu przycisku chciałbym zmienić wartość zmiennych. Jak się okazuje mogę zmienić w ten sposób tylko częstotliwość kanału pierwszego, zatem tak...
Witam, mam problem z uruchomieniem przetwornika cyfrowo analogowego na mikrokontrolerze stm32f103c8 . Według mnie konfiguracja przetwornika jest poprawna.Piny PA4 i PA5 są sprawne, mogę ręcznie ustawiać dowolny stan. Już spędziłem nad tym kilkanaście godzin i nadal nie moge wysterować pinu Pa4 napięciem z przetwornika DA. Zachowuje się jako do niczego...
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...
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!!
stm32 tablica wskaźników tablica wektor stm32 stm32 tablica wskaźnik
płyta indukcyjna schemat amica esp8266 flashowanie telewizor sprzedam
pralka indesit cieknie pralka indesit cieknie
Antena satelitarna do Polsat Box - jaką wybrać? Jak dobrać odpowiednią baterię do zegarka?