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
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...).
Nigdy nie robiłem takich rzeczy, więc nie wiem czy to dużo czy mało. Masz włączone FPU ? Jesteś pewny że masz dobrze skofigurowane zegary?
Timerem zmierzyć możesz.
Tutaj udokumentuję moją podróż z tanią płytką deweloperską / hobbystyczną STM32F103C8T6 "blue pill" zakupioną w Ali Express. Pomimo układu scalonego oznaczonego jako "STM32F103C8T6", wewnętrzna pamięć flash wydaje się mieć 128k zamiast 64k, co czyni go bardziej podobnym do STM32F103CBT6. Wydaje się, że nie jest to nieoczekiwane w przypadku podróbek/klonów...
https://pl.wikipedia.org/wiki/Odwrotna_n...
To tak, patrzę i na okno disassembly w CubeIDE i na kod wynikowy asm (plik .lss w folderze z projektem). Wycinek, który dałem jako screen jest właśnie z pliku .lss. W tym pliku wartość do jakiej odnosi się rozkaz ldr ( załaduj do r3 wartość z pod 0x80001d8) zgadza się ( jest tam 0x40010c00, i nawet patrząc na rejestry w czasie wykonywania programu wartość...
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...
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....
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...
[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.
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...
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ść....
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...
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?).
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,...
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.
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...
Procesor STM32F103ZET6 jest mikrokontrolerem ARM z rodziny Cortex M3, który jest taktowany zegarem o maksymalnej częstotliwości 72 MHz i zasilany napięciem +3,3 V z wyjścia stabilizatora napięcia LT1117-3.3 (oznaczony desygnatorem U10). Po co to piszesz? Napisz może co to cudo ma z założenia robić. Zastosowanie opóźnień jako pętli for (int i=0;i<ADC_value;i++);...
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!!
Problem z - System nie moze odnaleść okreslonej scieżki rozwiązany - Skuteczny Restart XP :) Natomiast pojawił się problem dalej. Wydaje mi się ze external Tools OOCD działa - tzn pojawia się w widoku Debug , jako proces. Wydaje mi się ze skonfigurowałem kolejno wszystko wg tutoriala. Nie zmienialem nic w konfiguracji procka , czy konfiguracji przykladu...
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...
Na pewno masz nieuszkodzony system plików? Karta jest odczytywana na komputerze? Próbowałeś z inną kartą? Próbowałeś z innym plikiem o innej nazwie? Nazwa bufora "sect" sugeruje, że były wykonywane jakieś próby z zapisem segmentu, co oczywiście uszkodzi system plików. Jakiego środkowiska uzywasz? W każdym masz opcje debugowania, wejdź do funkcji i sprawdź...
Czy skok do aplikacji jest wykonywany z podprogramu obsługi przerwania CAN albo masz aktywne w tym czasie jakieś inne przerwania?
Drodzy forowicze, w STM32F030 mam program, kompilowany przez GCC, który używa danych, zapisanych w FLASH w arbitralnie ustalonym miejscu, nie zajmowanym przez kod programu. Dane te są dopisywane przez połączenie pliku HEX kodu i danych. Do testów używam tablicy danych w kodzie źródłowym, oczywiście umieszczonych przez kompilator w innym miejscu. Adres...
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!!
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)....
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?
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....
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...
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...
Przestrzegam przed układami WS2812 i podobnymi. Podany przez producenta w dokumentacji czas opisany jako "Reset Code" niby wynosi 50 µs. Jednak w praktyce okazuje się, że wystarczy już ok. 6-7 µs, by doszło do zresetowania taśmy. Testowałem to z już z kilkoma taśmami. Tylko dlaczego przestroga? Każdy producent podaje czas maksymalny, a często...
A konwersję skopać okrutnie - to tylko tyle dzieleń i dodawań, ile cyfr w wyniku.
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?
Witam wszystkich. Przenosze kod z STM32 L 053 na STM32 F 030 Ruszylo mi prawie wszystko czyli: RCC GPIO SPI Pracuje na kodzie dostarczonym przez ST pod pewien moduł radiowy. Kod jest oparty o HAL generowany z Cube. Mam problem z DMA. Problem ten jest wynikiem nie wykonywania się jednej linijki kodu. Zamiast wskaznika (adresu funkcji) wpisywane jest...
Zamiast korzystania z bibliotek SPL wykorzystałem bezpośrednie wpisywanie stanu do rejestru co poskutkowało nie wykonywaniem przez procesor zbędnych operacji.
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/
To wskazuje na wykonywanie się bootloadera ST.
Wysyłam dane z ADC do ram transferem DMA i chciałbym podpytać czy aby przerwać aktualnie wykonywany transfer wystarczy wyzerować bit EN w rejestrze CCR? Pytam się bo mam taką apkę: [syntax=c]while(1) { switch(M_STAT) { case 0: // break; case 1: //uruchom konwersję (bez DMA) if(M_TRG) { ADC1->CR |= ADC_CR_ADSTART; M_STAT = 2; } else M_STAT = 4; break;...
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ę...
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 ?
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...
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...
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...
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...
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...
No tu akurat racji nie masz, bo bez wymuszenia int16_t będziesz miał 32-bitową wartość bez znaku, a z int16_t nastąpi prawidłowe rozszerzenie znakiem do 32 bitów podczas wykonywania obliczeń. Tyle że autor ma wartości bajtów "31" i "0", więc - tak jak pisałem - zmiana którą zaproponowałeś nic tu nie zmienia, bo to akurat jest wartość dodatnia. Problem...
Dodałem do bity CPOL i CPHA : https://obrazki.elektroda.pl/7719867000_...
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.
DescriptionResourcePathLocationType cs-make: *** cs-make all 'Building file: ../main.c' 'Invoking: Cross GCC Compiler' gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c" Nazwa 'gcc' nie jest rozpoznawana jako polecenie wewntrzne lub zewntrzne, program wykonywalny...
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'.
Rozwiązałem już swoje problemy następnego dnia po napisaniu posta, ale nie zdążyłem tu napisać, przepraszam. Dziękuję za porady, mimo że po czasie. Problem z delayem rzeczywiście leżał w priorytetach RTC_Handler i SysTick_Handler. Nie rozumiem tylko, dlaczego SysTick_Handler miał niższy priorytet od RTC, skoro w pliku z wektorem SysTick ma priorytet...
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ł....
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...
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...
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?
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...
PYTANKO: Co może być powodem innego wykonywania się kodu pod debugiem i bez debugu? Odpowiedzi może być tysiące - tylko Ty możesz mając układ przed oczami odpowiedzieć. Np. Jezeli wyzerowanie czegoś wymaga odczytania 2 resertów ja w programie czytasz jeden ale w podglądzie odczytujesz drugi to po debug zadziała a sam program nie. Nie ma na to chyba...
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...
Modyfikacja wypełnienia powinna być wykonywana w przerwaniu końca okresu timera generującego przebieg PWM. Obciążenie procesora takim przerwaniem jest prawie żadne, a cały kod to marne 6..8 linijek w C.
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.
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.
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,...
Przy załączonej optymalizacji kolejność wykonywania instrukcji jest z reguły inna niż w kodzie źródłowym. Jeśli dopiero zaczynasz się uczyć ustaw optymalizację na -O0, łatwiej będzie wówczas śledzić program.
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...
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...
Od kilku dni walczę z ćwiczenie 8.4 z kursu: http://www.elektroda.pl/rtvforum/topic31... W kursie jest kod dla F103, ja próbuję to przerobić dla wersji F407. Niestety bezowocnie. Sam timer, kiedy wyzwalać go sygnałem zegarowym, działa prawidłowo i włącza/wyłącza diody w procedurze przerwania. Niestety kiedy ma zliczać impulsy na pinie...
Ta komenda akuratnie jest wykonywana w CAN_Receive().
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
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...
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...
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.
Wszystkie te których używam (sqrtf(), powf(), acosf()) są liczone przez FPU? Niekoniecznie. W Newlib (czyli libm.a) nie ma implementacji specjalnie dla tego koprocesora, jednak jeśli masz włączoną optymalizację, skonfigurowane FPU (opcje kompilacji) i dodaną flagę -ffast-math, to kompilator niektóre z nich potraktuje jako funkcje inline i zastąpi odpowiednimi...
Rozważmy na początek taki kod: [syntax=c] #include "stm32f10x.h" void Delay(unsigned int delay); void SetClock(); int main() { FLASH->ACR = 0x10; FLASH->ACR = 0x00; FLASH->ACR = 0x10; SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GP... ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode...
Witam, Stanąłem pod sianą . Muszę dorobić do urządzenia coś takiego jak monitor zasilania, tak by zapisywać flash tylko w momencie wyłączania urządzenia. Do tej pory zapis flash wykonywał się w pętli, ale pamięć flash ma ograniczoną ilość cykli zapisu. Nie mogę już nic zmienić w hardware, podłączenie czegokolwiek do ADC-ka nie jest już możliwe. Czy...
Witam można to zrobić tak? Dwa projekty w jednym boot w drugim program wykonywalny. 1. projekt z bootem rom (rx) : org = 0x08000000, len = 16k // akurat 16k ma sektor// linker w tym projekcie mam tylko dwie opcje : - konfiguracja zegara+ czytanie programu np przez spi + zapis do flash - lub skok do adresu 0x08004000 2 projekt z programem. rom (rx) :...
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.
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...
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....
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"...
Po ostatnich wątkach postanowiłem napisać mikroporadnik bo czytać się już tego nie da. Część pierwsza - jak podłaczyć STM32F103 BluePill do ST-Link z Nucleo i jak skonfigurować Atollic for STM32. Nieco przykurzone Nucleo STM32F446RE i BluePill 1. Zdejmij jumpery ze zworki ST-Link https://obrazki.elektroda.pl/9000536300_... 2. Podłaczyć...
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...
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...
(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...
akt_bufor ^= bufor1 ^ bufor2; Tak, pamiętam. Zastosowanie XOR Swap, ale nie za bardzo potrafię to zastosować :). Dokumentacja twierdzi, że przed modyfikacją ustawień DMA rejestr CCR powinien być wyzerowany (czy tam jeden bit w nim). Poszukam :). A czy na pewno to przerwanie będzie się wykonywać? Jest poprawny wpis w NVIC?
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...
Dobra, radę przyjmuję, ale czy mimo wszystko to jest dopuszczalne, żeby program się zawieszał podczas debugowania, a normalnie wykonywał się poprawnie? :)
No ale dzięki temu wiem co po kolei się wykonuje w przerwaniu...
Zgaduję, że to kontynuacja wątku dotyczącego wyświetlacza http://www.elektroda.pl/rtvforum/viewtop... Problemem nie jest SPI, tylko sposób w jaki przygotowujesz dane do przesłania. Zabijasz wydajność całą serią operacji, które nie powinny mieć miejsca podczas transmisji: odejmowanie, przesunięcie bitowe, iloczyn logiczny...
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?
(...)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...
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...
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...
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...
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...
reset wykonywa wykonywa przelotka wykonywa polecenie
telewizor philips podłączyć wieża silnik krokowy civic uszkodzony digitizer
fabia schematy osadzania puszek elektrycznych
Pitsos Vario 700 – pralka zatrzymuje się po kilku obrotach bębna, pobiera wodę Schemat instalacji elektrycznej Renault Kangoo 1.2 D7F D4F H5Ft – lokalizacja bezpieczników, kolory przewodów