I zmień w konfiguracji projektu "cs-make" na "make". 4\/3!!
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...
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
https://pl.wikipedia.org/wiki/Odwrotna_n...
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 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...).
Freddie: Dostępy bitowe BitBand są atomowe z perspektywy procesora lub DMA, nie mamy jednak podstaw do twierdzenia, że są one atomowe z perspektywy peryferiali. Nie wydaje mi się, by mechanizm BitBand gwarantował, że sprzęt nie zmodyfikuje bitu w rejestrze peryferiala w tym samym czasie, gdy interfejs szyny będzie wykonywał na tym rejestrze operację...
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...
Timerem zmierzyć możesz.
Witam Mam problem ze zmianą czasu w STM32F0Discovery. Konfiguracja i inicjalizacja modułu jest dobrze wykonana - w debugerze zlicza sekundy, ustawia flagi itd. Problemy zaczynają się gdy chcę załadować do rejestru czasu TR i daty DR aktualny czas. Podczas pracy krokowej wszystko idzie ładnie - flagi się ustawiają, rejestr ładuje i wartości się zmieniają....
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,...
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!!
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ę wektorów, skrypt linkera, startup, Makefile (czy konfigurację...
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....
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...
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...
Dodałem do bity CPOL i CPHA : https://obrazki.elektroda.pl/7719867000_...
r"]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/ Będzie "działać tak samo" o ile ograniczysz się do kodu arduino bez odwoływania się bezpośrednio do sprzętu specyficznego dla danego MCU (jak chociażby timery w podanym przykładzie). Swoją...
Chodzi o częstotliwość wykonywania pomiarów a nie częstotliwość taktowania bloku ADC. Ale tą częstotliwość już podałeś: 50Hz. Jest to bardzo mało. Możesz użyć największego możliwego do ustawienia czasu próbkowania i nie wpłynie to na spowolnienie pomiarów. A znacznie zminimalizujesz problemy związane z ładowaniem kondensatora S/H.
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?).
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,...
(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...
Ale opowiadacie bzdury, jakby to była jakaś czarna magia Też tak uważam. Mamy XXI wiek a od przybytku głowa nie boli :). Osiem bitów to archaizm gdzie nawet prostą operację np. typu 200+200 procesor musi wykonywać "na raty" bo jego rejestry nie mieszczą wyniku.
[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.
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,...
Rzeczywiście, po "halt" i bez 'bin' zadziałało. Dzięki. Ciekawostka: bez "halt", w trakcie wykonywania się programu, też działa (bez 'bin' - z 'bin' nie). Nie pamiętam, w jakich okolicznościach bez 'bin' OpenOCD zgłaszał, że nie może otworzyć pliku. Na pewno zgłaszał, inaczej bym nie próbował 'bin'.
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...
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...
Tak skok jest wykonywany z podprogramu obsługi przerwania CAN. Nie mam aktywnych w tym czasie żadnych innych przerwań. Jedynym przerwaniem jakiego używam w bootloaderze jest przerwanie od odebrania danych po CAN-ie. Dodano po 3 Z tego co pamiętam, parametrem funkcji NVIC_SetVectorTable() jest offset a nie konkretny adres, więc podaje dobrą wartość....
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)....
Dzięki za odpowiedź. Danych do kodu nie wstawię z powodów, które już podałem. Ale może znasz jakiś prostszy sposób, by użytkownik, nie mający pojęcia o przygotowaniu kodu dla mikrosterownika mógł w nim umieścić duże bloki swoich danych? Moje rozwiązanie dobrze się dotychczas sprawdza, ale chętnie poznam inne możliwości. Tak to wygląda dotychczas w pliku...
Nie. Wciąż jadę na starych przykładach i zmieniłem w nich tylko ten adres. Dodatkowo kilkanaście razy przekompilowywałem kod i wgrywałem go do procesora i działał. Po którymś przeprogramowaniu raptem przestał. I teraz jak już wiem o co chodzi to jadę na kodzie bez PLL. Po za tym to zawsze muszę dwa razy przeprogramować. Po pierwszym przeprogramowaniu...
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?
Gdy takie dane podałem, uzyskałem w pitch`u zakres do 90 stopni. Roll skacze ze 180 do -180 (?), a na Yaw nawet nie patrzę, bo nie podaje do funkcji magnetometru (na razie). Hmh, właśnie z kątami Eulera są pewne niedogodności. Prawie zawsze jest inaczej począwszy od kolejności wykonywanych obrotów ( XYZ, ZYX, etc..) kończąc na zakresie poszczególnych...
No racja, dzięki. jeszcze tak dla pewności: to w ten sposób mam przerwanie co 0,2s: SysTick_Config(CLK_FREQ/14400000); Nie. Taka konfiguracja spowoduje to, że przerwania będą bardzo szybko występować (co kilka cykli zegara). Jak chcesz mieć przerwanie co 200ms to skonfiguruj timer tak: I automatycznie za każdym przerwaniem powinna wykonywać się powyższa...
Witam Zadecydowało, pozytywne doświadczenia z mikrokontrolerem STM32F1 oraz własnie rozeznanie na rynku. Wykonywałem wcześniej sterowanie u/f plus prosty estymator strumienia i różne transformacje układów współrzędnych (aB->dq) na stałoprzecinkowym procesorze (STM32F1), ale do mojego zadania potrzebna była szybka zmiennoprzecinkowa jednostka. Znacznie...
To wskazuje na wykonywanie się bootloadera ST.
A konwersję skopać okrutnie - to tylko tyle dzieleń i dodawań, ile cyfr w wyniku.
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?
Mam przed sobą Cortex™-M3 Revision r2p1 Technical Reference Manual i tam napisane jest iż MLA trwa dwa cykle a np ADD, MUL jeden czyli ja zysku nie widzę przy wykorzystaniu tego rozkazu (Czasowego bo to tylko chyba objętościowy zysk). Staram się w sposób świadomy pisać w C tak aby kod wykonywał się jak najszbiciej. ale jeśli nie ma różnicy w czasie...
Witam, Próbuję uruchomić wyświetlacz OLED oparty o sterownik SSD1306. Wyświetlacz jest sprawny (testowałem pod M328). Kod również jest ten sam, co na AVR, tylko ze zmianą biblioteki do obsługi I2C. Korzystał z płytki Discovery Stm32F0. Inicjalizacja I2C http://obrazki.elektroda.pl/8366705500_1... Niestety nie wiem jak zmienić tą wartość....
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 ?
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....
Hmm :), No to od czego zaczniemy chłopaki bo ja to programistą jestem ale raczej od strony algorytmicznej, brałem udział w różnych olimpiadach jak "OI, Opsesje algorytmiczne, Potyczki algorytmiczne i takie tam", nawet raz byłem w finale :) ale to było trochę temu hehe, Na procki pisałem ale w czystym C na linux'ie no z wykorzystaniem "stdio.h i stdlib.h"...
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...
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...
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.
Czyli widać tutaj, że najpierw jest odczytywana wartość rejestru ODR, wykonywana jest operacja or, a następnie wykonywany jest atomowy zapis, czyli generalnie operacja ta nie jest atomowa? Dokładnie jak piszesz. W AVR operując na porcie, ustawianie i kasowanie bitu portu jest atomowe, negowanie jego stanu juz nie. Dokładnie tak w ARM.
Dziękuję za odpowiedź. Opis rzeczywiście wyszedł dość długi :). Jeśli dobrze pamiętam, to POR jest to Power On Reset. Próbowałem go wykonać, choć może źle zrozumiałem jak to zrobić. Po zaprogramowaniu układu i włączeniu ochrony odcinałem zasilanie układu (wypinałem z Nucleo złącze USB, przez które jest ono zasilane). Mimo wszystko problem dalej występował....
Czy ustawienie priorytetów załatwi problem czy może jest jakiś inny powód że przestało to działać? Definitywnie to drugie. Na 99% Twoje przerwania trwają zbyt długo lub użyłeś w nich (pośrednio lub bezpośrednio) funkcji blokujących/oczekujących/pollingu. Jeśli zaczniesz kombinowac z priorytetami bez zrozumienia przyczyny, to tylko wpędzisz się w więcej...
Wnioski z artykułu : startup wolniejszy bo kopiuje serial FLASH do SRAM Wydajność większa bo wykonywane ze SRAM Ciekawe jak działa emulowanie EEPROM w FLASH, ale skoro Na tą chwilę załadowałem bootloader stm32duino i działa ok to pewnie problemu nie ma?
Wykonałem próbę pracy z watchpoint-ami, za pomocą nowej (rozwojowej) wersji OpenOCD 0.4.0-rc2 i telnetu. Już wykonanie komendy: "wp 0x20000e04 4 r 10 0xffffffff" (gdzie 0x20000e04 adres zmiennej typu int), powoduje błąd: openocd-0.4.0-rc2.exe -f interface/kt-link.cfg -f target/stm32.cfg -c "jtag_khz 1000" Open On-Chip Debugger 0.4.0-rc2 (2010-02-14-10:00)...
No tak. W ADC1 nie miałem opcji Timer 1 TRGO event dlatego używałem Timer 1 CC1 event tyle, że nie działało, mimo, że przerwanie od CC1 się wykonywało. Nie mam sił już tego drążyć. Zostanę z TIM3. Teraz muszę jeszcze włączyć DMA - mam nadzieję, że nie będzie niespodzianek...
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,...
Choć z drugiej strony, nie widzę w Twoim kodzie żebyś modyfikował TIM1_CR1->DIR... Podczas wykonywania instrukcji: TIM1->CR1|=TIM_CR1_CEN;// załącz TIM1 bit TIM1_CR1->DIR w "cudowny" sposób zmienia wartość na 1 i tego nie mogę zrozumieć... TIM_CR1_CEN==((uint16_t)0x0001) więc bit TIM1_CR1->DIR nie powinien zostać naruszony.
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...
Jeden kanał DMA odbiera dane z SPI i zapisuje je do bufora w RAM. Drugi kanał DMA zapisuje dane z bufora w RAM do USARTa. Jeśli użyjesz dwóch różnych buforów (zmienianych po zakończeniu operacji), to całość powinna działać całkiem nieźle i w zasadzie większość zadań będzie wykonywana w przerwaniu od zakończenia transferu DMA. Pewnym problemem jednak...
Ta komenda akuratnie jest wykonywana w CAN_Receive().
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,...
Od niedawna wróciłem do zabawy z ARMami. Mam płytkę ewaluacyną z procesorem: STM32F103VBT6. Oczywiście przeszperałem forum, poczytałem, skonfigurowałem środowisko i odpaliłem (z flasha) klasyczne miganie diodą zrobione przez Freddiego - za co dzięki. Kompilacja, linkowanie i flashowanie bez problemów. Uruchomiło się i działa. Potem kolejne coraz bardziej...
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!!
Dobry zwyczaj: 5 V do wejść układów 3V podłącza się przez rezystory. Rejestry BRR i BSRR wymyślono właśnie po to, żeby nie wykonywać na nich operacji logicznych! źle: GPIOE->BRR |= 0x00008000; dobrze: GPIOE->BRR = 0x00008000; Operacje logiczne kończą się źle, gdy ktoś używa ich w różnych procedurach działających na różnych priorytetach (np. przerwanie...
Może gwoli wyjaśnienia nie jestem nowicjuszem w dziedzinie procesorów, wiem co to są rejestry Wybacz ale z postów to nie wynika Następnie szukając po internecie znalazłem inny rozkaz BNE label (branch if Z == 0 Not equal) i co najciekawsze on działa chociaż niema go w Reference Manual Załaczam Ci wiele innych rozkazów bez szukania w internecie A tak...
Widzisz gdzieś w kodzie wyłączanie HSION? Bo ja nie... A boli cię że HSION jest włączony? Jeśli tak, to go wyłącz ;] Czymże jest "jakiś licznik"? Co ty z nim masz zmiar robić i do czego go używać? Od pomiaru czasów wykonywania kodu jest timer w procesorze. Poza tym, co ci po liczniku, skoro pierwsze lepsze przerwanie rozwala ci cały pomiar... W lewym...
Poza tym, żeby je odpalić musisz mieć jakiś inny programator, żeby zaprogramować programator. Kółko się zamyka. Niestety nie jest to prawdą. Dowcip z USBTiny polega na tym, że można go zaprogramować bez posiadania programatora, co dokładnie opisał Manekinen w artykule, który wskazał Loksonick, czyli: http://mdiy.pl/programator-usbtiny-mkii-... Trzeba...
Dane przesyłane do tej kolejki są z funkcji TickHook, a wygląda to tak: [syntax=c]char *pcMessage = "Status: PASS"; xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR( xLCDQueue, &pcMessage, &xHigherPriorityTaskWoken );[/syntax] Funkcja TickHook jest wykonywana z każdego przerwania systemowego, natomiast dane przesyłane kolejka są raz na określona...
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?
No ale dzięki temu wiem co po kolei się wykonuje w przerwaniu...
(...)Obliczenia i porównania robić na liczbach całkowitych i tylko do wyświetlenia formatować jako część całkowitą i ułamkową(...) Trafiłeś w sedno. Ja powszechnie używam formatów stałoprzecinkowych, z tym że reprezentowane wielkości mnożę przez 256 lub 65536 a nie przez 100, np: 3,45 * 256 = 883 = 0373 hex = 03,73 hex 2,34 * 65536 = 153354 = 0002570A...
Nie za bardzo się zrozumieliśmy. Nie chodziło mi o to jak się ustawia priorytety w STM32, tylko jak je ustawić aby ta funkcja nie została przerwana w trakcie wykonywania, przez jakieś przerwanie. A dokładniej aby nie została przerwana w momencie da niej krytycznym - między przepisywaniem zmiennej data do bufora i inkrementacją zmiennej ut1_end. Bo później...
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).
Zegar peryferiów włączony?
Ewentualnie zmiana poziomu optymalizacji - zależnie od kompilatora pomoże lub nie. Bez volatile kompilator na podstawie samego kodu stwierdza ze "run" nie ma szans zmienić stanu bo niby jak ma wejść do funkcji TIM2_IRQHandler i olewa taki fragment kodu. Kompilator nie uwzględnia czynników sprzętowych (zewnętrznych) oddziałujących na kolejność wykonywania...
Mam ją. Jak polecacie czytać czy siąść i całą przeczytać na sucho czy może krok po kroku wykonywać wszystkie wskazówki?
Postanowiłem spróbować poprzez USART, podciągnąłem PA14-BOOT0 do VCC. Spróbuj może tak. Podłącz ten BOOT0 do Vcc i włącz Nucleo do zasilania. Powinien być w trybie wykonywania programu z pamięci systemowej (bootloadera). Wtedy, nie wyłączając zasilania rozłącz ten pin od plusa i spróbuj kontaktu po SWD, STlinkiem lub j-linkiem. W innych STMach ten...
W efekcie wykonania poniższego kodu oczekiwałem czarnego tła na ekranie wyświetlacz, jednak po uruchomieniu jedyne co otrzymuje to przypadkowe wartości pamięci wyświetlacza (losowe czarno-białe punkty tzw. "szum"). Próbowałem uruchamiać wyświetlacz nie tylko w takiej konfiguracji jak zamieszczona tutaj (w sieci jest całkiem sporo przykładów wykorzystania...
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...
Witam, Dotychczas się nie ujawniałem, gdyż wolałem sam spróbować swoich sił w przygodzie z 32 bitowym procesorkiem. Jednakże, problemy, jakie napotkałem spowodowały, że zdecydowałem się na założenie konta i tego tematu. Używam Eclipse Indigo, prog-debuger jtag wiggler, procesora STM32F107VCT6 na płytce olimex STM32-P107 rev.B. Konfigurację eclipse udało...
Witam mam trywialny problem, ale chciałbym się upewnić: Otóż postanowiłem zrobić sobie wysyłanie danych przez port szeregowy. Mam w związku z tym pytanie odnośnie USART na STM32. Jeśli ustawię sobie przerwanie USARTA na aktywny stan TXE (USART_ITConfig(USART1, USART_IT_TXE, ENABLE); ), to ono od razu mi się wykona, bo w TDR nie ma danych. Przerwanie...
Dziękuję za merytoryczną odpowiedź. Czy ten układ jest zamontowany nad wyświetlaczem LED? To czarny, prostokątny układ blisko mikrokontrolera z "345B" w pierwszej linii oznaczenia. Wg google translate opis na obudowie mówi że jest też "mechaniczny czujnik celu (wąs)". Nie wiem czy pracują naraz czy też moduł jest jeden a konfiguracja wynika z wgranego...
STM32 w ogóle nie działa? Nie wykonuje programu?
Wystarczy wspomnieć tylko te wszystkie pętle opóźniające bez volatile, które każdy normalny kompilator wywali w kosmos przy dowolnym poziomie optymalizacji. Bardzo dziękuję za zwrócenie na to uwagi, poprawiłem i czas wykonania funkcji speedTest() wynosi: optymalizacja O1 PIC 110us STM 160us Po wywaleniu opóźnień while (d--) sytuacja wygląda tak jak...
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
Fault input także ma stm32, 3 oddzielne ADC przetworniki także prędkość przetwarzania będzie podobna jak przy 2 oddzielnych próbkujących z 2MSPS w dsPICu. Jeśli chodzi o Pwm no to dsPIC widzę że ma jeszcze zamianę faz, nie ma co ukrywać wyposażenie w dsPICu jest bardziej zaawansowane jeśli chodzi o sterowanie silnikami i energoelektronikę. W każdym...
W C też da się napisać łatwo przenaszalny kod. Przejście na C++ jest jak przejście na cokolwiek innego - składnia jak składnia. Problemem jest zmiana idei, kod obiektowy to nie kod strukturalny. Chociaż patrząc na kody umieszczone w internecie może się wydawać, że jest zupełnie na odwrót. To za sprawką tego, że 80% osób używających języka obiektowego...
Skrypt linkera definiuje sekcję .isr_vector. Jej zawartość jest zdefiniowana w asemblerowym pliku startupu. Jest to zrobione w typowy sposób. Z resztą hard fault następuje przed włączeniem systicka, więc nie widzę związku tabelą wektorów przerwań. Na to, że jest ona w porządku wskazuje też fakt, że wykonywana jest funkcja void HardFault_Handler(void),...
1. strona jest kasowana i sprawdzana przed zapisem czy jest czysta (po skasowaniu tez). 2. zapisy nie przekraczają granicy strony 3. zapisywane są dane 4. zakres ustawiony w pliku linkera poza granicami wykonywalnego kodu 5. zapis z RAM - w funkcji zapisu bloku wyłaczam przerwania na czas zapisania całego obszaru (po kilnanascie bajtów) i weryfikacji...
Nie trzeba się bawić w udev, jedynie co to dodać linijkę odpowiedzialną za dostęp do urządzenia, żeby nie musieć logować się na roota za każdym razem jak chcemy debugować. Jaja w nowym jądrze (!) wynikały z tego, że sterowniki ftdi ładowane do jądra "nie wiedziały", że urządzenie o podanym vid i pid to urządzenie oparte na ftdi i trzeba było im to jawnie...
Witam, Taka metod dogrywania jest standardowa np. w sterownikach PLC gdzie możemy wgrywać pojedyńcze bloki lub podmienić pojedyncze instrukcje. Dlatego jestem ciekaw czy da się tak samo na STM32 wykonać. Ułatwiłoby to mi pracę. A i z drugiej strony jestem ciekaw jak to jest wykonywane, bo w PLC taka opcja to standard. Pozdrawiam
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...
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....
Uczę się programowania uC w C. Bazuję na STM32F411. Programy opieram na bibliotekach HAL. Ostatnio sporo czasu poświęciłem na szukanie błędów w swoim kodzie. Okazało się że struktura mojego programu była nieprawidłowa. Dopiero po jakimś czasie przypomniało mi się że przerwania powinny być jak najkrótsze. I teraz mam pytanie: Co można dawać w przerwaniach,a...
Rozmiar stosu można przewidzieć maksymalnym zagnieżdżeniem, ale uwaga na rekurencje :P Ale na stosie są odkładane nie tylko wywołania, zmienne automatyczne też tam lądują, tak samo jak parę innych rzeczy więc można jedynie tak jak mówisz oszacować mniej więcej ile stosu będzie wykorzystywanego, ale to będzie tylko marne przybliżenie. To samo tyczy...
Dobra, to jest znacznie lepsza opcja, z poczekaniem po prostu... Albo nawet ze zworką. Bo rozumiem, że to jest tak, że jak już programator (ST-Link) "złapie" procka, tzn. się z nim połączy to wykonywanie kodu jest wstrzymane i wtedy może już sobie tak wisieć ile chce?
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...
Witam Jestem początkującym w temacie FreeRTOS i mam parę problemów ze zrozumieniem działania tego systemu. Jeśli mam jakąś obsługę przerwania i w czasie jego wystąpienia ustawiam semafor na który czeka jakieś zadanie o niskim priorytecie (albo nie najwyższym) to po wyjściu z tego przerwania to zadanie będzie niezwłocznie wykonywane czy system poczeka...
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!!
RTOS nie wiele Ci pomoże. I tak i tak musisz krytyczne zadania wykonywać bezzwłocznie i raczej wykonywanie tego w przerwaniach jest dobrym rozwiązaniem. Bawienie się w flagi to też jest mit, nie zawsze ich używanie jest uzasadnione i ma dobre skutki. RTOS może przydać się do reszty, ale nie jest powiedziane, że ułatwi zadanie. Na pewno program będzie...
reset wykonywa wykonywa przelotka wykonywa robot
skrzypienie skręcaniu cabletech ustawić ogrzewanie propan butan
samsung ue50ju6400 światło awaryjne
Kodowanie kluczyka do immobilizera Skoda Octavia II 1.6 MPI 2004 Zdjęcie cewki immobilisera z kluczyka Skoda Octavia II 1.6 MPI 2004