z tego co rozumiem żeby dokonać jakiejkolwiek zmiany w rejestrze AIRCR należy tam również wpisywać 0x5FA po to by zapis nie został odrzucony. Chyba że źle kombinuje:P Dobrze kombinujesz, wcięło mi ten zapis :P SCB->AIRCR = AIRCR_VECTKEY_MASK | (3<<8); gdzie: #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) Chociaż...
Ewentualnie jak ustawić priorytety/wywłaszczenia? Ja bym spróbował zrobić to w ten sposób jak poniżej. To taki przykład o co mniej więcej w tym chodzi. Podzieliłem priorytety na 4 grupy o ważności priorytetów od 0 do 3 za pomocą funkcji dostępnych w CMSIS. Im wyższy numer grupy ( 0G, 1G, 2G, 3G) tym wyższy priorytet, z tym że taki podział mówi o wywłaszczeniu....
Ja na samym początku przerzucam wektory przerwań na początek pamięci RAM. A później wstrzykuję swoją funkcję w miejsce oryginalnego wektora. Po rozmyślaniu na ten temat doszedłem do następujących wniosków. 1. Możliwość dynamicznej rejestracji przerwań (najlepiej w wysoce abstrakcyjny sposób, tak aby funkcje nie musiały być publiczne) byłaby z pewnością...
Poczytaj w dokumentacji, sprawa jest tam poruszona. SysTick i PendSV mają być na najniższym, a inne przerwania - które używają funkcji RTOSa - nie mogą mieć wyższego priorytetu (niższego numerka) niż configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... lub configMAX_SYSCALL_INTERRUPT_PRIORITY. Obstawiam, że jedna z tych wartości nie jest używana i w ogóle jest...
Twój kod jest zły, bo czwórki bitów dla poszczególnych przerwań są w tych tablicach IP[] upakowane po 8. Funkcje z CMSISa do przerwań (do NVIC) są generalnie funkcjami inline, więc efekt finalny będziesz miał taki sam - czy użyjesz swoich dostępów do rejestrów, czy tych funkcji. Ja bym proponował zostać przy tych funkcjach. Jak koniecznie chcesz poczytać,...
Witam , Wracam do tematu . Zegar skończony i przetestowany . Podziękowania dla autora za pomoc . Kilka krótkich filmów z pracy zegara wykonane telefonem . https://filmy.elektroda.pl/11_1551555088... https://filmy.elektroda.pl/90_1551555174... https://filmy.elektroda.pl/15_1551555225... https://filmy.elektroda.pl/89_1551555287... Jedna z dwóch gier...
https://obrazki.elektroda.pl/9151185000_... Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie...
Właśnie w datasheecie, 157 strona dokładnie jest napisane, że rejestr dzieli się na dwie części. Bity 0-15 służą do wysterowania na logiczne 1 pinów od 0 do 15 poprzez wstawienie tam wartości logicznej 1, oraz bity 16-31 służą do wysterowania logicznie na 0 pinów od 0 do 15 także poprzez wstawienie tam wartości logicznej 1. https://obrazki.elektroda.pl/3431699300_...
Znowu małe pytanie... Działa Ci operator new, czy coś trzeba jeszcze dodać ? U mnie procesror wchodzi w HardFault_Handler jak próbuje go użyć : Hmm... W aplikacji testowej jest sporo alokacji dynamicznych w teście kolejek, choć są one jednowątkowe oraz dosyć zorganizowane (po kilku alokacjach jest zawsze dealokacja wszystkiego). Tak więc odpowiedzieć...
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...
Nie jest to zagadka, tylko znajomość priorytetu operatorów czyli czegoś bardzo podstawowego: Kolejny post zupełnie nie na temat... Tak jakby się ktoś pytał o priorytet operatorów w wyrażeniu w którym jest tyle nawiasów... (at)OlegTor , zapis o który pytasz jest głupim sposobem zrobienia zaokrąglenia wartości "do góry" do wielokrotności liczby 4. Dla...
Następnie Ty zerujesz bit ACK i bit Stop powodując zawieszenie się magistrali. Ogarnij się.... Czyli ten fragment kodu jest błędny ? Jest w 100% poprawny.... Tak naprawdę jest to żądanie STOPU a nie jego wygenerowanie. Przed tym warunkiem ostatniego bajtu masz odczyt z DR oznacza to, że JUŻ TRWA odbiór ostatniego bajtu, po którym zostanie wygenerowany...
W tym wątku jest wszystko już napisane. Masz np 16 priorytetów przerwań. 16 bo tyle np w STM32 zaimplementował producent. W rejestrach priorytetów te 16 priorytetów jest reprezentowane przez 4 najstarsze bity XXXX----. Bity X mogą być jeszcze rozdzielone tworząc grupy priorytetów i subpriorytety np GGSS----. G oznacza numer grupy, S oznacza numer subpriorytetu....
Z tego co piszesz wynikało by, że w zasadzie tego kodu się po prostu nie da używać w sposób przewidziany przez autorów (; Rozumiem, że aby to ominąć to funkcję `USBH_Process(&hUSBHost);` musiałbym wywoływać np. z przerwania od timera, które miałoby taki sam priorytet jak przerwanie od USB?
Wszystko fajnie, pod warunkiem, że chce się używać STM32. 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ę...
Dlatego, że procedury obsługi peryferiala USB na niskim poziomie w STM32 nie są wielobieżne. Każdy program, który wysyła coś po USB w (za przeproszeniem) pętli głównej Programowanie wielowątkowe, systemy operacyjne, mówi to Panu coś, Panie BlueDraco:) W moim rozwiązaniu mam klasę USB która ma w sobie wątek odpowiedzialny za obsługę niskiego poziomu...
Co do priorytetów, u mnie dla LPC1769 jest ustawione tak: [syntax=C]/* The lowest priority. */ #define configKERNEL_INTERRUPT_PRIORITY ( 31 << (8 - configPRIO_BITS) ) #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( 5 << (8 - configPRIO_BITS) )[/syntax] Dla STM32 configPRIO_BITS jest równe 4. U siebie też tak masz? Z tym przesunięciem bitowym?...
Wg mnie się da - http://infocenter.arm.com/help/index.jsp...
Dzięki wielkie za pierwszą podpowiedź jutro sprawdzę sugestię, ale priorytety w NVIC rozumiem : Hmmmmmm... czyli w pierwszej grupie TIM1 ma preemption=0 i sub=2 natomiast systick jest w 0 grupie i ma preemption == sub == 0 czyli wg mnie powinien wywłaszczać. P.S: W timerze delay jest mi potrzebny bo wysyłam dane po rs485 i muszę odczekać czas ze względu...
Piszę do swojego RTOSa driver dla SPI używający DMA. W rozważaniach ograniczmy się do STM32F0, ale ogólnie rozchodzi mi się o wszystkie układy STM32 które mają SPI wyposażone w FIFO _ORAZ_ DMA które FIFO nie ma (czyli najgorsza możliwa kombinacja). Generalnie wszystko jest w miarę proste i logiczne, ale zastanawiam się nad obsługą błędów, a konkretnie...
Trochę rozpustnie to napisałem poprawiłem kod jest bardziej zwięzły. O program oczywiście po proszę. Gaskoin - Twój program znalazłem na elektrodzie już wcześniej. Między innymi z niego korzystałem pisząc swój. Rzeczywiście nie wiele się różnią tym bardziej nie wiem gdzie leży problem. Zależy mi na stałym ciągłym pomiarze z dwóch wejść. Grupa Injected...
Witam, spotkała mnie sytuacja z której nie mogę wybrnąć. Tzn do transmisji używam I2C, które w kontrolerze przerwań ma priorytet 1 dla obsługi zdarzen oraz 0 dla błędów. Kiedy uruchamiam Timer 17 skonfigurowany jako PWM(to co odczytane zostanie z I2C ma trafić do PWM'a), to transmisja stoi. Od Timera 17 nie generuje przerwań , wiec nic nie powinno zwieszać...
Teraz mam problem z przerwaniami od końca konwersji ADC1. Działanie układu wygląda tak jakby mikrokontroler nie wchodził w obsługę uchwytu przerwania od przetwornika ADC 1,2. Konfiguracja przetwornika: void init_adc (void) { // Niezależny tryb pracy // Włączenie przerwań od końca przerwań - EOC ADC1->CR1 = ADC_CR1_EOCIE ; //Wybór czasu...
To obniż priorytet - wtedy nie będzie Cię blokowało. Ewentualnie musiałbyś zrobić tak, że cały driver jest RTOSowy, z transakcjami itd., przez co zakończenie jakiejś operacji dopiero budzi taska, nie musisz się bawić w takie pętle. No chyba że nie rozumiem opisu problemu który napotkałeś... P.S. "written" 4\/3!!
Witam drogich użytkowników, mam problem z poprawnym zaprogramowaniem trybu oszczędzania energii w STM32. Znalazłem przykładowy kod który mógłbym wykorzystać aczkolwiek nie wiem jak poprawnie zdefiniować funkcję NVIC wywołaną na samym początku listingu. Gdyby ktoś miał chwilę i mógł mi z tym pomóc byłbym bardzo wdzięczny. :) Dopiero zaczynam przygodę...
Jestem początkujący jeśli chodzi w ogóle o mikrokontrolery i programowanie także proszę o wyrozumiałość. Na tej płytce jest dioda LED podłączona do portu PA5. Jeżeli chcemy ją zapalić to używając rejestru BSRR piszemy w programie: GPIOA->BSRR |= 1 << 5; a gasimy GPIOA->BSRR |= 1 << 21; nurtuje mnie taka sytuacja while(1){ GPIOA->BSRR...
Nie powinno zatrzymywać się na wartości AAR tylko liczyć dalej (przekręcić się). Timer musi być zle skonfigurowany. Poniższy kod na pewno działa :) // konfiguracja timera TIM_DeInit(TIM2); //Konfiguracja timera do zliczania impulsow z enkodera TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1,TIM_ICPolarity_Falli...
Jakbyś nie zauważył to inna rodzina procesorów ;-) W użyciu jest lepsze. Inaczej po co w tamtych procesorach stosowano by bit band? Albert W STM32 też taki zapis można wykonać jedną instrukcją. Mimo, że są oddzielne rejestry do ustawiania i kasowania bitów. Porty są 16bitowe a jeden z tych rejestrów jest 32bitowy. Zapis do starszych 16b powoduje kasowanie...
Cze, Od jakiegoś czasu rozwijam swoją konstrukcję sterownika do stacji pogodowej. Projekt robi się coraz większy i większy i w końcu dotarłem do etapu, w ktorym rozważam użycie jakiegoś RTOSa. Mam dużą bibliotekę własnego kodu obejmującą takie rzeczy jak kompleksowa obsługa komunikacji po USART czy I2C, mam pełną obsługę konsoli tekstowej. Do tego używam...
witam, mam podobny problem, nie wiem co robię źle, chcę zapalić diodę podłączoną do PB0 za pomocą przerwania od przycisku podłączonego do PC7 lub 8. po wgraniu kodu przerwanie od SYSTICK ładnie działa, zapala i gasi na zmianę diodę na PB1, natomiast dioda na PB0 swieci się cały czas i nie ma żadnej reakcji na naciskanie przycisku.... poniżej kod.
Akurat biore sie za jeden projekcik i doszedlem po wstepnej analizie ze dalsze pisanie bez RTOS-a to bedzie lekki horror :) Dzisiaj na tapete wzielem ChibiOS/RT... niestety nie mam wiekszego doswiadczenia z RTOS-ami na STM32 :) Ladnie udalo sie odpalic miganie LED-ami na wlasnej plytce itd. Ale niejako sam RTOS przez warstwe HAL sprawia mi troche problemow...
hohoh Tymon, szczerze to nie czytałem całego tego dokładnie, ale na pierwszy rzut oka to czy to nie jest "przekombinowane" jesli chodzi o nasz problem? ;p Zajmuje to dość trochę pamięci, tworzenie jakichś tablic wskaźników do struktur w takim przypadku to też dość nieciekawa sprawa. Bardzo malutko to pamięci zajmuje: break . Wtedy każde zadanie o malejącym...
No bo wciąż ustawiasz rejestr IMR "odwrotnie" - zajrzyj do manuala co oznacza 0, a co oznacza 1. I w ramach testów zrezygnuj z ustawiania jakichkolwiek priorytetów przerwań czy czegokolwiek z nimi związanego. 4\/3!!
Na priorytet zawsze jest 4 bity czyli możliwe jest 16 poziomów priorytetów. Natomiast to jak to podzielisz ma ułatwić programiście życie i zapanowanie nad priorytetami poprzez łączenie je w grupy.
Witam, Z freeRTOSem dopiero się zapoznaje, mam kilka pytań odnośnie kolejek, bazuje na tutorialu twórcy tego systemu, lecz nie do końca rozumiem niuanse przez język angielski. Mam przykładowo 2 zadania, jedno wysyła dane do kolejki, drugie ma je odbierać. Odbiornikiem jest vTaskLCD(); który ma wysłać dane do wyświetlacza, natomiast vSenderLCD(); wysyła...
Skoro nie masz problemu z timerem, to po co w ogóle o nim pisać i po co testować program który ma też przerwania od timera? Niemniej jednak na początek brawa za to, że NIE używasz słynnego i popularnego badziewia (; Wg mnie (skoro chodzi o pin zerowy), powinieneś konfigurować rejestr AFIO->EXTICR[0], a nie 1. Problemem jest manual niezgrany z plikiem...
Witam, Używam FSMC do obsługi wyświetlacza, a timera do generowania przebiegu który steruje serwomechanizmami. Zauważyłem taką przypadłość, że jak coś zmieniam na ekranie to serwa lekko drgają, co zapewne jest spowodowane jakimś opóźnieniem w wysterowaniu wyjścia przez zegar i/lub uruchomieniu przerwania które ładuje następna wartość do rejestru (jeden...
1. Pierwsze 14 wyjątków pochodzi z rdzenia (2+14 adresów w tablicy). Te z rdzenia mają numery ujemne lub 2..15, spoza rdzenia - nieujemne lub od 16 w górę. 2. Jw, ale część wyjątków rdzenia też ma ustawiany priorytet. 3. Najlepiej zapomnij o "grupowaniu". W praktyce nie ma żadnego sensu korzystanie z tego. Domyślnie po reset mamy zawsze konfigurację...
W ciągu ostatnich dwóch lat w EP pojawił się cykl artykułów poświęconych programowaniu STM32 bez SPL z wieloma przykładami. A i ważna uwaga co do tekstu: w aktualnych, nowych wersjach plików nagłówkowych dla F4 już nie ma BSRRL i BSRRH, a jest BSRR (co powoduje, że programy napisane pół roku temu już się nie kompilują z nowymi plikami nagłówkowymi)....
(at)Piotrus_999 Te tajemnicze biblioteki są dostępne w internecie od ponad 10 lat bo sam używałem ich do pracy magisterskiej. Użycie google pozwoli Ci rozwikłać ta zagadkę. (at)Soberro Według mnie masz problem z problem z obsługą przerwań od przycisku. Byćmoże robisz tam coś czego nie powinieneś. Bez kodu nie da się więcej powiedzieć. Powinieneś zrezygnować...
12 cykli - tyle zajmuje przejście do obsługi przerwania 6 cykli - tyle zajmuje przejście z przerwania do przerwania o wyższym priorytecie 6 cykli - tyle zajmuje przejście do przerwania o niższy priorytecie bezpośrednio po zakończeniu przerwania o wyższym priorytecie 12 cykli - tyle zajmuje wyjście z przerwania. Ta zasada tyczy się wszystkich przerwań
Ok, rozumiem :) no tak, właśnie doczytałem z tym SysTickiem :P to tylko pozostaje to SetPriority - ustawiać czy nie?:P a jeśli tak, to jakie liczby podaje jako priorytet?
Owszem, ale wspomniał też, że ma poprawione libsy 2.2-dev dla STM32 i jest chętny je udostępnić. Oczywiście wszystko bazuje na arduino, bo i komu by się chciało na "natywniejszą" formę przepisywać skoro tam mają "one ring to rule them all". Tj. obsługa wielu różnych platform przez jeden ekosystem. I właśnie powiązania z tym ekosystemem powodują, że...
musisz więc wyłączyć JTAGa, bo on zwykle ma priorytet. 4\/3!!
A czy po wyłączeniu przerwania i ponownym włączeniu zostanie ono od razu wykonane jeżeli w międzyczasie nadszedł sygnał? Zgodnie z priorytetami i kolejką.
Opcja optymalizacji jest. Domyślnie wyłączona ze względu na to że wydłuża to czas kompilacji. Chwilowo mam inne priorytety finansowe, ale kiedyś kupię od Pana Leona jedną płyteczkę z Xmegą i Wam pokaże jak się na nich jeździ pod Bascom`em :D ..a może i C bo z braku Xmegi bawię się STM32 w Keil
No ubaw jest pierwszej klasy... Wrzucisz w końcu tyle kodu, żeby była w nim KOMPLETNA inicjalizacja wszystkiego? Przecież nikt tutaj nie wie, co jest w Twojej funkcji HW_Init_GPIO(), ani w pozostałych (System_Init()?), które mogą coś jednak zmieniać w SPI2 czy istotnych GPIO. A jeśli uważasz, że nic nie zmieniają, to zakomentuj je i potem wywal z tego...
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...
Autorze, coś czuję, że nie do końca chwytasz koncepcję CAN-a. Nie wiem, co Twój projekt ma realizować, ale jest kilka założeń, na których bazuje rozwiązanie korzystające z magistrali CAN: - wszystkie urządzenia podłączone są do jednej magistrali (dwa przewody: CAN-H i CAN-L). Sygnał przesyłany jest różnicowo. Magistrala z obu stron zakończona jest rezystorami...
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...
priorytet windows huawei priorytet priorytet wiadomości
wygłuszenie kolumn altus volvo silnika monitor cinch
Elektrozawór STOP – test działania, diagnostyka Mercedes OM602, OM603, VW 1.9D, Bosch BMW E61 – wymiana uszkodzonej cewki LF 125 kHz w kluczyku, objawy i naprawa