Czy w procesorach STM32 wiekszość rozkazów wykonuje się w 1 cyklu zegarowym? Nie wszystkie. Jeśli chcesz mieć bardzo dokładnie oszacowany czas w cyklach to musisz zdeasemblować program, zajrzeć do dokumentacji, żeby sprawdzić ile czasu się wykonuje jeden rozkaz i sprawdzać rozkaz po rozkazie. Jak zależy Ci na prędkości i oszczędności co do rozkazu,...
mozesz zrobic tak: masz menu -> wybierasz jakas opcje z menu-> w kazdej z opcji wykonujesz zwyklego while(1) z warunkiem po wykonaniu petli na jakas flage, ktora ustawiasz w przerwaniu. Teraz w przerwaniu ustawasz zwykly powrot do menu (czyli w przerwaniu np. od nacisniecia przycisku czy od czegokolwiek co Ci bedzie pasowac ustawiasz tylko jakas flage...
Nie powinien być. Kolego (at)rogeros czytaj uważnie warningi zgłaszane przez kompilator albo chociaż zamieszczaj tutaj log kompilacji. Znacznie to ułatwi rozwiązywanie tego typu problemów. Typ drugiego parametru przekazywanego do tej funkcji również generuje ostrzeżenie (ale to już po części wina mistrzowskiego designu API od ST...).
Witam Chciałbym zrobić urządzenie które będzie potrafiło wykonywać zdjęcia które potem ewentualnie wyśle do PC/ wyświetli na LCD. W związku z tym potrzebuję Waszej pomocy: gdzie kupić jakiś aparat kamerę? czy jest dokumentacja dla kamer z telefonów? czy ktoś ma jakieś projekty? Pozdrawiam
I zmień w konfiguracji projektu "cs-make" na "make". 4\/3!!
Timerem zmierzyć możesz.
FPU jest włączone (Opcja "FPU Hard" w Configuration -> Compile -> Options -> FPU). Jeśli wybiorę "Not use FPU" to mi się chyba licznik "przekręca" - jest różnica w czasach. W linku, który podałem gość używał opcji "FPU Soft" ale dlatego, że biblioteka PDM mu nie działała. Co do zegarów to wydaje mi się być ok. Czasy na TIM1, który wyzwala ADC...
[syntax=c]void MIDImessage(byte command, byte data1, byte data2) { uint8_t data[3]; data[0] = command; data[1] = data1; data[2] = data2; HAL_UART_Transmit_IT(&huart2, data, sizeof(data)); }[/syntax] Pamiętaj transmisja jest wykonywana w tle.
Tak. Tak bardzo Ci to przeszkadza? Przecież jeżeli chcesz coś wykonać co 2 sekundy to po prostu robisz to co ileś tam wystąpień przerwania. Ponadto, zastanowiłbym się nat tym czy Twój kod musi być w przerwaniu. Skoro chcesz go wykonywać z częstotliwością 1Hz to raczej to nie jest konieczne.
Ustawiłeś odpowiednio piny BOOT0 i BOOT1? Po tym: target halted due to breakpoint, current mode: Handler HardFault xPSR: 0x20000003 pc: 0x20000004 msp: 0x20004fe0 wydaje mi się, że Twój układ próbuje wykonywać kod z RAMu. 4\/3!!
Nie wiem dlaczego to nie działa. Mam oryginalnego j-linka, chińskiego j-linka, i ulinka2, i na każdym da się programować, debuggować i kasować różne STM32 bezzonkowo. Keil 4.03, MDK-ARM 4.10. Nie podoba mi się RAM for algorithm. W STM32 RAM zaczyna się pod adresem 0x20000000 a nie 0x10000000, to spora różnica... Popraw to, i powinno chodzić. Loader...
Po pierwsze, w SPI zawsze nadajesz i odbierasz bajt. Jeśli nadałeś dwa i odebrałeś jeden, to odebrałeś ten, który przyszedł po nadaniu pierwszego, a drugi zignorowałeś. Musisz zawsze odczytywać tyle bajtów, ile zapisałeś. Po drugie, chcesz nadawać bajty, a rejestr DR w STM32 ma 16 bitów, więc jednym zapisem do DR nadajesz 2 bajty. Musisz wykonywać bajtowe...
Myślałem że zmieniam płytkę, wgrywam nowy bootloader i działa tak samo jak inne arduino. Wykonywałem procedurę z tego linku https://geektimes.ru/post/277928/
Bez różnicy - programujesz i tak w C, więc wersja rdzenia nie jest szczególnie istotna. Na M4 możesz operacje zmiennopozycyjne wykonywać w sprzęcie, ale to zmartwienie kompilatora (plus parę Twoich kliknięć w ustawieniach środowiska). Peryferiale we wszystkich seriach STM32F poza F1 są niemal identyczne (F0, F3, F4, L0). Podstawowy kurs dla DISCOVERY...
Witam, Próbuję wykorzystać funkcjonalność DMA burst aby pobierać wartości rejestrów ARR, RCR i CCR1 przy każdym update event timera 1 z tablicy bez zajmowania procesora. Program działa prawidłowo po wystąpieniu pierwszego przerwania UEV od TIM1, lecz kolejny transfer danych wprowadza inne dane do tych rejestrów niż zamierzone (znajdujące się w tablicy)....
Witam, Od paru dni piszę soft dla STM32F415 Bazę projektu generuję w Cube MX. Nie mogę sensownie skonfigurować DMA, jedynie prawidłowo działa tryb CIRCURAL oraz pojedyncze skorzystanie z DMA w trybie NORMAL. Pozosatałe kombinacje DMA działają różnie, czasem dziwnie czasem wogóle. Celem jest aby dwa przetworniki ADC2 i ADC3 zapisywały w przerwaniu (zrezygnowałem...
http://obrazki.elektroda.pl/6457751400_1... Firma STMicroelectronics idzie w kierunku coraz bardziej skomplikowanych aplikacji, dzięki rekordowo szybkiej serii układów STM32H7. Układy te posiadają dużą ilość pamięci SRAM (1 MB) i Flash (2 MB) oraz szeroką gamę peryferii i wyjść. Ten istotny skok jakościowy ST zawdzięcza opracowaniu...
Problem nadal występuje. W wersji 5.0.1 Cube jako nakładka do Eclipse (Neon.3 release 4.6.3) nie można już edytować pola LSE (nie dziwne, bo nie ma po co - mikrokontrolery akceptują tylko klasyczne kwarce zegarkowe 32768 Hz). Jednakże problem dzielenia wartości w polu LSE przy każdym wejściu w Clock Configuration nadal występuje. Po zmianie wartości...
Cześć piszę sterownik silnika krokowego i przez USART'a definiuję nieokreśloną ilość impulsów. Zatem jestem zmuszony nadpisywać dane w tablicy DMA . Unikając opisywanie nie dotyczących elementów obliczyłem sobie okresy dla każdego impulsu powiedzmy załadowałem je do tablicy src. Używam Bursta, mianowicie przesyłam Period, Repetition Counter = 0 . oraz...
Witam, Sytuacja wygląda tak: uC - który zbiera dane jest połączony przez uarta do uC (Stm32). Teraz pytanie jak wydajnie odbierać komendy z uC który zbiera dane. Mam zrealizowane odbieranie danych w przerwaniu ale realizacja zadania w przerwaniu odpada, program się sypie ponieważ obsługa zadania trwa długo w porównaniu do danych przychodzących, danych...
Witam, pytanie dla ogarniających asm gdzie mogę znajdę takie informacje ile cykli wykonuje się dana instrukcja, piszę w C i na samym asemblerze mało co się znam, lecz patrząc na okno deasemblacji w debuggerze zauważyłem np. taka instrukcja [syntax=c] GPIOF->BSRRL = 0x0040; GPIOF->BSRRH = 0x0040;[/syntax] trwa jakieś 42ns jest to jakieś 6 instrukcji...
Witam, chciałbym zastosować STM32F103RCT6 do sterowania przekształtnikiem napięcia zasilającym silnik indukcyjny. Program chcę pisać w C w Keilu. Stąd pewne pytania: Ponieważ będę operował na ułamkach chcę wydzielić np 10 lub więcej bitów na część ułamkową. Nie wiem jak w C załatwić kontrolę nad przepełnieniem czy konieczne są wstawki asm (chciałbym...
Witam mam kilka nurtujących mnie pytań. Czy każdy układ peryferyjny mikrokontrolera działa nie zależnie czyli np. jeśli przetwornik adc wykonuje swoja prace to czy zabiera czas procesorowi czy np. jak dma przesyła dane z adc do pamięci czy może w tym samym czasie przesyłać dane z pamięci do uart i czy w tym czasie procesor może wykonywać inne tez czynności...
Dzień dobry, W projekcie wykorzystuję silnik krokowy z zabudowanym na wale silnika enkoderem inkrementalnym różnicowym o rozdzielczości 16 384 imp/obr. Wykorzystuję płytkę NUCLEO-64, STM32L476RG. Ustawienia Timerów: https://obrazki.elektroda.pl/7295044200_... https://obrazki.elektroda.pl/6348434400_... Do timera3 mam...
Edit: DMA nie działało bowłączałem DMA2 a nie DMA1. Napiszę jak dalej pójdzie :] Cześć, mam pewne problemy z I2C, bazowałem na zmodyfikowanym kodzie od ST (jak mnie pamięć nie myli) najpierw używałem samych przerwań na najwyższym priorytecie jak ST przykazało, niestety od czasu do czasu zdarzało się że RTOS wyłączał wszystkie przerwania i przy odbiorze...
Witam, Walczę z konstrukcją prostego wiatromierza ultradźwiękowego. Nadaję 8 impulsów 40Khz, po czym odczytuję z drugiego czujnika dane które odbieram (odczyt docelowo 100KHz - 250 próbek). Moim problemem jest fakt, że pomiar w jednym kierunku odbywa się bez przeszkód, a w drugim za każdym razem wypluwa jakby dalszą część pomiaru pierwszego. Sprawy...
Przy okazji tego postu zapytam, czy ktoś wie jak za pomocą stm32 mogę z obrazu o wielkości ok 320x200px w standardzie RGB565 wyodrębnić i zidentyfikować proste obiekty graficzne, których zestaw przygotuję uprzednio w postaci tablic dwuwymiarowych, jako wzorce? Wiem, że zaawansowane biblioteki OpenOCV nie wchodzą w rachubę. Nie musi być szybko. Zdjęcia...
Cześć. Dość dawno się tu nie udzielałem, jakoś mi było nie po drodze. Trochę zmieniłem zainteresowania, trochę było dużo pracy i nieco odszedłem od elektroniki i niskopoziomowego programowania. Czas powoli wracać, ale dziś przychodzę z problemem :) Mam pewne urządzenie, zaprojektowane dobrych kilka lat temu. Urządzenie działa na STM32F407VGT6 , ale...
witam mam problem z płytką [url=http://propix.com.pl/pl/p/Modul-STM... a mianowice, potrzebuję równolegle wykonywać operację pomiaru temperatury i generowania fali prostokątnej dla wentylatora, wszystko fajnie jak jest osobno bo działa, ale jak chce to połączyć przy pomocy uC-os to nie działa albo chodzi jedno zadanie albo drugie....
Witam piszę aplikację obsługującą silnik krokowy. Wykorzystuje do tego PWM ( Nie pytać dlaczego, tak chciał prowadzący). Na początku robiłem to na przerwaniach, ale się nie spodobało. Miałem wykorzystać do tego DMA + PWM i ładować z DMA wartości do periodu, tak aby okres ten był zmienny. Napisałem aplikację, ale niestety nie zmienia się period jest...
Mam za zadanie wysyłac paczke 18 bajtów danych przez 2 uarty co 10us. Wysyłanie w pętli main działa ale zabiera 95% wykorzystania CPU i uniemożliwia dalszą prace. Próbuje skonfigurować transfer danych z pamięci do UARTów przez 2 osobne kanały DMA wyzwalanego przez timer no i nic nie działa. Może ktoś podpowie jak do tego podejść? Tutaj konfiguracja...
Kontroler flasha to nadal tylko peryferial memory-mapped, wiec SFR w ktorym ustawiasz protekcje niczym sie nie rozni od SFRów od np. SPI, i dokladnie tak samo mozna go zapisać przez SWD/JTAG . A to juz wprost odpowiedz na twoje pytanie. SWD/JTAG pozwala na rw dowolnego 32bitowego adresu w losowym momencie, niezaleznie od tego, czy rdzen wykonuje kod,...
Jakim cudem zmiany kodu wykonywanego w pętli głównej mogą mieć wpływ na działanie tego co jest przed nią ?! Może jest coś wspólnego np. funkcja delay_ms() jest także wykorzystywana przed pętlą główną? ;) A jak wygląda delay_ms(): zwykła pętla for czy użyłeś timera?
Czyli działa to podobnie jak w bit bandigu, że sprzętowo jest wykonywana operacja RMW na pamięci ? Coś mieszasz - przecież tu jest tylko "write", więc gdzie jakieś "read" i "modify"? zmienna1 = zmienna2; // atomowe zmienna1 += zmienna2; // nie-atomowe - RMW
Jeśli chodzi o przerwanie od tim2, to napisałem w poście powyżej nie do końca prawdę. Kod głównego programu jest wykonywany, a gdy zatrzymam procesor, program się zatrzymuje na tym rozkazie ktory mial wykonać. Następnie debugując <Step into (F5)>, procesor zaczyna wykonywać przerwanie TIM2_IRQHandler. I klikając F5 nigdy już nie wyjdę z tego...
Dla pewność próby wykonywałem na drugiej takiej samej płytce STM32, niestety bezskutecznie. Nie mam już na to głowy... Łaczenie róznych pinów i portów tak aby działało jest jak by to powiedziec solą zabawy z uC. Nie da sie tego uniknąc - a najlepsza metodą nauki jest praktyka i eksperymenty. Zwarcie Tx z Rx bylo po to zebys na jakims terminalu na Pc-ie...
W momencie, gdy host wykonuje usb_bulk_read dane muszą już siedzieć w buforze endpointa 3. Inaczej zawsze będziesz miał timeout. Albert
Nie, nie zachodzi konwersja. Zachodzi jedynie rzutowanie typów. Po skompilowaniu to jest zwykłe przeniesienie do rejestru, dla tego że właśnie wszelkie wskaźniki są takiej samej długości jak uint32_t. O konwersji byśmy mówili wtedy gdyby przed przeniesieniem do rejestru na danych były by wykonywane operacje arytmetyczne i/lub logiczne. Tu pozostaje...
Nie, no niewątpliwie masz rację, że jeśli chodzi o wydajność to szybciej jest bezpośrednio pisać po rejestrach ;) Tyle że tu chodzi zarówno o szybkość pojmowaną jako prędkość wykonywania kodu, jak i o prędkość pisania go - i tak musisz przeczytać manuala, a do tego jeszcze dokumentację biblioteki [; 4\/3!!
Juz to przerabialem.. toolchain jest zainstalowany, program z przykladu juz kompilowalem i ladowalem do uC. Moze w takim razie inaczej sformuluje pytanie.. Dlaczego po wgraniu tego programu do mikrokontrolera sie on nie wykonuje?
Step 9 i 10 nie mogą być wykonywane po step 7 Dodano po 5 I jeszcze Step 12 powinien być wykonany przed Step 11.
Zawiodłem się- nie ukrywam. Mimo tego nie zaprzestane z nich korzystać, bo np. przy konfiguracji peryferiów są bardzo przejrzyste. Po za tym trzeba zmienić podejście do programowania... Chciałbym wiedzieć z czego to wynika, czy tak duże opóźnienia powstają na skutek częstego wywoływania funkcji API STM32?
Kulka wlatująca w przeszkodę to najpewniej efekt pracy na intach. Jesli miałbyś FPU, to problem byłby rozwiązany - po prostu brakuje Ci ułamków... Spróbuj wykonywać operację na u64 fixed point, przesuwając przecinek na np 40sty bit -> Q23.40... Funkcje trygonometryczne powinieneś wtedy tez mieć stablicowane w tym formacie, ale dodatkowo owinąć LUT w...
Reasumując: 1. Włączasz zasilanie = nie działa 2. Wykonujesz reset STM'a = działa ? Mógłbyś jeszcze "main'a" pokazać, albo najlepiej odchudź kod do obsługi tylko SPI i wrzuć cały projekt.
To wskazuje na wykonywanie się bootloadera ST.
No ale jak skaczesz z przerwania, to cały Twój program wykonuje się jakby "wewnątrz" przerwania... Tak absolutnie nie można robić - musisz skok wykonać z trybu Thread, a nie Handler! 4\/3!!
odczyt rejestru - modyfikacja - zapis do rejestru . Nie powinno cię dziwić, że jeśli między tymi operacjami wystąpi przerwanie, w którym modyfikowane są ODR bitbandingiem i nie tylko to cała operacja z przerwania zostanie anulowana.
Do pasma EKG układ w zupełności wystarczy. W kwestii punktu 4, chodziło mi o taką konfigurację licznika: - licznik zlicza w jednym kierunku, np. w górę. - Czas pełnego okresu (PSC i ARR) to trochę więcej niż czas transmisji + impuls LDAC (=210ns). - Do jednego z rejestrów porównujących ładujesz wartość, która odpowiada impulsowi LDAC, a wyjście konfigurujesz...
A uwzględniłeś czas w przerwaniach? Spróbuj wykonać każdy z testów z wyłączonymi przerwaniami, powiedzmy kilkaset razy i dopiero wtedy wylicz czas poszczególnego testu. Jeżeli różnice będą występować to jedyne wytłumaczenie, które przychodzi mi do głowy to takie, że być może część danych jest w innym segmencie pamięci. Wtedy przypadkowo możliwe że operacje...
Jakiego typu jest absolutnie absurdalny i perwersyjnie wypaczony pomysł, aby mając OSa robić takie delay'e w wątkach ??? Również o podobną perwersję zakrawa wykonywanie przerwania timera co mikrosekundę tylko po to, zeby zmniejszać tam jakąś zmienną. Wez timer, skonfiguruj go jako one-shot, skonfiguruj mu takt na 1us, do ARR wpisz chciany czas w us,...
Witam, od kiedy zacząłem porządkować kod, korzystając z funkcji mój program zaczął się źle wykonywać. Dotychczas kod był nie wielki więc wszystko robiłem na if'ach, zaczął się rozrastać więc w systicku zostawiłem if'y ale całe obliczenia do wykonania oraz wysyłanie dałem do oddzielnej funkcji (wysyłanie jest też poprzez wywołanie następnej funkcji)....
Jeszcze jedno mam pytanie. Szybciej w STM32 wykona się dodawanie/odejmowanie 32 bitowych zmiennych, czy 8 bit ? A jak w powyższym jest z mnożeniem i dzieleniem ?
No ale dzięki temu wiem co po kolei się wykonuje w przerwaniu...
Ja zawsze kasuje bity żądania na koniec przerwania i nigdy nie maiłem takich problemów w STM32, niezależnie od poziomu optymalizacji przerwanie wykonywało się tylko raz.
(at)_lazor_ Odbiegamy od tematu, ale może kogoś to zainteresuje, skoro i tak nie mamy komponentów do montażu. ;) Staram się nie zgadywać co mogą zrobić politycy w kwestiach finansowych. Moja wyobraźnia nie sięga tak daleko. Pierwsza bariera to cele klimatyczne. Fabryka pożerająca duże ilości energii w Polsce nie wchodzi w grę ze względu na zielony...
Zegar peryferiów włączony?
Witam, jestem w trakcie wykonywania ćwiczeń z książki Mikrokontrolery STM32 w sieci Ethernet na zestawie uruchomieniowym ZL29ARM, z programatorem j-link edu, w środowisku eclipse (a konkretniej System Workbench for STM32 z pluginem do obsługi j-link). Aktualnie zawiesiłem się dłuższy czas na konfigurowaniu budzików biblioteki lwip (dla posiadających...
Masz rację - wydaje Ci się... (; Latencja to nie jest jakiś delay czy preskaler, po prostu przy nie-sekwencyjnym wykonywaniu rozkazów (skoki), potrzebne są te 2 cykle na załadowanie bufora. Spadek wydajności przez taką latencję oscyluje pewnie w rejonie kilku procent, więc nad czym się tu zastanawiać? Jeśli podniesienie częstotliwości "nic nie dało"...
Czołem W ramach studiów muszę przygotować projekt, którego elementem jest akcelerometr obsługiwany po I2C. Producent dostarcza przykładowy program do STM32F1xx który ja staram się przeportować do mojego STM32F407VG. Kod producenta wygląda następująco: [syntax=c]void IIC_Start(void){ SDA_OUT(); //sdaĎßĘäłö IIC_SDA=1; IIC_SCL=1; delay_us(4); IIC_SDA=0;//START:when...
Jeżeli chcesz do szyny wykorzystać np. połówkę portu (8 bitów) to najszybciej BSRR. Najszybciej wtedy wykonywać 8-bitowy zapis do rejestru ODR. 4\/3!!
(at)tplewa jest tak samo dastepny po angielsku na stronie producenta. Niedawno był tu wątej o nich - nawet zdjęcia spod mikroskopu są tam. Funkcjonalnie to się różni tym, że cały kod wykonywany jest z RAM (nie ma WS), a użyty jest serial FLASH + duży SRAM. Startując zawartość FLSH jest kopiowana do tego SRAM. Jest też link do dokumentacji. Jednak generalnie...
EDIT: Dobra, działa mi to już. A powiedz mi, jest jakiś sposób żeby sprawdzić jak długo jakaś funkcja się wykonuje? Pomijając zmianę stanu na wyjściach uC.
(at)janchar Ponieważ widać tutaj pewne niejasności, dlatego polecam zapoznać się z podstawami. Kluczowe słowa to proces debugowania i debuger. Na przykład [url=https://en.wikipedia.org/wiki/Debug... Prościej się nie da. Wracając do tego konkretnego przypadku, to podłączając mikrokontroler przez interfejs SWD, czyli GND, SWCLK, SWDIO, nie ma...
Witam. Potrzebuję pomocy w podmienieniu kilku linijek kodu wykorzystującego biblioteki, na taki bez ich wykorzystania(...) Ja w takim przypadku kopiuję do mojego programu kod źródłowy funkcji bibliotecznej, po czym wywalam wszystko co nie jest w moim przypadku potrzebne. Dla pewności robię to w małych krokach i po każdym sprawdzam, czy program nadal...
STM32 w ogóle nie działa? Nie wykonuje programu?
reset wykonywa wykonywa przelotka wykonywa robot
schemat chieftec zegarek prosty schemat lm338 sprawdzenie
iskrzenie wirnik komutator wspomaganie suzuki
Spadek baterii w KuKirin G2 Pro przy przyspieszaniu Peugeot V-Clic 50 4T 2008 – brak iskry przy podłączonym przewodzie gaszenia, CDI, kill-switch, diagnoza