Musisz je znowu aktywować. Konfigurację UARTa można zostawić z HALa, jednak samą obsługę przerwań lepiej zrobić na rejestrach. Jak je ponownie aktywować ? HAL_UART_Receive_IT
Trzeba pewnie włączyć jeszcze globalne zezwolenie na przerwania, tylko nie mogę się tego doszukać w RM. Domyślnie przerwania są globalnie "odblokowane". W przeciwieństwie do poszczególnych przerwań, więc jest taka funkcja NVIC_EnableIRQ() czy jakoś tak. P.S.1. Nie musisz deklarować przerwania na górze, przed main(), bo i po co? P.S.2. W obsłudze przerwania...
Quiz pod tytułem znajdź problem widoczny z daleka: RCC->APB2ENR|=(RCC_APB1ENR_TIM14EN);//wl... zegar tim14 4\/3!!
Czytaj Reference Manual dla danego procesora. Czy masz ustawiony bit RXNEIE?
Wywołanie `portEND_SWITCHING_ISR()` _KOŃCZY_ przerwanie i powoduje powrót do głównego programu (*). Jeśli wiec obsługę przerwania dałeś "za" tym makrem, to przerwanie nie jest obsługiwane. W efekcie wywołuje się w nieskończoność. Dla łatwiejszego debuggowania, po prostu ustaw oczekiwanie na semafor z timeoutem, a dodatkowo _MIGAJ_ diodami zamiast tylko...
Włączasz stosowne porty w RCC?
Ściągnij z mojej strony przykład dla STM32 (którykolwiek), to zobaczysz jak to jest zrobione i jak powinno być zrobione... http://www.freddiechopin.info/pl/downloa... 4\/3!!
W pliku startup_xxxxx.s
0x20000808: 40013800 0000202c 000020ac 4001380c f5faffff 08000221 0800 1 148 21000000 Pod adresem 0800 1 148 w pliku lss mam: ldr r3, =__data_end 800 0 148: 4b0e ldr r3, przyjrzyj się dobrze (; 4\/3!!
na pewno GPIO, RCC i NVIC jest do przepisania Co w NVIC może się zmienić? Poza numerami przerwań, które w postaci symbolicznej i tak powinny być identyczne, nic innego nie przychodzi mi do głowy... 4\/3!!
Dopisz coś takiego: [syntax=c]... TIM2->ARR = 6550; TIM2->EGR = 1; //bit UG TIM2->CNT = 10; ...[/syntax]
A gdzie masz ustawienie bitów SW na PLL w RCC?
Po ponad tygodniowej przerwie STM32 znowu zagościł na moim biurku. Aktualnie walczę z Timerem, na szybko skonfigurowałem go tak aby odliczał do góry, teraz chciałbym aby było z niego wyzwalane przerwanie. Z tego co wyczytałem w przeróżnych manualach udsotępnianych przez STM trzeba to zrobić w rejestrze ISERx, pytanie tylko co podstawić za x i pod którym...
Problem dotyczy wyłącznie STM32F1. Racja. Wszystkie od F2 mają sprzętowo ustawiony na 1. F1 nie. Fakt że F1 już od dawna nie używam.
Jak się bawisz Keilem, to prześledź sobie działanie programu w symulatorze jak nie masz debuggera. Zobacz też czy masz zdefiniowane przerwanie od systick i co ono robi, jak nie grzebałeś nic w pliku konfiguracyjnym, to z automatu on jest włączany na wartości domyślne.
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Btw. dlaczego atrybyt "interrupt" jest zbędny i powiększa kod? Dla Cortexów to co robi ten atrybut (zapewnienie wyrównania stosu do 8 bajtów) da się zrobić sprzętowo. W większości Cortexów jest to domyślnie włączone, w przypadku STM32F1 trzeba sobie to akurat włączyć przy użyciu takiej oto linijki "SCB->CCR |= SCB_CCR_STKALIGN_Msk;". Ponieważ atrybut...
Zgadza się - tak właśnie się to robi.
Witam A jak masz ustawione priorytety przerwań? Przypadkiem przerwanie od DMA nie wywłaszcza Ci przerwania od DCMI? Proponował bym sprawdzić Status Register w przerwaniu DMA, co jest źródłem przerwania, sam ostatnio miałem taki przypadek, że mimo tego, że nie włączałem przerwania od Start Conversion[SC] a jedynie End Conversion[EC] w ADC, kiedy ADC...
Hmm na początek może spróbuj coś prostego, spróbuj tak ustawić Timer żeby działał ci na jedno zbocze i np narastające w trybie InputCapture i generował w tym momencie przerwanie, a ty każdorazowo będziesz sobie zliczał (dodawał +1). Podpowiem tobie że Ciebie Timer15 posiada 2 kanały i może wygenerować dwa przerwania, spójrz sobie na stronę 377 w RM0041.
Przesada, jeśli przycisk nie wisi na zakłócanym kablu - wystarczy porównywać stan bieżący z poprzednim w odstępach większych niż czas drgań (co 10..20 ms). Jeśli wisi na zakłócanym kablu - próbujemy z max. okresem zakłóceń/drgań (co większe) i patrzymy na trzy kolejne stany, "poprawiając" stany 101 na 111 i 010 na 000. Wykrywamy stany 011 i 100 jako...
if( EXTI_GetITStatus( EXTI_Line5 != RESET ) ) Przyjrzyj się dobrze. 4\/3!!
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...
// Interrupt mask register, that EXTI lines are active: 0 and 1 EXTI -> IMR = EXTI_IMR_MR0; //A0 EXTI -> IMR = EXTI_IMR_MR2; //C2 Druga linia kasuje to co zrobiła pierwsza. Przy okazji łatwiej by było jakbyś napisał DOKŁADNY opis problemu, bo tak naprawdę to nie wiadomo co Ci nie działa. Dodano po 1 __attribute__ ((interrupt)) void EXTI0_IRQHandler(void)...
Przez czas jak pisałeś te dwa posty już ze 4x przejrzałbyś CAŁĄ listę przerwań, bo nie wiem skąd założenie, że koniecznie muszą być po kolei. P.S. Co złego jest w funkcji z CMSISa robiącej to samo co Ty tylko czytelniej? Przy okazji jak być jej użył, to nie robiłbyś zupełnie bezsensownego ORa... P.S.2. Funkcja z CMSIS jest typu inline - nie da się tego...
Witam, W przypadku wykorzystywania przerwań EXTI trzeba włączyć zegar dla AFIO RCC_APB2Periph_AFIO. Cytat z STM100xx Referene Manual (RM0041, rozdział 7.4 pierwsza notka) To read/write the AFIO_EVCR, AFIO_MAPR, AFIO_MAPR2 and AFIO_EXTICRX registers,the AFIO clock should first be enabled. Więc aby poprawnie skonfigurować przerwania EXTI (zapis do rejestrów...
Sporo się namęczyłem, zanim ruszył mi slave transmitter w STM32F103. W 107 będzie tak samo. Po pierwsze zobacz do errat - tam między innymi napisali, że przerwanie i2c musi mieć najwyższy priorytet, bo inaczej się wiesza. Poza tym przykłady nie zadziałały mi od razu, a problemy mają też inni, o czym możesz poczytać na main.c // main.c main()...
Zewnętrzne przerwania nadają się - przykładowo - do obsługi pinów sygnalizacyjnych z innych układów scalonych, a nie do zabaw z przyciskami. To po prostu nigdy nie zadziała... Zrób sobie przysługę i odczytuj po prostu wszystkie piny w okresowym przerwaniu od timera (co 20-50ms, albo i rzadziej) i będzie wtedy działało perfekcyjnie.
Przerwanie bym raczej właczył przed odpaleniem DMA. Odbiór przez DMA to raczej tylko w przypadku kiedy masz zawsze tę samą ilość danych. nie wiem jak w Twoim przypadku bo nic o tej "ramce" nie piszesz. Rozmiem że ma dokładnie 30 bajtów. Jezeli ma więcej lub mniej o choćby jeden bajt to Twój algorytm nie zadziała. - jezeli mniej np o 5 bajtów to odbierze...
Co robi funkcja send_uintUSART2? Nazwa sugeruje, że raczej nie wysyła znaków. Pomysł z nadawaniem z aktywnym oczekiwaniem i odbiorem w przerwaniu zajeżdża amatorszczyzną, ale czasami działa. Za to brak zabezpieczeń przed przepełnieniem bufora odbioru to już poważny błąd.
W kodzie przykładu zakomentowałeś wywołanie SystemInit. Zapewne używasz SystemInit wziętego z Twojego środowiska, która to proceduira programuje PLL i ustawia częstotliwość zegara (zgaduję że) na 24 MHz. Zakomentuj SystemInit, który masz, odkomentuj ten pusty i wszystko będzie OK.
Wracając do tematu, czyli STM32F4DISCOVERY rozpoczęcie programowania. Chciałem sprawdzić działanie FPU wykonując proste dodawanie, mnożenie itd. float'ów w przerwaniu od timera. Ku mojemu zdziwieniu przy każdym wykonaniu instrukcji na float'ach wywala mi HardFault. Gdy wyłączyłem w opcjach korzystanie z FPU wszystko hula. Używam Keil'a w wersji dla...
można jeszcze jedno z definicji ustawić z atrybutem "weak" Po co? ale pewnie wymagałoby to dodatkowego uzasadnienia oraz dodatkowej opcji kompilacji, a właściwie chyba linkera... nie wymagałoby
Witam. A jak nie włączysz przerwań i sprawdzasz flagę [syntax=c]if (CAN1->RF0R & CAN_RF0R_FMP0) { // tu jak coś jest z CAN1 }[/syntax] To odbierasz coś.. Pozdrawiam
Też nie bardzo wiem jaka jest nazwa (wektor) funkcji tego przerwania, więc mam tak: Przecież wystarczy zajrzeć do tablicy wektorów i wszystko stanie się jasne... Można też zajrzeć do manuala, aby dowiedzieć się, że system CSS jest zmapowany na przerwanie NMI. Nie wiem czy czekanie na odpowiedź na forum jest naprawdę szybsze... 4\/3!!
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,...
No to masz 4-bajtowy znacznik początku ramki, w dodatku niejednoznaczny, tylko po co? Przy automacie masz zmienną - stan automatu, którą elegancko robi się jaku enum, a dalej switch zapewniający obsługę kolejnego bajtu i przejścia pomiędzy stanami. Do obsługi tego początku, jaki masz, potrzebujesz czterech stanów automatu (piąty stan to odbiór danych)...
Trochę jestem zmęczony i nie pomyślałem. Podpiołem teraz ten moduł rs232 pod starą płytkę z stm32f103 - bez problemu mogę wysyłać dane na pc'ta. Tylko mam problem z odbieraniem danych - nie wiem czy to przez remapowanie pinów coś nie działa czy co. Więc to na pewno zasilanie było przyczyną nie działania układu. Dodano po 30 Miałem nieskonfigurowane...
to chwyć zakładkę edytora i przesuń utworzysz nowy okno edytora.
Sprawdź najpierw pochodzenie tego zera. Najlepiej w terminalu jak Ci pisałem. Moje podejrzenie jest takie, że jak wysyłałeś przez putst() było OK, bo on eliminował zero na końcu Twojego "stringa" char dataBuff wychodząc z funkcji. To zero pojawia się w tablicy niejawnie, ale tam jest. Gdy uruchamiasz DMA nie bierzesz pod uwagę, że tablica ma rozmiar...
typedef char t_Ramka[6] t_Ramka RamkaA[85] albo zdefiniuj jako unia
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...
Domyślnie są wyłączone, a co robi z nimi SPL - to już tajemnica jej twórców. Rozsądni ludzie nie korzystają z bibliotek typu SPL, a jeśli korzystają - to nie używają nadmiarowych wywołań, które mają za zadanie wpisać do rejestru to samo, co już tam jest. Poprawne zainicjowanie UART bez SPL - to jakieś 4..5 linijek kodu. ClearITpendingBit jest bez sensu...
Damian w kwestii wyjaśnienia: Miej na uwadze to, że przez terminal na RAZ możesz wysłać tylko 8 bitów. Więc jeśli wysyłasz liczby jako znaki (a tak jak widzę jest) to nie ma znaczenia czy wpiszesz 2357932956793425607456792356735673457375 czy pojedynczo będziesz wysyłał 2 3 5 ... bo terminal i tak każdy znak będzie wysyłał pojedynczo. Przeanalizuj mój...
No to sobie napisz program który będzie stopniowo zmnejszał ARR i obserwuj oscyloskop. Zrób przerwanie przy wystąpieniu błędów DMA. Wyciągnij wnioski oczywiście można używać innych ale po co jak są te. Przy okazji są one mocniej związane z DAC.
Kosztem dokładności możesz zrobić to na jednym wspólnym 2-kanałowym timerze i przerwaniu EXTIi (oddzielnym dla każdego czujnika). Dwa kanały służyłyby do odmierzania czasu impulsu startowego i kasowania czujnika - wymuszenia kończenia pomiaru, a okres timera wyznaczałby cykl pomiarowy do kolejnego przeglądanai czujników.
Akurat nie, bo w portach z maskowanym dostępem operacja logiczna jest wykonywana w samym rejestrze portu, a nie w sterowniku szyny, więc nie ma tu r-m-w. Nigdzie nie pisałem, że BitBand jest zły. Napisałem tylko, że niekoniecznie nadaje się do zerowania znaczników przerwań w rejestrach peryferiali, tym bardziej, że ten sam efekt można osiągnąć przez...
Wskazówka: zostaw biblioteki. Wtedy będziesz wiedział, które bity wpływają na priorytet wywłaszczania. Być może wartości, które ustawiasz w polach PreemptionPriority, w ogóle nie wchodzą na najbardziej znaczące 3 bity priorytetu w rejestrach NVIC, a tylko te 3 bity decydują o wywłaszczaniu. Skąd wiesz, że nie ma wywłaszczania?
Albo stos, albo watchdog.
Ok. Przeszukaj pliki w swoim projekcie po nazwie "SysTick_Handler". Znajdziesz tą nazwę w pliku asemblerowym (lub w pliku *.c) w tablicy wektorów przerwań. Ta tablica zawiera między innymi adres funkcji o nazwie SysTick_Handler. Linker umieszcza tablicę pod odpowiednim adresie w pamięci (zgodnie z datasheet procesora).
Samo się zapamiętuje - przerwanie zgłoszone jest "zgłoszone" dopóki go nie obsłużysz (albo ręcznie nie "skasujesz"), wcale nie musi być wciąż "fizycznie" w jakimś stanie. Ok, jakas flaga sie pojawia, ale jesli obsluguje takie z wyzszym priorytetem, to nizsze czeka. To nizsze niech bedzie czujnikiem zalania. Wody przybywa, czujnik ciagle to sygnalizuje,...
Nie wiem czy są ustawione dobrze. Ale wiem że to nie one są tutaj problemem. Wysyłanie jest niezależne od filtrów.
Prawdopodobnie o żaden konkretny tylko o samo porównanie. Prościej więc po prostu programowo sprawdzać ten warunek (w końcu wartości pewnie też będą generowane programowo). A co do Timera to faktycznie on tylko porównuje na równość (==). Więc na nim tego nie zrobisz.
Może zbyt namieszałem. Zasadniczo chodzi po prostu o to jak stworzyć projekt w SW4STM, który nie zawierałby tych wszystkich śmieci z SPL i HAL i dało się pisać na rejestrach. Taki czysty podstawowy projekt pod rejestry z tylko niezbędnymi rzeczami jak w przypadku pisania na AVRy. Ja robię to tak: I. Potrzebne narzędzia: 1. System Workbench for STM32...
W przerwaniu przydałoby się kasowanie flagi od przerwania (rejestr EXTI_PR)
Wg. dokumentacji uC w takiej konfiguracji powinno nastąpić przy stanie licznika 0, czyli wszystko się zgadza. Co to znaczy "zablokowanie przeładowania licznika" oraz że licznik "ma się zatrzymać, ale nie wyłączyć"?
Czy kodek dostaje je z częstotliwością 44100 a więc od razu wypycha je na wyjście? tak W takim razie kiedy przychodzi przerwanie od I2S? Myślałem, że jak opróżni mu się bufor? Ile bitów powinienem wysyłać w 1 przerwaniu? 16 czy 32? (16bitowe próbkowanie).
Niestety nie wiem, jak skonfigurować przerwanie zewnętrzne, gdyż nie mogę nigdzie znaleźć pod która linie EXTI jest ono podłączone. Manual, rozdział 26.5 RTC interrupts .
Nie da się wywoływać przerwań co 1 us, bo jest to czas porównywalny z czasem wejścia i wyjścia z obsługi przerwania. Przyzwoitą obsługę DS1820 można zrobić na jednym timerze z trzema rejestrami compare - masz wtedy maksymalnie trzy przerwania na bit. Poszukaj w sieci przykładu obsługi OneWire dla LPC1114.
Załóż nowy to podyskutujemy (; 4\/3!!
A czy da się to w ogóle zrobić? Za ref. manualem do F3: EXTI3 Nie napisali nic o kilku źródłach jednego przerwania. Pzdr.
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Odpowiem może "wierszem" - poniżej dosyć dobrze przetestowane przerwanie od SPI występującego w STM32F4: https://github.com/DISTORTEC/distortos/b... A tu funkcja nadawania: https://github.com/DISTORTEC/distortos/b...
A nie widzę nigdzie innego użycia przerwań niż tylko przy wciśnięciu klawisza klawiaturki. Przerwania zewnętrzne mają wyjątkowo ograniczone zastosowania. Nadają się np. do tego, żeby obsługiwać sygnały od innych układów scalonych, świadczące o tym że dany układ ma coś ciekawego do powiedzenia. Do przycisków nadają się wyjątkowo słabo, bo żeby to działało,...
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,...
http://4programmers.net/C/Volatile , kolejność jest taka język c i konsola na kompie , a później mikro kontrolery , bo będziesz się bujał z takimi głupimi błędami
Nie. Często do bloku SPI/I2S możesz podać tylko zegar z głównego oscylatora lub wygenerowany przez PLL. Musisz sprawdzić w Refrence Manul czy masz dostępny dedykowany pin I2S_CKIN (w STM32F4 chyba jest). Oczywiście w popularnym zastosowaniu nie ma to większego znaczenia natomiast przy Audio HiFi, HiEnd gdzie wymagany jest mały jitter i dokładne zegary...
OK! FatFs działa, dzięki za pomoc. Okazało się, że faktycznie FatFs wskazywał odczyt sectora 0x800, ale moja funkcja SD_ReadBlock czytała z określonego offsetu (0x800), a nie z 0x800*512, na co zwrócił mi uwagę Grzegorz. Po dodaniu mnożenia adresu razy 512 w funkcji SD_ReadBlock wszystko zaczęło działać i poprawnie komunikować się z komputerem. Powstaje...
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.
Będzie tak jak piszesz. Przerwanie po doliczeniu do 999 po czym zerowanie licznika i liczy od nowa
Spróbuj z HAL i kodem który generuje CumeMX. HAL raczej nie jest godny naśladowania ale na początek bardzo dobry (jak Arduino).
Zacznijmy od tego, że problem wynikał stąd, że zmienna współdzielona przez przerwanie i wątek główny miała będą deklarację, bez atrybutu volatile. Jeśli przeniosłeś deklarację do procedury przerwania, atrybut volatile stał się zbędny. Po kilku wpisach na ten temat nawet nie zadałeś sobie trudu, by sprawdzić o co chodzi i wciąż błądzisz. Popatrz w startupxxx.s,...
Ten temat może pomóc w rozwiązaniu tej zakręconej kwestii http://www.elektroda.pl/rtvforum/topic14... pozdr.
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...
Nie będę głębiej wnikał, bo dopiero zabieram się za ARMy, ale to: http://www.stm32.eu/index.php?option=com... może coś ułatwi, gotowy projekt, który sprawia wrażenie prostszego.
[syntax=c] RCC->APB1RSTR |= RCC_APB1RSTR_TIM2RST; //* [/syntax] ..... [syntax=c] NVIC->ICPR[0]=TIM2_IRQn; // * NVIC->ISER[0]=TIM2_IRQn; [/syntax] od tego jest CMSIS i jest całkowicie źle. [syntax=c]TIM2->SR &= ~TIM_SR_UIF; [/syntax] Nigdy na końcu przerwań. Unikałbym operacji read-modify przy zerowaniu flag. A to, że program niby nie...
No to szukaj błędu w ustawieniach zegara - skąd bierzesz przebieg wejściowy, częstotliwość (sprawdź czy dobrze ustawiona w module startowym), wywołanie SystemCoreClockUpdate itp... Prosty test: zaprogramuj timer i procedurę przerwania od niego an miganie diodą z częstotliwością 1Hz i zmierz sekundnikiem czas np. 60 mignięć.
I właśnie dlatego Twoja procedura jest widziana pod zupełnie inną nazwą. extern "C" przed deklaracją procedury, ale skoro zadajesz takie pytania - to nie wiesz zbyt wiele o C++, więc może lepiej pisz takie rzeczy w C.
To działa: [syntax=c] #define Port_USART3 USART3 #define Port_USART3_CLK RCC_APB1Periph_USART3 #define Port_USART3_TX_PIN GPIO_Pin_10 #define Port_USART3_TX_GPIO_PORT GPIOB #define Port_USART3_TX_GPIO_CLK RCC_AHB1Periph_GPIOB #define Port_USART3_TX_SOURCE GPIO_PinSource10 #define Port_USART3_TX_AF GPIO_AF_USART3 #define Port_USART3_RX_PIN GPIO_Pin_11...
Popularne stm32f103 lub wg. potrzeb może być coś mocniejszego z rodziny f2,f3,f4...
najpierw włącz SYSCFG potem ustaw który port potem reszta.
Problem tkwił w innej nazwie funkcji przerwania od DMA dla kanałów 2 3 zdefiniowanej w pliku startup.s dla środowiska Keil i STM32CubeIDE.
Witam, właśnie zacząłem przerabiać kurs ze strony http://forbot.pl/blog/artykuly/programow... układ na jakim pracuje to stm32f103c8t6 w środowisku Eclipse. Niestety moja nauka stanęła na przerwaniach od przycisku. Mianowicie mimo wciśnięcia przycisku przerwanie się nie wykonuje. Kod programu: http://obrazki.elektroda.pl/8705005600_1...
Tworzenie projektu w CUBEIDE od nowa i wklejanie src/inc wydawało mi się ostatecznością, z której nie chciałem skorzystać (duża liczba projektów), tymbardziej skoro jest udostępniane narzędzie w postaci konwertera, z którego powinno wszystko działać, więc skorzystałem: https://www.st.com/resource/en/user_manu...
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...
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...
Audio Serial Data Bus Supports I2S
... http://obrazki.elektroda.pl/5529716100_1...
Jak dla mnie brakuje w ogóle funkcji do obsługi przerwania: [syntax=c] void DMA1_Channel5_IRQHandler(void) { }; [/syntax] więc powinieneś dostać dodatkowo HardFault.
Możesz dać gotowca jak masz i przeanalizuje to. Gotowca (źródła), który działa prawie identycznie (inne częstotliwości migania ale to drobny szczegół) jak Twoje założenia projektowe, masz u siebie na dysku. Jest to program demo wgrywany fabrycznie do płytek Nucleo i znajduje się w repozytorium programu STM32CubeIDE. Gdzie akurat u Ciebie na dysku jest...
Twoje problemy rozwiązałby jakiś TMS320 z serii C2000. Ale to tylko moje dywagacje. Jeśli chodzi o STM32F4 to musisz przemyśleć czy rzeczywiście 4 MHz jest niezbędne dla ADC. Kiedyś bawiłem się timerami w Keil'u więc kod wstępny na pewno Ci się przyda (kanały timera3 działają na GPIO->C6-C9): odznacz NVIC_EnableIRQ !!! ): [syntax=c]void TIM3_IRQHandler(void)...
TIM1 może generować żądanie DMA lub przerwanie co określoną liczbę okresów, niekoniecznie w każdym okresie. DMA może zmieniać parametry przebiegu. Na moje oko użycie drugiego timera niekoniecznie jest tu dobrym pomysłem
Jeśli używasz DIY toolchain wg. Freddiego, to zapewne właśnie wpadłeś w jego słynną pułapkę z brakiem stosu. NVIC_Configuration możesz spokojnie wyrzucić.
Przejrzałem scieżki zasilania i podłaczenia JTAG'a na Twoim PCB - błedów nie znalazłem. Reszta sygnałów z procka jest chyba podłaczona do Goldpinów czyli są w tym momencie w powietrzu. Jedyny sygnał, który idzie dalej to sygnał resetu idący do tego drugiego scalaczka. Na próbę możesz go odciąć, bo jeśli jest np. jakiś bład w pozostałej części PCB, związany...
Nie pomyślałem, że to chodzi o radio. Dzięki :) Nadal zastanawia mnie dlaczego mogę zmieniać ustawienia np. częstotliwość pracy modułu, a nie chce on mi nic wysłać. A skąd wiesz, że możesz? Jak już pisalem wszystkie rejestry są write oprócz status ale w nim nie masz żadnych parametrów konfiguracyjnych (zapisanych wczesniej) do odczytu i porównania....
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]...
RTC jest podpięty pod EXTI: https://obrazki.elektroda.pl/7724120400_...
Skompiluj na początek i powiedz czy nie ma błędów. Ach chyba wiem, zapomniałem że dodawałem biblioteke do przerwań. Dodano po 2 To ta z tego postu STM32_TimerInterrupt
Dlaczego przechowuje tablice 15 elementową folderów: Na przyszłość. mam zamiar wyświetlać albo foldery albo pliki, albo pół na pół. No ale to chyba nie ma sensu - skoro masz 15 linii, to wystarczy Ci 15 elementów, a nie 2x15 <; A masz może jakiś pomysł co zrobiłem źle z przerwaniami? Z przerwaniami można wiele rzeczy zrobić źle - począwszy od "standardowych"...
Bardziej chodzi o to, ze timer może zostać ustawiony jako trigger transferów dma (nie chodzi tu o przerwania.). Samo GPIO nie potrafi "poprosic" DMA o transfer.
stm32 przerwa przerwa stm32 przerwa timer przerwa swiecach
plastikowy zaślepka liczyć godzina minuta schemat pokojowego sterownika
pralka regulator obrotów suszarka bosch serie4
Napięcie fantomowe 50V po wyłączeniu ES – pomiary miernikiem w instalacji domowej Subwoofer DIY vs oryginał – Dayton, Hypex, Purifi, lepszy bas, projekt, porównanie 2024