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.
[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.
Witam, Robię analizę FFT na tym mikrokontrolerze korzystając z bibliotek DSP producenta. Za pomocą TIM2 zmierzyłem czas obliczeń FFT (szyna APB1 36MHZ, prescaler = 35 daje inkrementację licznika co 1µs). Fragment listingu z pomiarów: [syntax=c] TIM2->CNT = 0; for(i=0; i<512; i++) buffer_input[i]=(float)(ADC_buff_1[i][0]... arm_rfft_f32(&S,...
No to jednak pokuszę się o podsumowanie: Dyskusja nie zaczęła się od wydajności, a od poprawności logicznej różnych technik kasowania znaczników. Wskazałem, że &= wykonywane przez procesor jest błędne i przy okazji wolne, i że zwykły zapis słowa przez procesor jest bezbłędny i szybszy. Pojawiła się teza, że podobnie zachowa się zapis bitu przez BitBand...
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...
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...
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!!
https://pl.wikipedia.org/wiki/Odwrotna_n...
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...
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...
Da się chyba za pomocą timera. "Wyciągniesz" z tego tyle ile pozwoli Ci magistrala, czyli generalnie ja bym stawiał tak na 1/3 - 1/2 prędkości całego układu (zakładamy tutaj, że wykonywany jest też normalny program). 4\/3!!
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,...
Znalazłem. Domyślnie kod wypluty z CubeMX przestawia wszystkie nie wykorzystane piny w tryb GPIO Analog, co powodowało "wyłączenie" pinów od debugera w trakcie wykonywania auto generowanej funkcji GPIO_Init(); Rozwiązanie: W CubeMX na zakładce "pinout" znaleźć na liście "SYS" i wybrać tryb "SWD".
Należy ustawić "Preferences->STM32Cube->Build view setting" na "Auto". To nie są informacje z kompilacji w konsoli, tylko informacje o pliku wykonywalnym, czytany z pliku .map. po wgraniu jak kompileję projekt to informacje z kompilacji nie pojawiają się w oknie konsoli, przed wgraniem informacje woknie konsoli normalnie się pokazują. Masz wiele konsoli....
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!!
Różnica nie polega na zamianie miejscami movs i strh, tylko na tym, że w jednym kodzie zapis jest wykonywany _PRZED_ ustawieniem bitu PG w rejestrze CR (to jest to "str r3, [r5, #16]"), a w drugim _PO_. Bez "volatile" kompilator może sobie przestawić ten zapis gdzie mu się podoba, natomiast w odwrotnym przypadku zostanie on wykonany w takiej kolejności...
W momencie, gdy host wykonuje usb_bulk_read dane muszą już siedzieć w buforze endpointa 3. Inaczej zawsze będziesz miał timeout. Albert
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...
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?
Czyli potwierdza się to, że wina leży po stronie modułu peryferiów, która jest przeznaczona dla STM32F103 i nie jest w pełni kompatybilna ze 107. Tak jak pisałem mieli to naprawić ale im to nie wychodzi już ładnych parę lat (z ponad dwa). Odnośnie "podglądu" wartości zegarów jest fajna funkcja w bibliotece StdPeriph, jestem świadom, że wszyscy (duża...
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.
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...
http://obrazki.elektroda.pl/2463034100_1... Witam wszystkich, Chciałbym tym razem przedstawić projekt gotowego radiomagnetofonu internetowego. Jest to rozwinięcie opublikowanego wcześniej na Elektrodzie małego odtwarzacza MP3. Radiomagnetofon umożliwia granie strumieni radiostacji internetowych, nagrywanie tych strumieni na kartę SD,...
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!!
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?
To wskazuje na wykonywanie się bootloadera ST.
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...
Dziś odkopałem płykę Arduino UNO na które zwarłem GND z RESET i niestety dalej to samo. 1.Po zwarciu Tx z Rx Flash Loader wyrzuca komunikat, aby zresetować podłączone urządzenie, także z tej strony chyba wszystko ok. 2.Zworki ustawiłem tak jak z poradnika kilka postów wyżej jak i także odwrotnie, niestety dalej to samo. 3.Tak, port jest na 100% prawidłowy....
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?
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 ?
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.
No ale dzięki temu wiem co po kolei się wykonuje w przerwaniu...
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"...
Zegar peryferiów włączony?
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,...
Czy coś jeszcze jest obsługiwane przez DMA1? Nie, wykonywany jest tylko ten program, nic innego nie wykonuje DMA. Czy próbowałeś ustawić wysoki priorytet dla tego kanału DMA? Po tym jak napisałeś spróbowałem ustawić najwyższy priorytet, ale nic to nie pomogło. Czy procesor próbuje uzyskać dostęp do tablicy, w czasie pracy DMA? Nie, w żadnym innym miejscu...
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.
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.
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?
są jakieś praktyczne przypadki wykorzystywania zdarzeń? Pytam ogólnie w całej rodzinie stm32. Tak w praktyce to zdarzeń nie ustawia się wcale. BlueDraco, a np. zdarzenie od zmiany stanu pinu ? Zdarzenie od przepełnienia licznika i zmiany stanu pinu ja osobiście dość często wykorzystuję. Co do pytania o aspekty praktyczne takich zdarzeń, hmm no to chyba...
Testuję urządzenie składające się m.in z płytki STM32 Discovery oraz modułu ethernet na ENC28j60. Problem jest taki, że gdy włączę np. lampkę biurkową ( z transformatorem do halogenu 20W) która znajduje się w odległości ok. 40 cm bądź ją wyłączę, resetuje się kontroler ethernet. STM32 dalej wykonuje program. Dolutowałem już kondensator (47uF) między...
Mówisz o tym by procesor sam zmienił swój program. Czy chcesz program, który będzie wykonywał inny program(skrypt).
Dzieki, za szybka odpowiedz. W zalaczniku wysylam plik main.c oraz stm32f10x_it.c Jak narazie probuje wykonywac przyklady z ksiazki STM32 Mikrokontrolery w praktyce. Jesli ktos bedzie mogl zerknac na kod i powiedziec co jest nie tak to bede wdzieczny Czyli nie polecacie uzywanie bibliotek ST?
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...
Nie chcąc zakładać nowego tematu mam nowe pytania. Czy jest jakaś różnica w prędkości wykonywania kodu gdy mam możliwość uruchomienia uC w trybie Debugra czy nie? Na niektórych maszynach jest np tryb realase oraz debug kompilacja w tym pierwszym powoduje krótszy kod wynikowy (oraz szybsze wykonywanie się kodu?).
wykonywa robot reset wykonywa wykonywa przelotka
wózek widłowy linde kontrolka korzystanie protokołu stacja bazowa nokia
podlicznik energii elektrycznej schemat rozrzadu
Częstotliwość kluczyka Mercedes GLK 2010: 315 MHz czy 433,92 MHz? Programowanie biorytmów na Arduino GIGA