NVIC_ClearPendingIRQ(USB_IRQn) nic nie da w tym przypadku. Należy wykasować flagi w rejestrze USB interrupt status register (USB_ISTR) , ale jeśli to zrobisz samodzielnie funkcja HAL_PCD_IRQHandler(&hpcd_USB_FS) może już nie działać właściwie ponieważ w zależności od stanu tych flag są podejmowane odpowiednie działania. Jak wskazuje sama nazwa tej...
W CubeMX ustawiam płytkę STM32F0 Discovery. Piny ustawiam jako przerwania. W CubeMx oprócz ustawienia pinu na pinoucie jako GPIO_EXTI... , trzeba wejść w zakładkę Configuration i pod klawiszem GPIO ustawić tryb przerwania tego pinu ("External Interrupt Mode...") oraz zbocze, czy pullup itp. i koniecznie wejść tam w zakładkę NVIC, i postawić tam ptaszka...
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...
Czesc, mam problem z konfiguracja przerwan zewnetrznych. Sprawdzalem kilka przykladow znalezionych w necie i zaden (prawie) nie dziala. Jedynym przykladem ktory dziala jest gotowiec z Atollic studio, i generowanie przerwan na porcie PA0. Niestety zadne modyfikacje na inne porty nie dzialaja. Oto moj kod: Inicjalizacja GPIO na porcie PB12: [syntax=c]void...
Witam. Za mną cały dzień ślęczenia nad tym nieszczęsnym prockiem i problem dalej nie rozwiązany. Potrzebuję oprogramować przerwania EXTI z przycisków/krańcówek itd. Z kodem zszedłem już do poziomu migania diodą, żeby tylko uruchomić sukcesywnie te przerwania, a tu dalej klapa. Program w momencie przerwania przechodzi od razu do pętli Reset_Handler i...
Witam! Nie mogę dojść do tego co się dzieje. W zamierzeniu program powinien czekać na ustalone znaki z USARTa i odpowiedzieć kilkunastoma znakami tekstu. Objaw jest taki, że po otrzymaniu 1 znaku odpowiada trzema prawidłowymi znakami a potem siedzi w przerwaniu z którego nie może się wykaraskać (tzn. nie robi nic innego). Zdarzyło mi się też zaliczyć...
Witam. Mam taki dziwny problem - odpalam sobie przerwanie co 10ms, w nim chciałem zrobić coś w stylu bufora dla danych wejściowych, ponieważ mam przerwanie z innego timera, które trwa dość długo (odczyt temp, ustawienie na podstawie tej wartości stanu wyjść, wypisanie temp. na lcd). Na to przerwanie dałem wyższy priorytet, i po prostu sprawdzam stan...
Witam posiadam STM32 F042K6, posiadam również czujniki które zmieniają swój stan z wysokiego na niski podczas wykrycia przeszkody. Potrzebuje zamienić ify na przerwania tzn. [syntax=c] while(1){ przodprawo = HAL_GPIO_ReadPin(GPIOA, przod_prawo_Pin); przodlewo = HAL_GPIO_ReadPin(GPIOA, przod_lewo_Pin); prawo = HAL_GPIO_ReadPin(GPIOB, prawo_Pin); lewo...
Dzięki freedi miałeś racje. Patrzyłem na kolejność przerwań w tabeli f0 ale nie na adresy. Aby zapełnić luki i poprzesuwać adresy dodałem brakujące reserved handler Dodano po 11 Teraz tylko muszę rozwiązać skąd mi przerwań multum nadchodzi i w nierównych odstępach od timera. Bo pwm wyprowadzone jest na jedną diodę a przerwanie zmienia stan innej diody....
A to co? LPC_SYSCON->PDRUNCFG &= ~80; Poprawiłem na 0x80, faktycznie w kursie jest [syntax=c] #define PDRUNCFG_SYSPLL_PD 0x00000080 LPC_SYSCON->PDRUNCFG &= ~PDRUNCFG_SYSPLL_PD; [/syntax] (at)BlueDraco: Ponawiam pytanie: Czy w tym numerze Elektronika Praktyczna 2014/4 "32 bity jak najprościej. STM32F0 - nieblokująca obsługa wyświetlacza...
Witajcie, Mam taki dziwny problem, chcę aby jeden SPI wysyłał dane (liczby, jako master) do drugiego SPI (slave, na tym samym DISCOVERY). Drugi SPI ma odsyłać sumę danych jakie otrzymał w pojedynczej ramce danych. Gdy NSS z SPI1 wisi w powietrzy to dane z SPI1 są wysyłane a pin NSS zachowuje się tak jak powinien. Gdy podepnę go do NSS w SPI2 lub do...
Witam Mam następujący problem przy płytce STM32F0Discovery. Celem programu jest na poziomie obsługi przerwania ustawienie globalnej zmiennej, a następnie po powrocie do maina sprawdzenie zmiennej i wykonanie instrukcji. Kod pliku main.c [syntax=c] #include "stm32f0xx.h" #include "setup.h" volatile bool new_data = false; int main (void){ setup(); while(1){...
I tu jest problem. Łamiesz tym podstawową zasadę w ustawianiu priorytetów przerwań w FreeRTOS'ie. Ustaw priorytet na: configLIBRARY_KERNEL_INTERRUPT_PRIORITY. Zdefiniowane jest toto w FreeRTOSConfig.h. W komentarzu masz opisane na jaką najniższą wartość możesz ustawić przerwanie korzystające z funkcji FreeRTOS'a.
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,...
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.
[syntax=c]//============================... // TIM3 Interrupt Handler //======================================... void TIM3_IRQHandler(void){ if(TIM3->SR & TIM_SR_UIF) // if UIF flag is set { TIM3->SR &= ~TIM_SR_UIF; // clear UIF flag } }[/syntax] AND zbyteczny az prosi...
Witam. Na początku muszę zaznaczyć, że jestem raczej początkującym w temacie mikrokontrolerów i ogólnie elektroniki. Kupiłem sobie stm32f0 discovery oraz termometr ds18b20, podłączyłem wszystko jak trzeba - pin 1-wire do pc7, oraz piny zasilania odpowiednio do 3v i GND na płytce. Korzystam z IAR Embedded Workbench EWARM. Termometr działa, bo procedura...
Masz całkowicie źle napisaną obsługę przerwania. Po pierwsze nie kasujesz bitu zgłoszenia przerwania Po drugie nie sprawdzasz od czego dostałeś przerwanie np. STM32F4 ma takie flagi: * (at)arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) * (at)arg USART_IT_LBD: LIN Break detection interrupt * (at)arg USART_IT_TXE: Transmit...
Czyli co wystarczy że włącze przerwanie i wstawię w mainię funkcje Akurat _w_ main() to raczej średnio Ci się uda (; Funkcje deklarowałem bo gdzieś znalazłem na forum taki komplet deklaracja plus funkcja i myślałem że to jest potrzebne Chodzi o to, że __attribute__ lepiej wygląda jak jest osobna deklaracja [; Ja to robię zwykle tak: [syntax=C]void...
Niedawno stoczyliśmy z Freddiem potyczkę, w wyniku której wyszło, że w niektórych Cortexach STM nie jest włączone domyślnie wyrównanie stosu przy wyjątkach, i z tego powodu procedury obsługi przerwań powinny być na nich deklarowane z atrybutem interrupt. Nie wiem, czy dotyczy to również M4F. Co prawda w takim przypadku problem byłby przy wywołaniu innej...
Hej, korzystam z evala stm32f4. Do odczytywania wejscia na jednym z pinow chcialbym wykorzystac przerwanie. W teorii jest dobrze, przerwanie generuje sie, jednak odczytywane wartosci z pinu sa zle. Ustawilem, by przerwanie bylo generowane na zbocze rosnace, jednak z pinu odczytuje wartosci 0 jak i 1. Dodam, ze dodatkowo korzystam z Free RTOS, ktory...
Chciałem zrobić przerwanie zewnętrzne (EXTI0), że jak naciśnie się guzik na płytce to tam lampki się zapalą inaczej. Tylko problem jest taki, ze jak nacisnę sobie guzik to niby program skacze do przerwania - tj. tak mi OpenOCD pokazuje: halt target state: halted target halted due to debug-request, current mode: Handler External Interrupt(6)...
Witam, Mam problem z następująca rzeczą, Na pin PC6 podpiąłem tymczasowo przycisk - po naciśnięciu zwiera pin PC6 do masy. Przycisk uruchamia przerwanie EXTI i zmienia stan wyjścia na przeciwny. Po wciśnięciu przycisku brak jakiejkolwiek reakcji na zdarzenie. Konfiguracja przerwania: [syntax=c] void init_interrupt_PC6(void) { gpio_pin_cfg(GPIOC, 6 ,...
Witam ponownie. Mam jeszcze pytanie. Ponieważ chciałem dodać obsługę: ETH_WKUP_IRQHandler i ETH_IRQn. Więc w pliku vaectors.c dodałem takie linijki: [syntax=c] // ETH Ethernet global Interrupt void ETH_IRQHandler(void) __attribute__ ((interrupt, weak, alias("__Default_Handler"))); // ETH_WKUP Ethernet Wakeup through EXTI line Interrupt void ETH_WKUP_IRQHandler(void)...
Witam, Korzystam z mikrokontrolera STM32F7 i oprogramowania CubeMX. CubeMX wygenerował biblioteki, które korzystają z HALa. Tak się składa, że HAL ma sporo błędów i takowym jest odbiór danych z portu UART. Sporo w internecie uwag dotyczących tego problemu, jednak żadnej sensownej odpowiedzi i wskazówki, która zadziałałaby u mnie. Próbowałem odczytu...
To kod, który u mnie na STMF107 działa - może znajdziesz jakieś róznice... W przerwaniu mam obsługę klawiatury 4x4 + kilka liczników, ale to tutaj nieistotne, więc nie zamieszczam. [syntax=c] //--------------------------------------... // Inicjalizacja TIM2 //--------------------------------------...
Chyba zaczyna się ujawniać wyższość procesorów o możliwie długim słowie danych - nawet operacje 32 bitowe będą atomowe. Nie będą niestety o ile operacja RMW będzie realizowana przez kilka rozkazów, które mogą być przerwane. Będzie natomiast w systemie, który będzie modyfikować pamięć jednym rozkazem, który nie może być przerwany (a często mogą być...
Klepnąłęm kawałek kodu na STM32F0x dla obsługi transmisji uK=>PC. Jednak pojawił się dziwny objaw. Może ja nie widzę błędu.... Warto aby ktoś zerknął w ten kod: #define TBUF_SIZE_UART2 128 struct uart2_tx_buf_st { u16_t in; /* indeks zapisu */ u16_t out; /* indeks odczytu */ u16_t dat; /* licznik danych w buforze */ char buf [TBUF_SIZE_UART2];...
Ciekawi mnie jakich driverów użyłeś ? Sam kilka lat temu wykonałem modulator wektorowy na TMS320. Polowe metody sterowania były poza zakresem mojej magisterki. Urządzenie uruchomiłem z powodzeniem na modułowym falowniku laboratoryjnym. W pracy został użyty inteligenty moduł mocy IMP PM25RSH120 firmy Mitsubishi, który ma w swojej strukturze zintegrowane...
Witam, Bawię się zestawem STM32F3 Discovery i konfiguruję przerwanie od PC0. Po skonfigurowaniu nie działa przerwanie od PC0 tylko od PA0 (user button). [syntax=c] RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8...
witam, Mam następujący problem: Do Pinu 3 portu GPIOC mam podłączony sygnał 1kHz i chcę generować przerwanie od zbocza opadającego. moja konfiguracja: [syntax=c] GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SY...
Używanie HAL_UART_TxCpltCallback() do przełączenia kierunku RS-485 jest błędem, ponieważ to że zakończone zostało kopiowanie danych z bufora do UARTa wcale nie znaczy, że zakończone zostało ich wysyłanie. Do tego celu należy wykorzystać przerwanie TC, które faktycznie oznacza, że dane zostały fizycznie przesłane. Prześledziłem w Halu wydaje mi się,...
Wygląda jakby przerwanie nie kasowało flagi ale żadna flaga nie jest ustawiona. Żadna flaga nie jest ustawiona? TXE na 100% jest ustawione (bo przecież nic nie wysyłasz), TC też by było ustawione na stałe tylko czyścisz ją ręcznie. Po skończonym transferze przerwania od tych źródeł należy wyłączyć. Żadne magiczne funkcje typu HAL_NVIC_ClearPendingIRQ()...
Zgadza się, dla: PSC = 41999; ARR = 999; dioda jest 500ms ON i 500ms OFF. Ale już dla: PSC = 83999; ARR = 999; nie ma sekwencji 1s ON i 1s OFF. Dioda wtedy mruga zdecydowanie szybciej. Sekwencję 1s ON i 1s OFF udało mi się jedynie uzyskać dla: PSC = 41999; ARR = 1999; I jeszcze jedna ważna rzecz, teraz dopiero zauważyłem warning podczas kompilacji,...
Witam, Chcę obsłużyć przycisk USER za pomocą przerwania. Projekt oparty jest na ćwiczeniu 9 z książki "STM32 Aplikacje i przykłady w języku C". NVIC_Config(void) void NVIC_Config(void){ //Konfigurowanie kontrolera przerwan NVIC NVIC_InitTypeDef NVIC_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; #ifdef VECT_TAB_RAM // Jezeli tablica wektorow...
Niestety te przerwanie nie chce mi zadziałać, PWM jakoś działa ale chciałbym poznać na 100% jego częstotliwość. Kod wygląda tak: [syntax=c] // PWM constants #define PWM_FREQ1000// Hz #define PWM_STEPS400 #definePWM_CLK 168000000 #definePWM_PRE (PWM_CLK / PWM_FREQ / PWM_STEPS) #define TIM_CCMR1_OC1M_PWM1 (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2)// OC1M[2:0]...
Witam, chciałbym przesyłać dane przez USART za pomocą DMA (STM32F4). DMA jest aktywowane w przerwaniu od TIM2 w odstępach co 100 ms. Program wykonuje się, natomiast dane nie są przesyłane. Wiem, że na pewno przerwanie od TIM2 działa poprawnie. Jeśli ktoś wie gdzie może być błąd/braki w konfiguracji proszę o odpowiedź. Z góry dzięki. Poniżej kod: [syntax=c]...
No są takie wyjątki dostępne w rejestrze FPSCR Floating-point exceptions The FP extension records the following floating-point exceptions in the FPSCR cumulative bits, see Floating-point Status and Control Register, FPSCR on page A2-56: IOC Invalid Operation. The bit is set to 1 if the result of an operation has no mathematical value or cannot be represented....
Witam, mam problem z DMA w STM32F217 w którym przerwanie niestety nie chce ruszyć. Taktowanie DMA sprawdzone, flagi błędów przerwania od DMA są ok(żadna błędna się nie ustawia, jedynie ustawiają się flagi końca transmisji danych). Otóż zmienne VarA i VarB się przepisują czyli DMA działa dobrze, ale przerwanie nie chce wskoczyć do obsługi przerwania....
Witam Piszę program, który będzie musiał się synchronizować z siecią 230V. konfiguracja Timera: [syntax=c] TIM8->PSC = 168-1; TIM8->CR1 |= TIM_CR1_ARPE; TIM8->ARR = rotor_period; //20000-1+5000; TIM8->DIER |= TIM_DIER_UIE | TIM_DIER_CC1IE; TIM8->EGR |= TIM_EGR_UG; // update generate TIM8->CCMR1 = 1; TIM8->CCER = TIM_CCER_CC1E; TIM8->CR1...
Witam, mam problem z przerwaniami zewnętrznymi. Otóż mam podłączone przyciski z napięciem od zestawu STM32 i pinami kolejno PD1, PD3, PD4, PD6, PD7. Napisałem proste przerwania ale one nie działają! Zadaniem każdego przerwania jest zapalenie innej diody na zestawie. Tzn. przerwanie w moim przypadku wykonuje sie samoczynnie (diody na płytce migają z...
Z drugiej strony najprzyjemniejszy OS byłby taki, ktorego uzywa się równie łatwo co QThread'ów QThread to przecież lekka abstrakcja nad POSIX, zapewne bardzo podobna do std::thread. Do zalet trzymania się standardu łatwo się przekonać - wystarczy np zauważyć, że mając na mikrokontrolerze pthread i runtime POSIXowy można na nim z powodzeniem uruchomić...
niemniej jednak cały taki proces zajmuje kilkadziesiąt-kilkaset cykli zegara. A dokładniej, to jest to ok. 1000 cykli, czyli 10x więcej (15us(at)72MHz) http://stackoverflow.com/a/24906003/4676... Ale żeś się uparł... Normalnie zaraz oscyloskop chyba wyciągnę i Ci zmierzę ile trwa zmiana kontekstu w moim systemie (; Tak czy siak FreeRTOS jest ciekawym...
Dzięki za odpowiedzi! gaskoin wydaje mi się, że sprawdzanie bufora w przerwaniu po odebraniu znaku nie będzie zbyt optymalne bo komunikacja wygląda tak: Zapytanie: AT\r\n Odpowiedź: AT\r\n// Z włączonym echem OK\r\n Więc w trakcie odbierania znak \n pojawia się klika razy przez co będę blokował przerwanie podczas odbierania danych. Teoretycznie echo...
Witam, prosił bym o pomoc. Potrzebuję robić 5 pomiarów napięć i chcę do tego wykorzystać 5 kanałów ADC1. O ile wydaje mi się że poprawnie wszystko konfiguruję, tak nie wiem w jaki sposób odbierać dane z ADC1->DR. Wiem, że przez DMA, lecz jeśli podaję do DMA adres źródłowy ADC1->DR i adres docelowy np. &do_adresu, to nie wiem z którego kanału...
Witam, Uruchomiłem komunikacje po porcie szeregowym za pomocą USART1. Wszystko niby działa, ale przy deklaracji BaudRate w programie np 57600, na terminalu (program REALTERM) komunikacja działa przy ustawieniu Baud: 115200. Ta sama sytuacja ma miejsce przy ustawieniach innych prędkości. Prędkość na terminalu musi być 2x większa niż ustawiona w programie...
Cześć, Próbuję się skomunikować pomiędzy RPi i stm32f4. Na RPi korzystam z biblioteki bcm2835 a na stm32f4 z HAL. Być może nie do końca rozumiem zasadę działania SPI i sta te problemy. RPi jest masterem i co 1000ms wysyła dane w postaci tablicy o rozmiarze równym 4 elementy. Te dane są w poprawny sposób odbierane na stm32f4. Na stm32f4 korzystam z DMA,...
Witam,m am nadzieję, że znajdę jakieś rozwiązanie mojego problemu. Mianowicie stosuję biblioteki HAL, cubeMX i STM Studio (próbowałem ogarniać rejestry, ale chciałbym sobie to zostawić na przyszłość). Dokonuję pomiaru na dwóch kanałach ADC i przez DMA zapisuję w dwóch tablicach 256 elementów. Gdy zapisuję dane do tabeli z pojedynczego kanału wszystko...
Hmm moglibyście spojrzeć. Napisałem coś takiego, jednak na LCD są tylko jakiej pasy. Obrazu brak. Stworzyłem bufor 2kB, i dwa wskaźniki na niego (na jego początek i środek). DMA ustawione na circular i zapisuje ciągle ten bufor. Dodatkowo zgłasza przerwania po przesłaniu połowy bufora i całego. I na podstawie tych przerwań próbuję w pętli głównej na...
Wiesz co ja dopiero zaczynam z programowaniem stm ale jedna sprawa rzuciła mnie się w oczy. twoja funkcja jest prawie funkcją z biblioteki której definicja i rozwinięcie znajduje się w pliku core_cm4.h [syntax=c] __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible...
Dodam, że kod jest wyciągnięty z projektu który działał dobrze więc dlatego z niego korzystam a sam lepszego nie potrafię napisać. Zaktualizowałem trochę kod żeby debugować: [syntax=c]#include "main.h" #define TIM_Period_init 40959 #define TRIGGER1_ON GPIO_SetBits(GPIOC,GPIO_Pin_0); #define TRIGGER1_OFF GPIO_ResetBits(GPIOC,GPIO_Pin_0); RCC_ClocksTypeDef...
(at)Piotrus_999: Tak, wiem, czytałem, ale najprościej jest sprawdzić, czy przerwanie działa i czy do niego wchodzi (po prostu led'a zapalić w przerwaniu, tyle). Po wywaleniu SW4STM i zainstalowaniu czystego Eclipse i skonfigurowaniu według tutoriala od kolegi Freediego przerwania od linii zewnętrznych śmigają aż miło. Źródłem przerwania jest ekran dotykowy...
Dziękuję za szybką odpowiedź :). Czyli Freddie Chopin napisał że się mylę a to dokładnie tyle samo znaczą te linie w przypadku dokładnie tego procka na który ja piszę. Przez to że nie dałem mu do tego powodu rozumiem, że nie powinien zgłaszać przerwania ponieważ zmieżone wartości napięć nigdy nie przekroczyły ustawionych wartości progowych na 5 V i...
Witam Idea działania programu jest taka, że po starcie na wyświetlaczu pojawia się komunikat "napis testowy", a po naciśnięciu przycisku wyświetlany jest napis "STANDBY MODE" i układ przechodzi w tryb standby. Po naciśnięciu przycisku napis wyświetla się, ale mikrokontroler nie pracuje w trybie standby (podłączony miernik na pinie IDD). Niestety nie...
stm32f0 przerwania interrupt stm32f0 discovery przerwać stm32f0 discovery
obudowa matrycy toshiba zwiększenie obrotów wentylatora dotykowe samsung
pilot zgemma manetka hulajnoga
Schemat podłączenia licznika Volkswagen Golf VI Przestrojenie głowicy UKF w radiu Camping PMP102