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...).
U mnie to makro znajduje się na końcu funkcji obsługującej przerwanie, semafor staram się ustawić jeszcze przed jego wywołaniem. Nieprawda: Oczekiwanie na semafor ? Czy chodzi Ci o xSemaphoreTake(globalSemaphore, portMAX_DELAY) czy o coś innego ? Właśnie o to.
Aktualizacja z września 2025: zobacz tutaj, aby uzyskać szczegółowe informacje na temat konwersji STM32 przez UART zamiast J-Link (tj. J-Link nie jest wymagany) https://www.elektroda.com/rtvforum/viewt... (dzięki (at)max4elektroda!) zobacz tutaj, aby uzyskać wyższą wersję przekonwertowanego oprogramowania CK-Link Lite dla STM32...
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!!
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...
Zajmuje się programowaniem w asemblerze procesorów ARM a dokładnie programuje układy oparte na rdzeniu Cortex-M0 (LPC111x) ale swój kod przenosiłem także na rdzeń Cortex-M3 (LPC13xx) taki sam jak w procesorach którymi ty jesteś zainteresowany (STM32). Postaram się teraz udzielić odpowiedzi na twoje pytania: 1. Wie w jaką dokumentacje trzeba się zaopatrzyć...
Timerem zmierzyć możesz.
[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.
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...
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...
Btw. dlaczego atrybyt "interrupt" jest zbędny i powiększa kod? Dla Cortexów to co robi ten atrybut (zapewnienie wyrównania stosu do 8 bajtów) da się zrobić sprzętowo. W większości Cortexów jest to domyślnie włączone, w przypadku STM32F1 trzeba sobie to akurat włączyć przy użyciu takiej oto linijki "SCB->CCR |= SCB_CCR_STKALIGN_Msk;". Ponieważ atrybut...
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!!
Tadzik85. Nigdzie nie twierdziłem, że dostęp bitowy przez BitBand jest tak samo wolny/szybki, jak &= wykonywany przez procesor. Od początku utrymywałem, że &= przez procesor jest najwolniejszy, dostęp bitowy BitBand szybszy, a zwykły zapis całego słowa - najszybszy. Akurat w przypadku timerów STM32F kasowanie znacznika przerwania następuje przez zapis...
Witajcie, właśnie się bawię pamięcią Flash w STM32F0DISCOVERY (chcę się nauczyć obsługi). Efekt? Chyba zablokowałem możliwość zapisu... Kod (dopiero się uczę, więc komentarze mogą zawierać błędy): [syntax=c]#include "stm32f0xx.h" #include "stm32f0_discovery.h" int main(void) { RCC -> AHBENR |= RCC_AHBENR_GPIOCEN;//LEDY GPIOC -> MODER |= GPIO_MODER_MODER8_0...
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)....
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!!
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...
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...
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...
To co jest w tym pliku zip na pewno nie miga diodą (niczym innym zresztą tez nie) W pętli while jest następujący kod, którego brakło w paczce: [syntax=c] while (1) { /* USER CODE END WHILE */ HAL_Delay(1000); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); /* USER CODE BEGIN...
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
W momencie, gdy host wykonuje usb_bulk_read dane muszą już siedzieć w buforze endpointa 3. Inaczej zawsze będziesz miał timeout. Albert
Witam, ....Wiem że to dziwne, ale proszę żeby QuadMan to sprawdził u siebie zanim jakieś wnioski ktoś będzie wyciągał. W załączniku wszystkie ważniejsze pliki z kompilacji moim kompilatorem dla obu wersji. atom1477 sprawdziłem przykład z tablicą wypełnioną tylko kilkoma wartościami, jak u Ciebie i ciekawostką jest fakt, że u mnie pliki .lss i .map są...
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...
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...
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?
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.
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"...
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...
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,...
Może trochę źle się wyraziłem ale zrozumiałem to tak że w STM32 instrukcja GPIOA->ODR = 0x44(czyli ustawienie na pinach odpowiednich stanów) może wykonywać się dłużej niż PORTB = 0x44 w AVR
"Mają 4x więcej bitów, więc prawie niemożliwe jest programowanie". Pisząc w C (dla przykładu) nikt się nie zastanawia czy procesor ma 8 bit czy 32, bo wszelkie operacje matematyczne są wykonywane przez gotowe procedury, więc od tej strony programowanie wygląda tak samo dla 8 czy 32 bit. Natomiast w zasadzie wszystkie problemy dotyczą konfiguracji sprzętowej...
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 ?
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.
No ale dzięki temu wiem co po kolei się wykonuje w przerwaniu...
FreeRTOS dziala w uproszczeniu tak, że wykonuje zadanie o najwyższym priorytecie, które jest gotowe do wykonania. Jezeli masz 2 taski o tym samym priorytecie i oba mają nieskończone pętle to planista przyjmie politykę szeregowania zadan Round Robin. W naszym przypadku naprzemiennie wykona będzie wykonywał 2 zadania. Jeżeli obniżysz priorytet jednemu...
Zegar peryferiów włączony?
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!!
Witam Na wstępie powiem, że jestem świeżakiem w temacie mikrokontrolerów STM32 ale sporo szukałem (nie tylko na elektrodzie) i nie mogę sobie z tym problemem poradzić. Mam płytkę F103VCT6 + LCD3.2''. W tym LCD jest slot na kartę microSD. Chcę zrobić chyba najprostszą rzecz na świecie czyli stworzyć na karcie plik. I tu pojawia się problem - płytka zawiesza...
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.
Witam, Post dość stary ale może mój wpis pomoże komuś kto tu trafi. Sam miałem podobny problem z płytą od endera 4.2.2. Zaczęło się od włożenia karty z plikiem o rozszerzeniu bin. Drukarka przestała reagować. Postanowiłem wgrać na nowo firmware. Wcześniej miałem drukarkę, gdzie aktualizacja firmware odbywała się przez ISP. tutaj zobaczyłem, że jest...
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?
wykonywa robot reset wykonywa wykonywa przelotka
reanimacja fergusona ustawienie transportera łucznik zablokować drzwi tylny
bateria macallister bateria parkside styki
Zmywarka nie otwiera się i pika po zakończeniu pracy Brak połączenia z Integra 64 i rejestratorem kamer przez TP-Link i DDNS