ADC1_2_IRQHand _ er Chyba koło fortuny się ta gra nazywała (; 4\/3!!
Podczas zapisu do Flash w uC, które mają jeden bank Flash, próba odczytu powoduje zatrzymanie procesora i poczekania do końca zapisu. Nie jest to problemem przy obsłudze przerwań UART, bo czas zapisu jest krótszy, niż czas transmisji znaku przez UART.
No to musisz mieć tablicę wektorów w RAM [; 4\/3!!
Musisz wyzerować flagę, a czy zrobisz to normalnie czy przy użyciu tej bzdurnej biblioteki to już nie ma znaczenia. 4\/3!!
Kolego andrzej_nied, Proponuję zastosować timer do generowania przerwań co około 2.5ms. W przerwaniu testujemy wejścia portów nie zawracając sobie głowy jakimiś 'drganiami styków'. Sprawdzone, pewne, proste. Czas 2.5ms dobrany jest tak aby zwykły enkoder 20-32imp./obrót obracany energicznie ręką nie zgubił impulsu (gdy czas pomiędzy przerwaniami za...
Jeżeli skok jest z przerwania to HardFault jest spowodowany tym, że zmieniasz wskaźnik stosu w obsłudze przerwania.
1. funkcja bez atrybutu interrupt nie odkłada na stos wartości rejestrów które modyfikuje potem w "ciele funkcji" - czy to znaczy, że wartości tych rejestrów są tracone czy też procesor sam z siebie (sprzętowo) je zapamiętuje na stosie przy wejściu w obsługę przerwania? Informacje jak zwykle w dokumentacji rdzenia. Po co są zerowane trzy ostatnie bity...
Spróbuj korzystać z funkcji NVIC_EnableIRQ() oraz NVIC_DisableIRQ(). 4\/3!!
Na samym końcu funkcji której używasz- TIM_TimeBaseInit() - jest wymuszany "update", co powoduje ustawienie flagi przerwania które włączasz. BTW - używasz bibliotek które zostały oficjalnie porzucone przez producenta. Takie był dobre, że stwierdzili, że trzeba to wywalić do kosza bo nic się z tym nie da zrobić [; Miliony ludzi, którzy twierdzili, że...
1. Zbędny atrybut volatile w deklaracji AdcVal. 2. Czy AWD jest jedynym źródłem przerwania ADC? 3. Kasować bit zgłoszenia przerwania należy na początku procedury obsługi przerwania. nie wiem, aj to jest W STM32, ale w wielu innych Cortexach Zgłoszenie przerwania nie zdąży się w takiej sytuacji skasować i powtórnie wejdziesz w obsługę przerwania.
W internecie pisali że w tym pliku się trzyma wszystkie obsługi przerwania, ale jak nie trzeba to ok
Witam kolegów. Nie chcę zakładać podobnego tematu, więc zapytam się tutaj. Czy jeśli mam obsługę I2C na przerwaniach, to jest taka możliwość, aby całkowicie zawiesić STM32 przy wysłaniu z funkcji I2C_CR1_START ? Przy założeniu, że coś jest niedopracowane w obsłudze przerwania ?
Problemem było chyba to, że nie włączyłem globalnych przerwań.
A konkretnie czego nie rozumiesz i nie potrafisz zmodyfikować dla PA2? Zanik zasilania możesz wykrywać w samym mikrokontrolerze. Obsługa przerwania EXTI powinna kasować zgłoszenie - inaczej będziesz się kręcił w przerwaniu.
Zrób wegług opisu z https://forbot.pl/blog/kurs-stm32-f1-hal... Opisany jest tam sposób obsługi przerwania EXTI.
Zapoznaj się z [url=http://mikrokontrolery.blogspot.com... dedykowanym dla STM32.
STM32F10x Standard Peripherals Library - niestety ST wygenerowalo dokumentacje w formie pliku pomocy i nic z tym się nie zrobi - popprzednia wersja biblioteki (2.0) miała to w wersji pdf. Ale to właśnie w tym pliku dokładnie opisane są wszystkie funkcje bilbioteki związane z pracą peryferiów plik stm32f10x_it.c zawiera definicje wszysktich funkcji odnoścnie...
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)....
Przyczyny najpewniej należy szukać w bibliotece do STM32 (FWlib) . Nigdzie indziej. Twoj kod wydaje się być poprawny, aczkolwiek nadal nie istnieje tu taka dusza co by wiedziała, co dokładnie robi Czyżby nigdzie? ...
Domyślny startup może np. źle konfigurować stos/stertę albo nie definiować nazw procedur obsługi przerwań, więc Twoje obsługi mogą się nie wywoływać.
Sprawdzasz flagę sygnalizującą zdarzenie które chcesz obsłużyć. Jeśli jest ustawiona to ją kasujesz i obsługujesz dane zdarzenie. To przerwanie globalne więc służy do obsługi różnych zdarzeń.
Zacznij od określenia protokołu transmisji - w jaki sposób będziesz przesyłał te dane (znakowo/binarnie), jaka jest ich długość, po czym program może je rozpoznać, czy i jak sprawdzać poprawność transmisji. Zastanów się nad strukturą oprogramowania - same przerwania, RTOS, czy (w ostateczności) jakaś pętla zdarzeń? Potem dopiero planuj programową obsługę...
Hej. Czy moglibyście się podzielić jakimś sprawdzonym kodem do obsługi I2C (pooling, przerwania, etc) na STM32, tylko na nowsze rdzenie niż F103 - np. F03x, F3xx, F4xx, etc. Z góry dziękuję.
Skoro plik main.cpp jest plikiem C++, a wektory są funkcjami z C, to handler obsługi przerwania musi mieć ozdobnik `extern "C"`. Wstawiaj kod i logi w odpowiednich znacznikach (code/syntax), bo nie da się tego czytać.
Jeśli chcesz uzyskać minimalny narzut czasu procesora na obsługę wyświetlacza - w ogóle nie czytaj znacznika BUSY, bo jego wyzerowanie nie oznacza gotowości. Obsługuj wyświetlacz w przerwaniu timera. Jakiś czas temu obsługa HD44780 na STM32 w przerwaniu timera była pokazana w EP. A pierwszy błąd w Twoim kodzie jest tu: LCD_EN_bb=0; LCD_EN_bb=1; - wymagany...
Ponieważ PD2 nie da się skonfigurować jako UART5_TX to nie można zrealizować pół-automatycznego zegara. Pozostaje tylko działanie rdzenia lub przesłanie ciągu danych z użyciem DMA do GPIOD->BSRR dla PD2. Odczyt danych z PA15 będzie wtedy synchronicznie ze zmianą stanu pinu PD2. Obsługa w przerwaniu będzie kosztować trochę więcej, ale też jest możliwa....
Zajrzyj do Elektroniki Praktycznej z lutego br. Parę rzeczy masz źle w kodzie. Do przyzwoitej obsługi potrzebujesz trzech kanałów jednego timera STM32, z czego jeden w trybie capture obu zboczy. żadnych innych przerwań ani opóźnień programowych nie trzeba. Timera nie trzeba zatrzymywać ani restartować - chodzi w ruchu ciągłym i sam inicjuje pomiary....
1. Nie wiadomo, co to jest UART_BUFOR - tam jest błąd. 2. Nie sprawdzasz przyczyny przerwania i nie kasujesz znaczników błędów transmisji - procesor może ciągle wołać obsługę przerwania, bo nie znika jego przyczyna.
To znaczy, że skasowałeś znacznik przerwania za późno, i NVIC nie zauważył, że go skasowałeś. Kasuj zgłoszenie przerwania przy wejściu w procedurę obsługi, a nie na jej końcu.
Proponuję Ci zerknąć na ten kod - https://github.com/DISTORTEC/distortos/b... - robi dokładnie to co chcesz osiągnąć i w dokładnie ten sam sposób. Tutaj kod przerwania - https://github.com/DISTORTEC/distortos/b...
Zastanawiam się tylko po co sprawdzać to: [syntax=c]USART3 -> CR1 & USART_CR1_TCIE[/syntax] nie rozumiem powodu. Przecież to jest "This bit is set and cleared by software." Programista nie wie czy ustawił to przerwanie czy nie? Dodatkowo ten zapis: [syntax=c]if(( USART3 -> CR1 & USART_CR1_TCIE) && (USART3 -> SR & USART_SR_TC ))[/syntax] wygląda dość...
Jak wygląda sprawa z przerwaniami? Tam zamiast przerwań są używane callbacki. To nie tak jest. Callbacki są całkiem do czego innego. W programie HALowym, to użytkownik pisze obsługę przerwań sprzętowych (tak jak w klasycznym podejściu "rejestrowym") a specyfiką HAL jest tylko to że dostarcza pewnych gotowców na obsługę przerwań. Przykładowo weźmy uart....
1.Tworzysz Mutexa żeby tylko jeden task miał dostęp do interfejsu SPI I2C ... 2. Tworzysz semafor na dany interfejs. 3. Tworzysz driver do obsługi interfejsu, najlepiej z obsługa przerwań od tego interfejsu. 1. Blokujesz dostęp do interfejsu mutexem 2. Zlecasz driverowi co gdzie ma wysłać lub skąd odebrać. Driver w tym czasie blokuje semafor aż do wykonania...
Użycie wrappera rozwiązało problem - OS ładnie przełącza taski w reakcji na przerwania - przynajmniej na symulatorze. Szkoda trochę, że w Practical Guide nie opisali choćby ogólnej metody tworzenia przerwań pod tym OS.
Podobno można, w każdym razie w HAL jest obsługa I2C przez DMA - wystarczy poczytać. Oczekiwanie na ogół nie jest marnowaniem mocy obliczeniowej, a marnowaniem energii. Obsługę I2C bez oczekiwania można zrobić na przerwaniach - też jest komplet źródeł w HAL. W STM32 obsługa I2C jest dość skomplikowana z powodu szczególnych przypadków transmisji jednego...
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ń
Tak mam, całe mnóstwo, jak wyłączę i wywalę printfy to jest ok, niemniej nie mogę poświęcić całego procka dla odczytu i2c :) Czy Ty chcesz powiedzieć, ze wywołujesz te printfy w obsłudze przerwania? Pozdrowienia, m.ki
Gdzie wywołujesz obsługę USB? Ja miałem problem z wywoływaniem obsługi w przerwaniu i dopiero przeniesienie tego do pętli głównej pomogło. A co do kodu od ST to zrozumienie go jest już na innym poziomie.
Witajcie. Jest taki problem, że przerwanie może się wciąć w dowolnym miejscu. Nawet w środku warunku if. [syntax=c] if(wskaznik != 0 && *wskaznik > COŚ){ wskaznik++; } [/syntax] przerwanie może nam się wciąć i zmienić wartość gdziekolwiek. Jak powstrzymać wywołanie przerwania ale tak by zaznaczało się przyjście przerwania i po ponownym włączeniu obsługi...
Przerwania nie są takim wielkim problemem i również zrzucam je do warstwy "board" - utworzony obiekt po prostu przypięty jest do właściwego wektora i tyle. Mógłbyś rozwinąć temat? Ja na samym początku przerzucam wektory przerwań na początek pamięci RAM. A później wstrzykuję swoją funkcję w miejsce oryginalnego wektora. Tyle, że jeśli chcę zrobić to...
Witam, Chcę obsłużyć kilka kanałów ADC w STM32 z kodem utworzonym w CubeMX. Obsługa polega aby w przerwaniu zmienić konfiguracje kanałów. https://obrazki.elektroda.pl/5406599600_... Zrobiłem teraz obsługę przerwania od ADC, ale nie wiem jak w tym przerwaniu uruchomić sekwencję DMA do odczytu wielu kanałów, które zapisze mi dane odczytane...
Koniecznie i niezależnie od aplikacji, i jest to zarówno ogólna zasada (żeby zmniejstzyć szansę na zgubienie kolejnego przerwania) jak i specyfika STM32 (z powodu opóźnienia w samym kasowaniu i możliwości błędnego powtórnego wejścia w obsługę).
Zupełnie inny układ, zupełnie inne timery obsługiwane przez zupełnie inne rejestry :) I tak, przerwania też trochę inne (nvic).
Jak to zrobić: 1. włączasz przerwanie od timera w NVIC 2. Konfigurujesz timer, żeby generował jakieśtam przerwanie Odpowiedzi na pytania: 1. No bez timera raczej nie zrobisz przerwań co jakiś czas [; 2. Funkcja przerwania po prostu musi nazywać się DOKŁADNIE TAK SAMO jak jest wpisana w tablicy przerwań (zwykle CośtamCośtam_IRQHandler() ) 3. Hę? Przykłady...
Witam W trybie FS możesz mieć mały problem z freeRTOS i USB jeśli chodzi o wysłanie danych z Stm32 do PC. W nim nie masz DMA i żeby wysłać dane musisz albo sprawdzać sam czy pierwsze 64 bajty zostały wysłane i potem wysłać następne (np co 1ms) lub zostawić jak masz zrobione w bibliotece od Stm, czyli oni włączają przerwanie Tx FIFO Empty Interrupt,...
zegar 56 MHz, 5us srednio trwa pobranie wyniku konwersji i zapis go do tablicy. Mierzylem timerem ile czasu zajmie pobranie 100 próbek i zajeło mu to około 500us.Też mnie to zdziwiło że obsługa przerwania trwa tak długo.
Zaczynam zabawę z stm32. Chciałbym obsłużyć USART przez przerwania. Większość przykładów opiera się na stdperiph lib, chciałbym uniknąć stosowania tej biblioteki. Używam tylko nagłówka stm32f10x. Wydaje się że włączyłem przerwanie przez NVIC_EnableIRQ(USART1_IRQn) bit w rejestrze USART1->CR1 również został ustawiony i w zasadzie na tym utknąłem. Prosiłbym...
Hej, nie mogę znaleźć na forum podobnego problemu. Otóż pracuję z mikrokontrolerem STM32F100RB (płytka stm32vldiscovery) i chciałbym wykorzystać przerwanie od USART podczas pracy z FreeRTOS. Problem polega na tym, że nie wiem, w którym miejscu zdefiniować przerwanie. Uruchamiam je funkcją USART_ITConfig(USART2, USART_IT_TXE, ENABLE) i niestety program...
To zanim zabierzesz się za 2 UARTy oprogramuj 1? obsługa takiego UARTu do zaledwie 50 linii kodu z obsługą buforów. Masz przykładu w SPLu skorzystaj. W przerwaniu od obioru nie odczytujesz rejestru DR. Kasujesz flagę na końcu przerwani - błąd. Uporządkuj ten program. Włączenie przerwania TXE i nie obsłużenie go to poważny błąd, zawiesisz się. A jego...
Pokaż nam kod, Hard Fault może oznaczać włączenie przerwania do którego nie napisano obsługi. Na jakim konkretnie STM32 pracujesz i jaką masz płytkę?
Chciałbym tylko nieśmiało zauważyć, że ten programowy arbiter plus obsługa DMA - to więcej kodu niż obsługa transmisji na przerwaniach z buforem cyklicznym bez DMA. ;)
Na koniec wypadałoby jeszcze zmienić temat wątku na np.: Obsługa RTC w STM32F1 - dla potomnych ;-)
Problem rozwiązało właśnie użycie przerwań zewnętrznych. Można w funkcji obsługi przerwania EXTI sprawdzać od którego wejścia pochodzi przerwanie i zliczać impulsy z tego wejścia. Dzięki za pomoc.
A jak wygląda obsługa przerwania (kod) i konfiguracja USARTa? Wyczyść całkowicie USARTx->SR na końcu.
Używanie timera to jest chyba najlepszy pomysł. Niestety moja wiedza pozwala go tylko skonfigurować. Dalsza obsługa w freeRTOS jest narzazie czarami. Czy ktoś jest w stanie podesłać przykładowy kod z obsługa przerwania w RTOS realizujący opóźnienie czasowe ?
Powiedzmy że w obsłudze przerwania od RX czekasz na jakiś 0xA3 Koncepcja jest nie najgorsza pod warunkiem, że w ciągu danych nie występuje 0xA3. Jakby na to nie patrzeć nie skreślałbym jednak timeouta. Szczególnie, że jeśli użyjesz sprzętowego to zbieranie danych możesz zupełnie przerzucić na DMA.
A ja zapytam : czy w tablicy wektorów przerwań znajduje się pod właściwym adresem handler obsługi przerwania od UART4? Bo zapewne nie i dlatego ląduje w DefaultHandlerze. Podejrzewam, że tablicę wektorów masz od STM32 z trzema uartami.
Przycisk jest sprzętowo pozbawiony drgań styków (płytka STM32F3Discovery) Doprawdy? Czyżbyś dołożył coś do płytki DISCOVERY? Mniej więcej co dwa tygodnie piszemy tutaj komuś, że do obsługi przycisków nie używa się przerwań od portów.
Musisz się jednego z nich pozbyć. Albo użyć tego callbacka z HAL-a czyli HAL_SYSTICK_Callback i tam umieść swój kod obsługi tego przerwania. lub jezeli z HAL-a nie bedzie w ogóle korzystał to dodać do definicji w pliku xxxxxx_it.c __weak przed SysTick_Handler Najprościej będzie po prostu usunąć plik stm32l4xx_it.c z kompilacji skoro i tak nie korzysta...
To jest parametr konfiguracyjny systemu - chyba wciąż 1 milisekunda (kiedyś było 10 milisekund). Szukaj w źródłach systemu. A może nałożyć się parę blokad przerwań, będzie dłużej. Na Arduino nie ma systemu, który by blokował przerwania, wszystko jest pod kontrolą programisty, przerwań są po kilka mikrosekund. A STM32 obsłuży parę przerwań w mikrosekundę....
Witam serdecznie, Przerobiłem chyba najbardziej popularny przykład ze strony Freddie'go aby obsługiwać STM32F100RB na płytce STM32VL Discovery wraz z odpalaniem z RAMu i właściwie podstawowa funkcja - czyli nieśmiertelne mruganie diodą - działa wyśmienicie. Jeśli ktoś chce szybko uruchomić swój pierwszy program na STM32 VL Discovery przy użyciu Eclipse...
Nie uważasz przecież chyba, że da się zrobić wydajny i szybki kod realizujący kilka skomplikowanych funkcji przy użyciu 10-ciu linijek kodu, no nie? Poza tym wg mnie taka idea ("nadganianie" DMA w buforze cyklicznym) nie kosztuje nic więcej kodu niż normalna obsługa przerwania, za to ile mniej czasu... 4\/3!!
Owszem CooCox pozwala szybko rozpocząć zabawę z ARM-ami, ale ma też swoje wady. Niedawno postanowiłem przetestować to środowisko i szybko zraziła mnie wada serwera GDB, którą openOCD miało w wersjach starszych niż 0.5.0 (ponad 2 lata temu). Brak automatycznego maskowania przerwań podczas debugowania skutecznie utrudnia śledzenie krokowe programu - nadejście...
To jest stary cod z Atmegi której funkcjonalności nie nie rozbuduje bo nie pozwala na to PCB. Po drugie przy większym obciążeniu obliczeniami pomiarów prądów i napiec stabilność odczytów pozostawia trochę do życzenia. Soory ja potrzebuje sterownik a nie kurs migania diodą. !(at) lat to sporo więc wiedza już wyparowała i się zdezaktualizowała. Dlaczego...
Wyrzuć tymczasowo LCD z obsługi przerwania - nie ma tam (w LCD_WriteText) jakiś opóźnień opartych o inne przerwania (np. systick)? Masz debugger?
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...
1. Dlatego, że w przerwaniu od przycisku musisz zablokować to przerwanie i uruchomić timer, a w przerwaniu timera odblokować z powrotem przerwanie - to zajmuje jakieś z 8 linii kodu i wymaga dwóch przerwań. Obsługa przycisku w przerwaniu timera zajmuje 2 linie kodu i wymaga jednego przerwania dla dowolnej liczby przycisków. 2. Robi się to, kiedy jest...
Pokaż funkcję obsługi przerwania z UARTA. W jaki sposób sprawdzasz że przyszły trzy bajty danych a nie jeden?
W c++ przed funkcjami obsługi przerwań dodaj extern "C" np.: extern "C" void DMA2_Stream0_IRQHandler(void) { ... } Inaczej nie będą wywoływane.
Nie zmieniaj niczego w SCB - domyślne wartości są OK. Rejestr IMR ustawiasz "odwrotnie". Rejestr EMR ustawiasz niepotrzebnie (i "odwrotnie"). Do włączenia konkretnego przerwania użyj funkcji z CMSIS. Funkcja obsługi przerwania powinna mieć odpowiedni atrybut informujący kompilator o jej specjalnym zastosowaniu - "__attribute__ ((interrupt))" 4\/3!!
Zacznij od opisania formatu danych. Po czym odbiorca ma poznać, że zakończono przesyłanie liczby? Tego ne napisałeś powyżej. Odbiór łatwo zrobisz w przerwaniu, pisząc obsługę przerwania w konwencji automatu. Najpierw poczytaj, co oznacza poprzednie zdanie. Potem możesz zacząć pisać automat. Potrzebne tylko dwa stany: - oczekiwanie na 'L' - skanowanie...
Moim zdaniem konfiguracja DMA jest trochę niepełna, a ponadto brakuje obsługi przerwania od DMA. Przynajmniej w jednym miejscu wpisz jawnie wartość do rejestru sterującego (CR = ...). Na razie wszędzie masz |= lub &=. Zakładając, że pierwszy transfer poleci i przerzucisz 19200 słów, to później DMA się zatrzyma i nic więcej nie prześle. I jak to ma coś...
:) Kto szuka nie (ten) błądzi. Dzięki za cierpliwość. Na chwilę obecną przyjmę to za pewnik. Temat jednak pozostawiam otwarty. Jeśli ktoś z czytelników rozumie mą rozterkę i potrafi mi wyjaśnić dlaczego tak a nie inaczej...to proszę się nie krępować :D PS Szczerze mówiąc dziwi mnie trochę to, że Ciebie jako fana logiki nie zastanawia pozorna bezsensowność...
To już chyba wina złych deskryptorów lub ogólnie złej obsługi USB. Jak wchodzi w przerwanie od USB tzn, że program działa ok, ale coś w obsłudze/deskryptorach pokopałeś.
Odnośnie inicjowania liczników, pole struktury TIM_Period w jakim związku pozostaje z okresem wykonywania przerwania powstającego od kanałów licznika. Zauważyłem że wartośc tego pola nie zawsze ma wpływ na okres wyzwalania przerwań. Chyba że coś pochrzaniłem.
To chyba nie wina stosów. Jest różnica nazewnictwa funkcji obsługi przerwań pomiędzy FreeRTOS a biblioteką CMSIS. U mnie w identycznej sytuacji pomogło dodanie do pliku port.h (z katalogu SOURCE/portable/gcc/ARM_CM3) tych linijek: // To be complaint to CMSIS and ST standard peripherals library name convention. #define vPortSVCHandler SVC_Handler #define...
Zupełnie źle. Kodujesz dane do transmisji SPI (każdy bit zapisujesz jako trzy bity o wartościach 100 albo 110), a następnie wrzucasz to przez DMA na SPI. SPI musi działać z częstotliwością ok. 2.5 MHz, czyli procesor musi być pędzony np. na 40 MHz, bo w STM32 nie masz dowolnych podzielników częstotliwości przy SPI, tylko potęgi dwójki. W ub roku był...
Ja bym sugerowował, żeby zmienić w tym przykładzie zerową wartość 'main stack size' na różną od zera, bo osoba przechodząca od migania LED'em (który działa) na obsługę przerwań, ma problem z ich poprawnym działaniem - przy zerowym stosie obsługa przerwania ląduje w Default Handler i człowiek się dziwi co nie tak zrobił. Osoba początkująca może mieć...
Trzeba dodatkowo włączyć taktowanie bloku przerwań. Wstaw np. zaraz przed while(1) RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); Jak dojdziesz do timera to też dodatkowo trzeba włączyć taktowanie RCC_APB2PeriphClockCmd(RCC_APB2Perip... No wreszcie udało mi się uruchomić te przerwania zewnętrzne, brakowało właśnie...
Pochodzi od czujnika przerwania wiązki, drgań styków nie ma : ), znalazłem że czyszczenie flagi przerwania powinno być na początku, ale to niestety nie pomaga, i nadal pozostaje problem z wykrywaniem obu zbocz a nie tylko jednego Dodano po 10 Przeszukałem forum, kilka kursów po polsku i angielsku i ten kod z pierwszego postu jest identyczny jak te z...
Bardzo dziękuję za odpowiedzi. Skonfigurowałem piny PA2 i PA3 jako UART2, aktywowałem przerwania. Jak debuguję, to obsługa przerwania następuje z klawiatury komputera, lecz z klawiatury MIDI podłączonej do mikrokontrolera nie ma już żadnej reakcji. Mam podłączony MIDI shield do pinu Rx. Jak mogę przesłać tę wiadomość MIDI do mikrokontrolera? Czy idę...
Nie pamiętam co wyzwala TXa - poprawny koniec poprzedniej transmisji, czy wolne miejsce w skrzynce? Jak to drugie: włączyć. I niech sobie dane z bufora okrężnego zaciąga. Byle tylko wskaźnik do komunikatu był wspólny w przerwaniu i obsłudze bufora. Jeśli to pierwsze: przerwanie->on, wartość pierwszej ramki do bufora, buffer_ptr++, wyjście z funkcji....
Nie widzę obsługi przerwania USART, które jest aktywne. Zgaduję, że procesor grzęźnie w pętli domyślnej pustej obsługi przerwania. Zamiast bezsensowynch wygibasów z wypełnianiem struktury danych i wołaniem NVIC_Init() ten sam efekt osiągniesz prostym wywołaniem NVIC_EnableIRQ(USART2_IRQn);
W prawdziwym systemie na ogół potrzebujemy coś robić (np. sprawdzać stan guzików, czujników, wyliczać sterowania dla urządzeń) z częstotliwością dużo większą niż częstotliwość migania diod sygnalizacyjnych. W takiej sytuacji mnożenie przerwań od timerów może powodować zwiększenie czasu reakcji lub rozrzutu czasu reakcji na przerwania, co często jest...
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Cześć, Przed uruchomieniem planisty vTaskStartScheduler(); działa moja funkcja, która obsługuje przerwanie od SysTicka. Po jego włączeniu podejrzewam, że freeRtos sobie jakoś zmienia ten wektor, tylko nie mogę zlokaliwoć jak to robi i gdziej est nowa funkcja obsługi tego przerwania. SysTick jest mi potrzebny do taktowania fatFSa.... Jak to można rozwiązać?...
Mowa była o eliminacji drgań styków. Przycisk, przekaźnik, mikroswitch, kontaktron - bez różnicy. Każdy ma pesymistyczny czas drgań nie mniejszy niż 5 ms, do każdego stosują się te same zasady, można tylko regulować czas. Do żadnego nie nadają się przerwania*. * - od każdej reguły są wyjątki, możemy pokazać, że w pewnych sytuacjach należy użyć przerwań....
Arduino to kobyła, na rejestrach traciłbyś mniej-więcej połowę czasu na pracę w ten sposób. A pozostaje jeszcze nakładka od arduino, inne źródła przerwań i obsługa wejścia ;) Ewidentnie masochizm, zwłaszcza jeśli chodzi o zwykłe machanie pinem. Nie prościej zrobić wstawkę w c/asm ? 6 linijek kodu i zapominasz o tej sprawie.
Tego nikt nie wiem, Sprawdź. Może włączyłeś przerwanie, zapomniałeś dodać obsługi. Nie bawmy sie w zgadywanki, tylko zapoznaj się z własnym kodem.
Czy mógłbym kogoś z was przejrzeć o sprawdzenie mojej tablicy i skryptu linkera i obsługi przerwania.. bo patrzę na to już któryś dzień z rzędu i nie wiem gdzie jest błąd. Pliki są w załączniku. Będę wdzięczny
Kilka dni temu wkleiłem kod inicjowania timera w STM32, zresztą podobnych przykładów znajdziesz całe mnóstwo. Bez SPL byłoby to 5 linijek kodu. Preskaler powinien mieć wartość o 1 mniejszą.
Format ramki wygląda na zaprojektowany specjalnie dla utrudnienia odbioru - patrz np. p.3 Twojego algorytmu. Proponuję wprowadzić znacznik początku ramki, a po nim np. bajt długości i zanegowany bajt długości - w ten sposób masz proste wykrywanie początku na podstawie 3 kolejnych bajtów. Potem mogą być dane i jakaś suma kontrolna albo CRC8 Obsługę przerwania...
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...
Na tego typu problemy jest jeden prosty sposób, wielokrotnie dyskutowany na forum: automat w przerwaniu UART. Jeśli ma być wykrywana "przerwa w transmisji" najpierw trzeba zdefiniować, co to jest ta "przerwa". Jeśli "przerwa" - to brak nowych danych przez czas np. potrzebny na transmisję jednego bajtu - UART potrafi takie coś wykryć w sprzęcie. Jeśli...
żadna funkcja biblioteczna nie ma powodu, żeby ruszać rejestr VTOR - inaczej rozsypałaby obsługę wyjątków. żaden "normalny" program (nie-bootloader) też nie powinien go ruszać. Wyrzuć/zakomentuj operację na VTOR w pliku setup i po kłopocie. Nie korzystam z SPL, dzięki temu używam najtańszych wersji układów z najmniejszą pamięcią i nie mam problemów...
Macie rację, tylko wyobrażam sobie sytuację w której w momencie wysyłania bajtu/bitu UART przez DMA pojawia się konieczność ustawienia nowej wartości dla PWM(o której pisałem wcześniej). I tylko to mnie zastanawia, czy da się wszystko zsynchronizować? Czy dobrze zakładam, że trzeba dać wyższy priorytet dla obsługi przerwania od ADC dla wyliczenia nowej...
Aplikacja ma być ładowana do pamięci read-only i startowana poprzez resetowanie procesora - więc musi być odpowiednio do tego zbudowana - w szczególności, pod adresem, od którego procesor startuje, musi być instrukcja skoku do części startowej programu. Procesor MicroBlaze - przy domyślnej konfiguracje reset powoduje rozpoczęcie wykonywania kodu od...
Mam następujące zadanie; stworzyć projekt na laboratoria z mikroprocesorów. Męczę się z tym już od początku semestru i szczerze nie mam pojęcia gdzie robię błędy. Liczę na moc internetu i oczywiście odpłatnie na pomoc. Pełna specyfikacja projektu: 1. Komunikacja z komputerem za pomocą interfejsu USART z buforem kołowym. 2. Zaprojektowanie i implementacja...
To co wkleiłeś nie jest nawet poprawne składniowo (w ogóle się nie skompiluje), więc jakiej pomocy oczekujesz? Dodam jeszcze że jak widzę kolejne pytanie w tym miesiącu z klawiszem i przerwaniem to mnie już mdli. Poczytaj 1e6 wątków o obsłudze klawiszy na tym forum. Z tydzień temu było dokłanie to samo
W moim przypadku to wygląda tak, że mam wypracowaną własną warstwę abstrakcji sprzętu. Przykładowo do SPI jest maszyna stanów co mieli strumień bajtów danych + nagłówek z kolejek (typu FIFO jako bufor cykliczny). Pod to callbacki do sprzętu (open, write, read, close, ioctl), i rybka czy w środku jest if (queue) wyslij czy na przerwaniach. Nagłówek zawiera...
stm32 przerwań stm32 wyłączenie przerwań obsługa przerwań bascom
transformator halogenowy zmienne sterujacy samsung pendrive zniknął
wyszukiwanie parametryczne brother zacięcie papieru
Toilet Not Flushing: Dual-Flush Buttons Work, No Water in Cistern – Fluidmaster, R&T, Torbeck Fill Valve Issues Błąd ETC F166 w pojazdach Iveco - przyczyny i diagnostyka