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....
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ż...
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ą...
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...
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ć,...
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...
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ę...
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 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ę...
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...
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...
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...
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?
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...
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ć...
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...
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!!
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...
Aktualizacja z września 2025: zobacz tutaj, aby uzyskać szczegółowe informacje na temat konwersji STM32 przez UART zamiast J-Link (tj. J-Link nie jest wymagany) https://www.elektroda.com/rtvforum/viewt... (dzięki (at)max4elektroda!) zobacz tutaj, aby uzyskać wyższą wersję przekonwertowanego oprogramowania CK-Link Lite dla STM32...
witam, 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.
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...
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!!
Przerwania, w odróżnieniu od starych ARMów są w całości zarządzane przez ARM'a czyli CortexMx. W dokumentacji ARM znajdziesz opisy rejestrów i jako to działa. Każdy producent, taki jak ST zmienia znaczenie linii przerwań, definiując je po swojemu za wyjątkiem kilku pierwszych zarezerwowanych przez ARM. Ponadto, Cortex'y mają możliwość nadania przerwaniom...
Zapisywać przez DMA to samo, co zapisujesz przy użyciu przerwań, tylko nie masz żadnych przerwań. Dwa kanały DMa programujesz na transmisję jednego słowa w kółko - jeden ustawia przez BSRR jedynkę, drugi przez BRR zero na wyjściu. Masz to opisane gdzieś w EP z 2016 roku.
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...
(at)Piotrus_999 czytanie ze zrozumieniem sie kłania. Proszę: http://bfy.tw/EXOL
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...
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)....
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...
Mnie wystarczy jak mam możliwość podglądnięcia jak kompilator poradził sobie z jakimś odwołaniem, instrukcją. Coś jak w AVRStudio było. Wiadomo ze takiego F7 nie da się zasymulować, i w ogóle trudno zrobić symulacje programową np z RTOS! o stm32cube IDE słyszałem ale jeszcze nie wiem co to dokładnie jest, bo w głowie mam stm32cube bez ide
Ok, czyli to z ARR jest przepisywana wartość do CNT, a jak się ma taką potrzebę to można pobrać z CNT wartość przy której aktualnie jest licznik? Sprytne :) Więc konfiguracja Timera finalnie wygląda tak: [syntax=c]void TIM_Config(void) { //Konfiguracja Timera //Prescaler fclk = 24MHz/24 = 1MHz TIM1->PSC = 24-1; //Zliczanie od 25(dec) = 25us TIM1->ARR...
1. Masz odpowiednie definicje rejestrów i wartości do wpisania w nagłówkach CMSIS. 2. Nie. Wpisujesz bit PENDSVSET i przerwanie jest pending ;) 3. Nie ma najniższego priorytetu. Trzeba ustawić. Jeżeli pytanie pierwsze jest przeczące to czy dobrze rozumiem, że wystarczy wpisać 1 w PENDSVSET a wychodząc 1 w PENDSVCLR ? Clear sie sam robi po wykonaniu...
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ń
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...
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?
Panowie dziękuję za pomoc ale połowę z tego zrozumiałem, więc nawet nie próbowałem tego robić bo wiem że i tak nic z tego nie będzie. Zrobiłem tak: skonfigurowałem ADC w CubeMX, bez DMA. Wygenerowałem kod. Z pliku adc.c usunąłem linijki odpowiadające za włączenie dwóch kanałów: [syntax=c]//sConfig.Channel = ADC_CHANNEL_1; //sConfig.Channel = ADC_CHANNEL_2;[/syntax]...
zegary itp włączone, bo jak mówiłem wszystko chodzi i odczytuje ładnie aż do pewnego momentu gdzie się wiesza. Funkcja odczytu znajduje się w przerwaniu od systicka, a przerwania od timerów maja niższy priorytet wiec nie powinny się wcinać w komunikacje. Jednak jak je wyłączę to chodzi bezbłędnie.
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...
Mam tylko parę doświadczeń, że peryferia są w jakiś sposób priorytetyzowane i włączenie dwóch dzielących ten sam pin i ustawienie tego pinu na alternate function zawsze skutkuje przydzieleniem tego pinu dla tego samego peryferium. Akurat timery mają możliwość konfiguracji (włączania) każdego kanału z osobna. 4\/3!!
Dzień dobry, posiadam pewien problem. Najpierw wtajemniczę w konfigurację projektu, a później opiszę szczegółowo problem. Płytka to STM32 Nucleo-G491RE, do której dołączony jest moduł Digilnet Pmod I2S2 - 24 bitowy przetwornik ADC oraz DAC z dużą prędkością próbkowania. Do odczytu danych wykorzystałem interfejs SAI z konfiguracją jak w załączniku pierwszym....
Moje pytanie dla upewnienia się. Rozumiem, że ustawiając priorytety przerwań od peryferiów należy stosować wartości z przedziału 5-15, mniejsze wartości zarezerwowane są dla systemu? Z grubsza tak. Dla przerwań możesz używać dowolnych priorytetów, ale te powyżej skonfigurowanej granicy NIE mogą używać funkcji FreeRTOSa (czyli semaforów, kolejek, ...)...
Witam, posiadam płytkę ZL29ARM i staram sie zrealizowac odczyt predkosci obrotowej przy uzyciu enkodera wobit M590. Kierujac sie dokumentacja "reference manual" podlaczylem enkoder - kanaly A i B na piny numer 6 i 7 na porcie A, uruchomilem Timer3 w trybie enkodera i dziala - zlicza w gore, w dol. Problem polega na tym, ze program powinien udostepnic...
Zmienne globalne zajmują...... Pewnie ram dla led jest rezerwowany w chwili uruchomienia biblioteki przez memalloc. Gdybyś sam pisał obsługę led to użyłbyś tablicy o określonym rozmiarze dzięki czemu wiedziałbyś ile ram zajmuje program. Poszukaj jak wyświetlić ilość wolnej pamięci ram w czasie działania programu. Jakiś freemem jest. Trochę oszuka ale...
Dokumentacji NVIC należy szukać na stronie ARMa, w dokumentacji od ST masz tylko kilka detali typu przyporządkowanie kanałów i ilość priorytetów, czyli rzeczy zależne od implementacji. 4\/3!!
z tego co widzę to 19 przerwanie czyli moje prowadzi pod inny adres niż wszystkie No tak, tyle ze to przerwanie jest "19-te", tyle że przed nim jest kilka systemowych. Wg tabelki w manualu tych układów, adres wektora przerwań dla TIM14 to 0x8c, natomiast u Ciebie wektor jest pod 0x68... Błąd masz taki, że za bardzo w nią zaingerowałeś... Zwróć uwagę,...
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...
Przepraszam bardzo, ale czy tutaj zostały jakieś posty usunięte, czy autor ma lekkie objawy schizofrenii (bez obrazy)?
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 mogę pokazać kodu ponieważ nie jestem jego właścicielem. USART2 wykorzystywany jest do komunikacji z SIM900, USART1 oraz TIM3 do Modbus RTU. Jakie ustawić priorytety od w/w źródeł przerwań ?
Witam, mam problem z uruchomieniem przetwornika cyfrowo analogowego na mikrokontrolerze stm32f103c8 . Według mnie konfiguracja przetwornika jest poprawna.Piny PA4 i PA5 są sprawne, mogę ręcznie ustawiać dowolny stan. Już spędziłem nad tym kilkanaście godzin i nadal nie moge wysterować pinu Pa4 napięciem z przetwornika DA. Zachowuje się jako do niczego...
Poza tym to, co chcesz definiować samemu, jest już od dawna zdefiniowane w plikach nagłówkowych mikrokontrolera. Z kolei programowanie SysTick znajdziesz w pliku nagłówkowym rdzenia - wystarczy przepisać treść nibyfunkcji SysTick_Config. Zmianę priorytetu przerwania, która w tej funkcji jest, możesz pominąć. No i zapis: (uint32_t) 0x00000007 to to samo,...
Dodałem tylko: AFIO->MAPR=0x02000000; //SWJ_CFG[2:0]=010 - JTAG disabled & SWJ enabled; Ustawianie portu i taktowanie jest ok. I nadal nic Sadząc po tym to w trybie JTAG-DP Disabled and SW-DP Enabled pin NJTRST powinien być dostepny jako normalny pin http://obrazki.elektroda.pl/5460659000_1... Ewentualnie może chodzi o...
Obstawiam, że obliczenia dla PID zabijają wydajność uC. procek ma 72Mhz, podzielmy to na 50k -> 1440 cykli. Jeśli obliczenia dla PID zbliżają się do tej ilości cykli to utkniesz praktycznie w tym przerwaniu, jeśli ma najwyższy priorytet.
Dziękuję za odpowiedź. Widzę, że dobrze orientujesz się w temacie więc chciałbym się jeszcze o coś spytać. 1. Dlaczego Twoim zdaniem nie robi się przerwań buttonów? Oczywiście nic nie zarzucam, po prostu uczono mnie, że jednym ze sposobów obsługi buttonów są przerwania i dlatego chciałem to wykorzystać. W prawdzie nie wykorzystuję w projekcie typowego...
Korpo stosują logowanie domenowe do wszystkich swoich usług, a zdalne połączenie do sieci firmowej po VPN. Hasło jest zatem jedno. A Ty znasz wszystkie korpo? Ja znam 3 korporacje, w każdej było wiele haseł, wiele aplikacji, logowanie domenowe w części oprogramowania. Nawet do softu po WWW, nie wszędzie było przez domenę. Urządzenie ma formę pudełka...
To nie jest to samo Jeżeli released ma wartosc 00000100 i zrobię sprawdzanie czy drugi bit jest ustawiony, to dostanę fałsz, bo będzie z AND wynik (00000100 & 00000010 = 00000000) == 00000010 A gdy będę sprawdzał ustawienie 3 bitu to dostanę prawdę, bo (00000100 & 00000100 = 00000100) == 00000100 No tak, świat jest piękny, a priorytety operatorów są...
(at)tmf - zgadzam się z wszystkim co napisałeś, ale (powtórzę się jeszcze raz) - jeśli weźmiemy tanią platformę jak STM32F411RE Nucleo to w porównywalnej cenie nie znajdziesz nic wystarczająco uniwersalnego i mocnego w świecie 8bit. Sam zdziwiłem się, że ARM z takimi możliwościami może być TAK TANI. (at)dondu To znowu jest Twój punkt widzenia. Ktoś...
W jaki sposób DMA rozwiąże wielozadaniowość? No nie wiem, może choćby przez to, że DMA może zająć się "inicjalizacją pewnych urządzeń" kiedy procesor robi coś innego. DMA potrafi trochę mniej niż przerwania ale nie obciąża CPU Czekaj, czekaj... Czy Ty właśnie porównujesz DMA do przerwania...? Co ma kompilator do wielozadaniowości? A czy autor tutaj...
Można spróbować nadać procesowi wyższy priorytet w menedżerze zadań. Generalnie nie testowałem takiej opcji, bo zdecydowałem się takie testy na czas odpowiedzi w transmisji RS232, przeprowadzać za pomocą dodatkowego mikrokontrolera.
W sumie to mam pytanie czy dobrze rozumiem jak to ma działać. Tak skonfigurowany DMA wykonuje transfer raz, w momencie ustawienia bitu ENABLE. Kod z moimi komentarzami (wypisane z DSa). [syntax=c] void DMA_Conf(void) { RCC->AHBENR = RCC_AHBENR_DMA1EN; /* Procedura konfiguracji kanałów DMA 1. Ustawić adres rejestru peryferiów w rejestrze DMA_CPARx Dane...
Kolejny fan MagicNumbers. Zacznij od pojedynczego źródła przerwania a nie 4-stu. Flagę kasuje się na początku przerwania a nie na końcu. [syntax=c]SYSCFG->EXTICR[0]|=0; //ustwienie PA na przerwanie SYSCFG->EXTICR[0]|=(1<<4); // ustawienie PE na przerwanie SYSCFG->EXTICR[0]|=(1<<11); // ustawienie PEna przerwanie SYSCFG->EXTICR[0]|=(1<<15);...
Przerwania które korzystają z funkcji FreeRTOSa nie mogą mieć wyższego priorytetu niż wartość ustalona w pliku FreeRTOSConfig.h. Dodatkowo oczywiście w przerwaniu należy korzystać z funkcji z końcówką "FromISR". http://www.freertos.org/RTOS-Cortex-M3-M... http://www.freertos.org/a00110.html (opis configKERNEL_INTERRUPT_PRIORITY i configMAX_SYSCALL_INTERRUPT_PRIORITY)...
A co jest złego w odczytaniu portu GPIO do zmiennej , zmianie wymaganych bitów i zapisaniu z powrotem do portu wszystkich bitów jedną operacją? 1. Możliwe błędne działanie przy modyfikacji linii jednego portu z dwóch fragmentów kodu o różnych priorytetach (np. pętla zdarzeń i przerwania). 2. Czas wykonania. 3. Rozmiar kodu. Wystarczy?
Wyzwalasz timerem sprzętowo, odbierasz wyniki do bufora przez DMA, po odebraniu bloku o długości, którą sam wymyślisz - przetwarzasz wyniki. Dane możesz pewnie przetwarzać w przerwaniu DMA. Jeśli masz inne, ważniejsze przerwania - obniż priorytet przerwania DMA.
A skąd my na podstawie trzech linijek kodu mamy Ci powiedzieć, co zepsułeś w pozostałych pięciuset linijkach? CubeMX generuje gotowe projekty dla Eclipse, więc nie wiem czemu konwertowałeś projekt dla Eclipse na projekt dla Eclipse, co zresztą i tak nie ma znaczenia dla odpowiedzi na Twoje pytanie. Nie powinieneś w ogóle ruszać priorytetów przerwań....
Nic dziwnego skoro rzutowanie ma wyższy priorytet niż mnożenie to : Kod C - Dzięki gaskoin nie wiedziałem, że rzutowanie ma wyższy priorytet. Funkcje matematyczne typu atan() również już działają :) Mój problem uważam za rozwiązany. Dziękuję Freddie Chopin i gaskoin .
Flagę czyszczę. Kompilator z taką stałą sobie poradzi i ja policzy podczas kompilacji. Nie trzeba constów. W miarę poprawna wartość ilość pomiarów na półokres sugeruje, że timer2 działa tak jak trzeba. Podejrzewam problem z priorytetami przerwań, ale poczekam na kogoś z większym doświadczeniem ode mnie. Może coś poradzi.
Witam, Bawię się STM32F1 bez bibliotek wykorzystując książkę "STM32. Aplikacje i ćwiczenia w języku C" i zestaw ZL27ARM. Jestem przy RTC i udało mi się uruchomić. Ale zastanawia mnie grupowanie przerwań. Czytając post http://www.elektroda.pl/rtvforum/topic23... wywnioskowałem, że można użyć funkcji inline z pliku core_cm3.h Chciałbym testowo...
Początek programu FreeRtos wygląda tak: /* Private define ----------------------------------------... #define LED_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LCD_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define USART_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) #define...
Widziałem w pewnym poscie ostrzeżenia przed or-owaniem, więc pomyślałem, że pisząc całe wartości uniknę problemów. Pokaż linka, sprostujemy (; Przy bardziej zakręconym ORowaniu warto pamiętać o (zwykle zbędnych) nawiasach, żeby nie zastanawiać się niepotrzebnie nad priorytetami - np coś na styl: 0x55 << 3 | 0x12340000 jest równoznaczne temu (0x55...
Temat jest znany już dawna. Wg, również i moich, testów dostępne były diody z czasem resetu ok 9 us oraz 35 us. Prawdopodobnie masz te drugie. A może jeszcze jakiś nowy twór pojawił się na rynku. "Moje" diody resetują się przy czasie powyżej 200µs, więc to jeszcze coś nowszego. Dobrze byłoby dograć tę bibliotekę, by czas resetu był parametrem....
To się przesetań zastanawiać i przyjmij to za pewnik. Dlaczego 8-bitowe stałe do sterowania wyświetlaczem są zadeklarowane jako 32-bitowe zmienne, w dodatku ze znakiem? O priorytetach przerwań proponuję chwilowo zapomnieć - nie myśl o nich i nie ustawiaj ich. Realizację wyświetlania na STM32 znajdziesz w jednym z ostatnich numerów EP.
W bibliotekach od ST znalazłem definicje struktur z takimi rejestrami jak np. ISER, ICER, STIR itp. Nagłówki typu core_cm3.h core_cm4.h itd. nie są częścią biblioteki SPL, tylko częścią CMSISa, pochodzącego od ARM. Spokojnie można korzystać, zwłaszcza do takich rzeczy jak NVIC_EnableIRQ() czy do ustawiania priorytetów. W SPLu chyba też są funkcje o...
Skoro pętla opóźniająca była w porządku to czekanie na wyzerowanie SPI_SR_BSY też. Odradzałbym takie coś jeśli SPI miało by niską prędkość. Jak masz inne ważne przerwania możesz tak ustawić grupy i priorytety, że to bieżące zostanie wywłaszczone i zostaje myślenie tylko o pętli głównej.
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...
Ale Ty tak na poważnie pytasz? P.S. Numeru przerwania nie polecam stosować jako indeksu dla rejestrów ISER/ICER... 4\/3!!
Dla CM3 interrupt latency wynosi 12 cykli i może być zaimplementowane do 256 priorytetów przerwań. Stellarisy mają zaimplementowane 8, STM32 ma ich 16, a LPC17xx ma ich 32. I nie ważne z kiedy ten dokument jest, jest nieaktualny. [url=http://ep.com.pl/files/2085.pdf]Lin... Wtedy był jeszcze na papierze, ale dokumentacja do rdzenia była dostępna. w tym...
Zacznij od wyrzucenia modyfikacji priorytetów przerwań - zostaw wszystkie na tym samym domyślnym Zamiast NVIC_PriorityGroupConfig i NVIC_Init użyj NVIC_EnableIRQ() - usuniesz w ten sposób błędy i skrócisz kod. Ten warunek też jest podejrzany: USART_GetITStatus(USART_Datalink, USART_IT_TXE) == SET) Prościej i poprawnie jest napisać: if (USART2->ISR &...
(at)BlueDraco Z jednej strony piszesz: Funkcji NVIC_Init nie używa się wcale, bo trzeba dużo i bez potrzeby pisać, żeby jej użyć. Jeśli dokładnie nie wiesz, co robisz - nie ruszaj priorytetów przerwań. z drugiej: Jeżeli wskutek radosnej zmiany priorytetów przez nieświadomego programistę wyjątek synchroniczny powstaje podczas wykonywania kodu o priorytecie...
przerwanie powinno być z atrybutem ((interrupt)) oczywiście jest ten atrybut (i tylko ten), jednak nie w definicji tylko deklaracji. Wszystko w Twoim pliku vectors.c. a próby wpisywania wartości 0xFFFE do rejestru SR nie wydają mi się szczególnie mądre. W końcu rejestr ten ma kilka pól które są "reserved" więc nikt nie wie co robią, a poza tym ST pewnie...
Bazowałem właśnie na tym samplu tworząc swój projekt. Z racji braku czasu dopiero teraz powróciłem do tego tematu. Doszedłem do przyczyny lądowania procesora w Hard Fault, otóż w pliku ethernetif.c zdefiniowałem globalny wskaźnik do struktury netif i widzę, że zaraz po inicjalizacji stosu dane z pod tego adresu ulegają uszkodzeniu. Następnie funkcja...
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
Dokładnie tak jak pisze kolega R-MIK. Jak sprawdzałem czas od wykrycia zera do podania sygnału na triak dla uC stm32, to było to około 0,7ms. Więc maksymalny czas załączenia triaka w jednej połówce sinusa to 9,3 ms, więc wystarczająco na dość dokładne sterowanie. Ale dalej nie wiemy co kolega chce z tym robić, więc nie wiemy co będzie lepsze :) Sinus...
priorytet windows huawei priorytet priorytet wiadomości
wymiana pompy pralce bosch wymiana łożysk silnika iplus manager windows
mazda wypadanie zapłonu lodówka daewoo schemat
Test zegarów samochodowych za pomocą Autocom Ustawienie zapłonu w Citroën AX - kopułka rozdzielacza