(at)ElektrodaBot,post=21642893"]. Co dalej / pytania pomocnicze 1. Czy dioda ECO świeci ciągle czy miga? Ciągle świeci 2. Czy pompa spustowa pracuje zaraz po włączeniu? Nie da się włączyć 3. Czy panel kiedykolwiek „zakwili” brzęczykiem przy dotyku, nawet cicho? Tylko jak power on lub off Inne "przyciski" nie reagują Podsumowanie – co już wiemy • Zmywarka:...
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie Przeczytaj ten wątek i kup sobie inną płytkę. https://www.elektroda.pl/rtvforum/topic3... Jeśli koniecznie chcesz się męczyć z chińskimi podróbkami, to na mojej stronie ( http://www.freddiechopin.info/ > Download > ARM > Przykłady > stm32_blink_led) znajdziesz szablon...
Choć dopiero zaczynam przygodę z STM32 to po mojemu nadpisujesz strukturę i dlatego zawsze działa Ci ostatnie zdefiniowane przerwanie.
A nie masz tam przypadkiem przed main() funkcji SystemInit() ze SPLa, która "coś" robi z zegarem? P.S. Ta deklaracja przerwania przed main() naprawdę jest zbędna... Czemu to niby miałoby służyć? P.S.2 - PSC też powinno być 499. 4\/3!!
Pokaż procedurę obsługi przerwania TIM2. Albo nie pokazuj, tylko sprawdź sam, którego źródła nie obsługujesz lub którego znacznika nie zerujesz w obsłudze.
Przejrzyj setkę wątków na forum poświęconych temu, dlaczego do przycisków nie uyżwa się przerwań portów, a potem zrób to w przerwaniu timera, np. tak, jak w tym artykule: http://ep.com.pl/files/10324.pdf Samo programowanie prtzerwania też masz ciut bez sensu - najpierw uruchamiasz przerwanie, potem programujesz linię portu, która ma je zgłaszać. Zanim...
Odebrane znaki przechowywane będą w podanym buforze. Przerwania obsługiwane są w HALu, funkcja HAL_UART_RxCpltCallback jest wywoływana po odebraniu całości (w tym przypadku 22 znaki). Oczywiście możesz z nich korzystać wcześniej, ale musisz zajrzeć głębiej do HALa. Obsługi przerwań są w pliku projektu, plik z końcówką "it" (funkcja UART_IRQHandler)....
Witam Od dłuższego czasu zmagam się z ogarnięciem ethernetu na STM32. O ile z warstwą sprzętową i konfiguracją poszło relatywnie łatwo - TCP loopback i pingi w zasadzie zadziałały od razu, o tyle z UDP miałem dość poważny zgrzyt no ale finalnie działa - jestem w stanie wysyłać dane pod wybrany IP oraz je odbierać. Tak więc na poziomie konfiguracji wszystko...
Witam, chciałbym mieć przerwanie zewnętrzne na PE0 a cały czas cokolwike bym nie zrobił, przełączył, zmienił itd jest na PA0, moglby ktos rzucic okiem na kod i powiedziec co jest zle... wydaje mi sie ze w tym syscfg jest cos zrabane, albo nie chce sie ustawic etc... swoje wnioski opieram na tym ze PA0..2 normalnie smiga tylko nie mogeprzejsc jakby na...
Zieeew. Mówimy o podstawach działania UART, a nie o jakichś wydumanych parametrach ilościowych. MUSIMY co jakiś czas (np. co kilkadziesiąt bajtów) robić przerwy w transmisji danych nie krótsze niż czas transmisji bajtu, bo inaczej być może NIGDY nie odbierzemy żadnej danej. Parę razy temat ten był już poruszany. No właśnie temat był już kilkanaście...
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, Jestem poczatkujacy jesli chodzi o programowanie pod architekture Cortex. Posiadam zestaw ewaluacyjny STM32 Butterfly. Probuje skonfigurowac przerwanie, aby wykonało się po naciśnięciu przycisku. Debugujac program widac, ze po nacisnieciu przycisku flagi sa ustawiane, ale funkcja obslugujaca przerwanie nie jest wywolywana. tak wyglada moj kod...
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...
Witam, jak w temacie zaaplikowałem następujący kod do ARM przycisk mam na PORTA pin 0 [syntax=c] #include"stm32f0xx.h" int main(void) { RCC->AHBENR |= RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOCEN; SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA; GPIOC->MODER |= GPIO_MODER_MODER8_0; GPIOC->ODR |= GPIO_ODR_8; EXTI->IMR |= EXTI_IMR_MR0; EXTI->RTSR |= EXTI_RTSR_TR0;//Rissing...
Witam, przy ustawionym preskalerze np na 80 przerwanie zostaje wywołane, ale gdy zmniejsze preskaler to przerwanie się nie wykonuje. #include "stm32f10x.h" void RCC_Conf(void); void Show(int); void GPIO_Conf(void); void NVIC_Conf(void); void TIM_Conf(void); . . . int main(void) { #ifdef...
Cześć, Mam taką funkcję jak poniżej, która powinna przełączyć procesor w tryb STOP2. Testowo wywołuję ją zaraz przed wejściem w pętle główną for(;;) w main.c Problem polega na tym, że jak bym tego nie robił, to procesor w ogóle nie reaguje na WFE. Przerwania są jak widać wyłączone, żadna flaga pending w EXTI nie jest podniesiona. Żadne przerwanie 'nie...
Witam, początkowo zacząłem programować mikrokontroler stm32f103RBT6 wykorzystując bibliotekę standardową, ale zachęcony przeczytanymi postami na elektrodzie zacząłem programowanie wykorzystując tylko definicje rejestrów zawarte w pliku stm32fx.h. Chciałem włączyć jakiekolwiek przerwania (np. od timera 4) niestety wogóle nie wiem jak do tego się zabrać....
Witam, Mam problem z realizacją przerwania z USART3 na STM32L152RBxx. W momencie wywołania przerwania debugger zatrzymuje się na funkcji default_handler(). Poniżej umieszczam kod: main: #include "stm32l1xx.h" #include "stm32l1xx_conf.h" #include <string.h> void GPIO_Conf(void); void RCC_Conf(void); void NVIC_Conf(void);...
Witam, Szukałem na forum i nie znalazłem... Mam taki oto problem, przerwania są skonfigurowane w następujący sposób: [syntax=c] NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGr... NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp...
Witam Mój problem wygląda tak: W przerwaniu(1) od przycisku wywołuje funkcję(2) która korzysta z przerwań od przycisków:] Wpisanie w jej kod EXTI_ClearITPendingBit(EXTI_Line5); nie daje wiele, przerwania nie są przyjmowane. Czy jest jakis posob zeby w funkcji(2) korzystac z przerwań od przycisków?
Programiści wykorzystujący STM32 z serii L najczęściej korzystają z biblioteki HAL do obsługi tego typu przerwań. Chciałbym skonfigurować przerwanie które resetowałoby procesor po rozłączeniu zasilania bez jej wykorzystania. Układ zaprojektowany mam tak aby na pinie PA2 pojawiła się jedynka w momencie odcięcia zasilania. Według dokumentacji załączonej...
mam ustawione przerwanie zewnętrzne ustawione na wyzwalanie zboczem opadającym i narastającym w funkcji obsługi przewania zapisuję sobie do bufora: void EXTI0_IRQHandler(void) { //Check if EXTI_Line0 is asserted if(EXTI_GetITStatus(EXTI_Line0... != RESET) { Buffer[iWriteIdx] = 'I'; GoToNextElement(&iWriteIdx);...
Witam Bardzo często nie mogę debugować programów ponieważ debuger się zawiesza w momentach jak poniższych screenach poniżej. Zerwanie połączenia czasami pomoże a czasami nie. Widać że nie mogę wybrać ani opcji "Resume" ani "Terminate". Nie wiem czy to może mieć coś wspólnego ale dodam jeszcze, że zauważyłem iż nawet kiedy nie chce debugować (program...
Cześć. Nie potrafię sobie poradzić. Prosty program z przerwaniem od przepełnienia TIM2, Nie wiem dlaczego, ale przerwanie odpala mi się zaraz po inicjalizacji timera. Nie pomaga czyszczenie flag w żadnym momencie tzn. ani przed ani po uruchomieniu licznika. Kod jest taki. [syntax=c] int main(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->PSC = 65000-1;...
Witajcie. Piszę krótko. Używam STM32F407. Do trzech różnych USARTów mam podłączone cwa czujniki i jeden datalink Czujnik_1 - USART1 Czujnik_2 - UART5 Datalink - USART3 Z czujników zbierane są dane a datalink wysyła te dane, które zostały odebrane. Wszystko dzieje się na przerwaniach. Kiedy podpinam każdy z czujników oddzielnie i datalink'a, wszystko...
Witam, Piszę program do obsługi klawisza podłączonego do płytki nucleo - do pinu PC13 za pomocą przerwań. Klawisz ten po wciśnięciu zwiera do masy. Napisałem kod, który po wgraniu cały czas powoduje wywołanie przerwania EXTI15_10_IRQHandler(void). [syntax=c] #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include <stm32f10x_spi.h>...
Witam, próbuję zrobić projekt, w którym używam przerwań zewnętrznych, na razie staram się chociaż jedno uruchomić, ale po wejściu w przerwanie mikrokontroler się zawiesza. Jedno zadanie włącza LCD, drugie miga sobie diodkami, a gdy naciskam przycisk to diodki się zatrzymują i nic już do resetu się nie dzieje. Jestem początkujący w tym temacie więc za...
zy obsługę przerwania mogę mieć w pliku main.c tak jak w avr czy musi to być plik-stm32f10x_it.c? Pliki stm32f10x_cośtam to jakby sterowniki urządzeń (GPIO, SPI, NVIC itd...). To są jakby "drajwery", a użycie ich, stworzenie ich konkretnej konfiguracji, inicjację struktur i inne rzeczy powinieneś umieścić w swoich plikach. W żadnym wypadku nie polecam...
Niestety nie mam oscyloskopu i jest to dla mnie spore ograniczenie w obserwowaniu procesów i rozwiązywaniu tego typu problemów. Podczas pracy i rozruchu tranzystory nie grzeją się wcale. Wystepuje jednak małe szarpnięcię podczas rozruchu. Poniżej zamieszczam kod z prośbą o sprawdzenie poprawności. Odpowiedzialny jest on za sztywny rozruch, druga część...
A zająłeś najpierw semafor ? xSemaphoreTakeFromISR. Nie możesz zwolnić semafora jeśli go wcześniej nie zajmiesz. Niby oczywiste, ale z postu, który napisałeś wnioskuję dziwne rzeczy Semafor jest zajmowany dwa razy. Raz po stworzeniu bez blokowania, drugi raz w miejscu gdzie wątek ma czekać na przerwanie. Dla STM32 configPRIO_BITS jest równe 4. U siebie...
W dniu w którym ściągałem tą wersję komunikat o braku wersji ARM już był na stronie. Nadal jednak można ją ściągnąć poprzez aktywną subskrypcję dla wersji LITE. (czyli zlikwidowali tylko odwołanie do niej na stronie głównej) To czy nadal będzie rozwijana czy nie - nie wiem , wiem że wersje LITE były wydawane nieregularnie i w związku z tym przerwa półroczna...
Procesor chodzi na 168Mhz, szyna tego zegara chodzi na APB1 i jest dzielona od nominalnej przez 4 to jest 42Mhz. Preskaler zegara 640 i przerwanie w momencie przepełnienia czyli po 65536 taktach, co o ile się nie mylę daje raz na około sekundę. Tu się mylisz. Zajrzyj na clock tree w sekcji RCC i się okaże, że jednak APB1 dla timerów jest mnożone x...
Załóż nowy to podyskutujemy (; 4\/3!!
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...
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).
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...
A włączyłeś taktowanie dla CAN2? Nie używam bibliotek HAL więc nie wiem czy one to robią automatycznie.
Może spróbuj jeszcze w tym ostatnim przerwaniu wyłączyć obsługę DMA dla NVIC, a następnie włączyć jeszcze raz, może informacja o tym, że było przerwanie siedzi gdzieś tam jeszcze? Sam mam podobny problem przy współpracy ADC i DMA, gdzie mam w ADC odblokowane przerwanie od zakończenia konwersji, a przerwanie wywołuje się z flagą "konwersja rozpoczęta",...
Chciałem zobaczyc jak mikroprocesor działa na full szybkości bez delay'i. No i zobaczyłeś :) Przeskok z końca while(1) na jej początek też musi potrwać. Przeanalizuj program na debuggerze w trybie krokowym to zobaczysz skąd te przerwy.
Dzięki Freddie za dotychczasowy poświęcony czas i cenne uwagi To masz magiczny przycisk "POMÓGŁ", z którego nota bene jak widać nie korzystasz. EXTI + przycisk = wałkowane to tysiące razy.
Witam, Właśnie jestem w drugiej lekcji kursu EP 32 bity jak najprościej i jestem przy Blink 1. Mam problem z częstotliwością. Ustawiłem, aby przerwanie wywoływało sie co 1kHz a mam 3kHz. http://obrazki.elektroda.pl/9026530800_1... Wykorzystuję środowisko Atollic TrueSTUDIO for ARM Lite 3.2.0 Jak bawiłem się tym zestawem rok temu tym...
A jeśli chodzi o typ, to w tym przypadku powinienem użyć IRQ? Nie powinieneś używać żadnego. Jeśli używasz STM32F1 (technicznie rzecz ujmując - jeśli używasz rdzenia ARM Cortex-M3 w rewizji r1r1), to po prostu na początku main() (albo w startupie, albo gdzieś "bardzo wcześnie" - byle przed pierwszym przerwaniem) dodaj taką oto magiczną inwokację: SCB->CCR...
Na pierwszy rzut oka nie widzę włączonego zegara od AFIO.
Trzeba jeszcze włączyć przerwanie w NVIC. BTW - nie trzeba czyścić flagi ręcznie - wejście do przerwania kasuje ją. 4\/3!!
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.
Profilaktycznie możesz spróbować procedury zatrzymywania DMA z układów STM32 mających bardziej rozbudowane DMA (np. F4). Sprowadza się ona do tego, że po wyzerowaniu EN musisz go w pętli odczytywać do momentu aż odczytasz tam faktycznie zero. Może coś pomoże, może nie. Zadbałbym też o czyszczenie wszystkich flag DMA przed uruchomieniem transferu (albo...
dlaczego ta instrukcja nie działała jak dodałem średnik na końcu tej linijki while((SPI1->SR & SPI_SR_BSY) == 0) ,a jak go usunąłem to zadziałało? Bo `while (warunek);` jest tożsame z `while (warunek) { /* kompletnie nic */ }`. Jeśli dasz średnik, to następna linijka _NIE_ jest częścią pętli while, tylko po prostu jedną instrukcją która się wykona...
To trzeba sprawdzać w Ref. manualach układów, bo np. w F4 już nie trzeba tego robić. Ale cieszę się, że się udało :) Pozdrawiam
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,...
Z tą długością i negacją to nie mój pomysł, ale niezły. Właśnie tak to można traktować. Jeżeli kolejny bajt nie jest negacją poprzedniego, to przyjmujemy, że to nowa długość i czekamy, aż następny będzie negacją. Dodatkowo można narzucić ograniczenia na dozwolony zakres długości.
to chwyć zakładkę edytora i przesuń utworzysz nowy okno edytora.
typedef char t_Ramka[6] t_Ramka RamkaA[85] albo zdefiniuj jako unia
Witajcie, siedzę i szukam błędu w bibliotekach do obsługi NRF24L01. Skopiowałem je z biblioteki, którą wykorzystuje w ATmega8. Działa nawet dobrze tam, niestety na STM32F0DISCOVERY już nie chce. Będę bardzo wdzięczny za pomoc. To najpierw kody, które wyrażają więcej niż tysiąc słów ;) : main.c http://obrazki.elektroda.pl/4732813300_1...
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...
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,...
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ą...
Przerwania RTC są podpięte przez EXTI - trzeba się upewnić, że są "odmaskowane" w rejestrze EXTI_IMR i mają włączoną detekcję narastającego zbocza w EXTI_RTSR. 21.6 RTC interrupts All RTC interrupts are connected to the EXTI controller. Refer to . To enable RTC interrupt(s), the following sequence is required: 1. Configure and enable the EXTI line(s)...
GrzegorzKostka w rejestrze TIM1->CR1 włączyłem CEN BlueDraco nie podejrzewałem, że źle nazwałem przerwanie. Powinno być [syntax=c]void TIM1_CC_IRQHandler(void)[/syntax] Teraz jak kliknę na Run to Line, to nie ma błędu, ale procek się nie zatrzymuje. A jak zatrzymam sam, to rejest CCR1 = 0
Usuń znaczniki |= |= |= ) [syntax=c]NVIC->ISER[0] = (1 << 2);[/syntax] [syntax=c]NVIC->IP[2] = (9 << 4);[/syntax] Tutaj znowu niebezpieczne przypisanie, lepiej użyć operatora |=, ewentualnie ze wstępnym wyzerowaniem odpowiednich bitów. CMSIS nie gryzie, można go spokojnie używać dla przejrzystości kodu.
Będzie tak jak piszesz. Przerwanie po doliczeniu do 999 po czym zerowanie licznika i liczy od nowa
Proszę bardzo! Wersja minimalna - zapamiętywanie jednej zmiennej na F0. No fakt, aż 36 wierszy. Nie no błagam... nie rozśmieszaj mnie. Chodziło o kod który dla DOWOLNEJ ilości zmiennych (oczywiście w granicach rozsądku tak aby wszystkie mieściły się w emulowanym EEPROMie) pozwala NA ŻĄDANIE odczytać/zapisać WYBRANĄ zmienną. A ty wrzucasz tu jakieś...
Jeżeli uruchomiłeś "system ochrony" zegara "głównego" (Clock security system (CSS)) i zegar główny zatrzyma się (np. dotkniesz palcami wyprowadzeń kwarcu) to system wywoła NMI, w którym to możesz zadecydować czy próbować przełączyć się z powrotem na zegar główny (np. kwarc) czy też zgłosić błąd (oczywiście bez zatrzymana procesora bo w ciągu kilku us...
[syntax=armasm]g_pfnVectors: .word _estack .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler /* External Interrupts */ .word WWDG_IRQHandler /*...
Jeżeli obsługa przerwania jest w pliku *.cpp to jeszcze trzeba dodać: [syntax=c] extern "C" void blabla_IRQ_Handler() { //... } [/syntax]
Popularne stm32f103 lub wg. potrzeb może być coś mocniejszego z rodziny f2,f3,f4...
I pomyśleć, że wystarczyłoby napisać: if (RTC_GetITStatus(RTC_IT_SEC)) i problem by znikł... Ogólnie proponuję zacząć od usunięcia tej chorej definicji SET i RESET oraz wszelkich odwołań do tych stałych, bo wynikają z nich wyłącznie problemy (porównania z SET niemal zawsze są błędne), a kod staje się nieczytelny.
Chyba z RM'em ;P Tablice w C numerowane są od zera a nie od jedynki; rejestry natomiast są numerowane od 1 - stąd rozbieżność. Spróbuj: [syntax=c]AFIO->EXTICR[1] = AFIO_EXTICR2_EXTI6_PC;[/syntax]
stm32 przerwa przerwa stm32 przerwa stm32 przerwa timer
warystor epcos kolumny aktywne klipsch write protect pendrive
vaillant kondensat telewizor manta led5501
Problemy z elektroniką w Renault Captur 2014 Schemat mechanizmu zmieniarki CD Denon UD-M5