Najwięcej szukaj w manualu. Ja też nie wiedziałem o tych funkcjach i z manualem sam do tego doszedłem jak się wyłącza przerwania (doszedłem to dość sporo powiedziane - tam to poprostu jest napisane).
...a po wykonaniu funkcji "chronionej" odtworzyć jego stan sprzed wyłączenia.
kardynalny błąd -> oczekiwanie na co, na TC==1 ? Oczekiwanie na cokolwiek w przerwaniu jest kardynalnym błędem. Przeciez w notce katalogowej zalecają poczekać po zakonczeniu transmisji na TC. Czy aby napewno piszą to w kontexcie przerwań, czy może poczekania przez wyłączeniem danego modułu peryferyjnego? Poza tym nie odpowiedziałeś na moje pytanie,...
Byłem przekonany, że po wyłączeniu EXTI flagi sie nie zmieniają. Czyli muszę wyzerować flagę poleceniem EXTI_ClearFlag(EXTI_Line0)?
Ok, problem został po części rozwiązany. Resetowanie mastera w trakcie komunikacji nie powoduje zatrzymania transmisji. Zostało to rozwiązane permanentnym włączeniem przerwania od RX na slave. Wcześniej w pętli while wołana była funkcja która włączała przerwanie, czekała na dane i wyłączała przerwanie. Problem za to pojawił się po drugiej stronie. Teraz...
Postaram się to zrobić. Czy drogą jest tu wyłączenie przerwania od TIM2 (on włącza diodę), wyłączenie portu PD0, czy cokolwiek innego? I dlaczego ta pętla while(GPIOD->IDR) nie działa?
Tak, wygląda to jakby po prostu po pewnym czasie wywalało hard fault. Po prostu jak nie włączę breakpointa to program wykonuje się ok 2s. W trybie debudowania pierwsze przejście zajmuje ze 2s. EDIT: Po wyłączeniu konfiguracji buttona systick działa normalnie.
Polling wymaga wyłączenia przerwań w pewnym momencie (na kilka instrukcji ale zawsze) Ale przerwań od I2C, czy w ogole wszystkich przerwań? tadzik85 DMA też używasz?
Zacząłem kontynuować I2C :) Mam zagwozdkę z odbiorem w momencie EV7. Dokładnie to napisałem taki kod, ale nie jestem pewien, czy jest poprawny: [syntax=c] case (uint16_t)0x40:// RXNE if(Idx < (BufSize)) { BufforI2C[Idx++] = I2C2->DR; } else { I2C2->CR1 &= ~I2C_CR1_ACK; I2C2->CR1 |= I2C_CR1_STOP; I2C2->CR2 &= ~ I2C_CR2_ITEVTEN;...
Mam problem z kolejkowaniem przerwań i wywłaszczaniem w STM32 Cortex M3. Otóż mam 2 timery, TIM6 oraz TIM12 o tym samym priorytecie (jeśli się wykonują, nie mogą się wywłaszczać, dlatego ten sam priorytet). Czasem używam globalnego wyłączenia przerwań i w tym czasie zgłaszają się oba, z tym że pierwsze ( po włączeniu IRQ) wywołuje o niższym numerze,...
Witaj Kolego Szczywronek ! Oczywiście, mam nadzieję, że wiele razy już czytałeś jak piękną robotę odwaliłeś pisząc swój poradnik. Myślę, iż słowo poradnik jest nieadekwatne do tej książki, którą wydałeś w domenie PUBLIC DOMAIN. Wielki szacunek i wielkie podziękowania, za włożony trud! Nie mniej jednak w rozdziale 1.4 (uwagi końcowe) dałeś przyzwolenie...
Banialuki pleciecie, Koledzy (niektórzy). Praca krokowa w 8080 wygląda dokładniuśko tak samo, jak w Z80, 8085, 8088 i większości innych mikroprocesorów. Najprostszy system z 8080 właśnie konstruuję - składa się z 8080, 8224 i STM32. Będzie na nim działał również CP/M-80, który już działa na analogicznych maszynkach z Z80 i 8085. "Prawdziwy" komputerek...
Warunkiem koniecznym do rozpoczęcia kolejnego transferu jest skasowanie flag przerwań/stanu w rejestrze DMA. Nie tylko - kluczowe jest też WYŁĄCZENIE danego kanału DMA przed ponowny włączeniem go. Przykładowo w STM32F1: DMA1_Channel4->CCR = 0; // disable channel DMA1_Channel4->CMAR = (uint32_t)&...; DMA1_Channel4->CPAR = (uint32_t)&SPIx->DR;...
Witam, piszę program na STM32 F100RB(Discovery), który ma za zadanie dane odebrane od GPS(USART2) wysłać przez moduł radiowy(USART1). Nie wiem dlaczego, ale po przyjściu przerwania od odbioru USART2 program ucieka do przerwania HardFault_Handler(void) . W debuggerze całość działa poprawnie, natomiast w trybie "run" problem ten sie pojawia. Dodatkowo...
Witam, mam dziwny problem przy obsłudze przerwania od ADC End of Conversion. Gdy przetwornik ADC jest skonfigurowany do pracy z DMA procesor nie wchodzi do if`a gdzie jest zerowana flaga zakonczenia konwersji. Wchodzi jedynie do funkcji obslugi przerwania i po sprawdzeniu źródła przerwania wychodzi z niej. [syntax=c]void ADC1_2_IRQHandler ( void ) {...
Z przerwaniami chodzi o to, że przy kopiowaniu nie blokujesz w ogóle procesora pętlą while, tylko robisz sobie coś innego i czekasz na przerwanie, żeby obsłużyć zdarzenie końca kopiowania bufora. Co do kopiowania tylko raz - wtedy w takim przerwaniu blokujesz kanał, a jak chcesz kopiować znowu, to gdzieś go sobie odblokowujesz. DMA nie kasuje rejestrów...
Do testów przeskoku próbuje wgrać soft pod 0x08020000 i skoczyć do niego z apki 1. Ustawienia tej 2 mam takie: http://obrazki.elektroda.pl/6219459500_1... http://obrazki.elektroda.pl/1881766200_1... http://obrazki.elektroda.pl/1327810400_1... Po wykonaniu skoku ląduje tu: http://obrazki.elektroda.pl/8961576900_1...
Hmm, to jak wykonać te przerwanie migania? :)
No dokładnie tak robię. Tylko że najszybszy i najłatwiejszy sposób na to to wyłączenie przerwania i ponowne jego załączone po czasie przez timer. Mylisz się co do tego, że bardzo szybka obsługa przerwań nie będzie miała na nic wpływu. Problem z Twoimi radami jest taki, że podajesz dużo ogólników i żadnych konkretów. Nie oczekuję gotowego rozwiązania,...
Przycisk już zmieniłem i w sumie to się pogorszyło. Przed zmianą przycisku na nowy głośnik i procek włączał się tylko czasami, bardzo któtko i tylko przy włączaniu, a nie tak jak teraz również przy wyłączaniu. Ten projekt to lampka z trzema stanami: - wyłączony - zwykła lampka - miganie lampki do dźwięku Zależało mi na tym aby w stanie "Wyłączenia"...
Freddie, w tym wątku mowa jest nie o Twoim Genialnym DestroyRTOS, a o stosie USB od ST w typowej konfiguracji, gdzie obsługa USB jest nie w zadaniu RTOS, a w przerwaniu USB. Tak się składa, że sam peryferial USB w ST ma parę rejestrów, w których poszczególne bity są związane z różnymi endpointami. Co dalej - zapewne sam wiesz - kiedy dwa kawałki kodu...
Czy użycie pinu UART jako GPIO wymaga pewnych ustawień? Bezpośrednia odpowiedź: Tak, użycie pinu UART jako GPIO zazwyczaj wymaga pewnej konfiguracji. Wynika to z faktu, że piny UART są zwykle domyślnie skonfigurowane do komunikacji szeregowej i należy je ponownie skonfigurować, aby działały jako piny wejścia/wyjścia ogólnego przeznaczenia (GPIO). Szczegółowa...
Wszystko fajnie, tylko ciekawe co jeśli ten błąd assert() zostanie wykryty w przerwaniu? Albo w trakcie sekcji krytycznej? Albo zaraz po tym "resecie", ale jeszcze w trakcie inicjalizacji/zerowania sekcji .data/.bss lub działania globalnych konstruktorów, zgłoszone zostanie jakieś przerwanie? Fragment o roztrząsaniu na temat tego czy układ ma NVIC czy...
Witam, za pomocą STM32 F072RB steruje silnikami krokowymi. Problem polega na tym iż nie mogę w tym samym czasie mieć włączonych dwóch silników. Włączanie kolejnego silnika następuje po wyłączeniu aktualnie działającego silnika. Tu nasuwa się pytanie, jak to zmienić? Tak, aby silniki mogły pracować równolegle niezależnie od siebie tzn. jeden silnik...
(at)matti0010 W tym temacie może znajdziesz coś ciekawego: http://www.elektroda.pl/rtvforum/viewtop... Poczytam, dzięki :) Mam nadzieję, że szybko znajdę chwilę by przetestować wszystkie rady jakie tu otrzymałem. Teraz wiem chyba jak do tego podejść, gdzie szukać i na co uważać. O wszystkim napisano w RefMan - pewnie...
Pierwsze co przychodzi na myśl to wyłączyć wszystkie przerwania, tylko czy jest to sensowne , wg mnie nie. No to jaki wg Ciebie ma cel "sekcja krytyczna" jeśli nie wyłączenie WSZYSTKIEGO? I pytanie dla tych co walczyli już z FreeRTOS portENTER_CRITICAL( ); - czy w przypadku gdy drugi wątek chce wejść do tej samej sekcji - co się dzieje procedura zamraża...
DMA jest łatwe i dobre i świetnie nadaje się do transmisji bloków danych o ustalonych długościach, pozostających pod całkowitą kontrolą oprogramowania w naszym urządzeniu, z czym zwykle mamy do czynienia przy interfejsie SPI, a czasami przy NADAWANIU przez UART. Dotychczas nie trafiłem w swojej karierze zawodowej na przypadek, gdy dałoby się sensownie...
Próbowałem już w opisany przez Ciebie sposób, zero reakcji, żeby program wyszedł z pętli while pomagało tylko zwarcie rezystorem 1k do GND, czyli ręcznie wymuszony pull low. Datasheet DS18x20 znam już na pamięć :( funkcja opóźniająca: [syntax=c] volatile int delayFlag; void delayTimerConfig(){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); TIM_TimeBaseInitTypeDef...
próbowałem wobec tego zrobić funkcję dla USB_HP_CAN_TX_IRQHandler niemniej bez rezultatu. W odruchy bezsilności zdefiniowałem jeszcze dla [syntax=c] void ADC1_2_IRQHandler(void) { while(1); } void TAMPER_IRQHandler(void) { while(1); } void DMA1_Channel7_IRQHandler(void) { while(1); } void DMA1_Channel1_IRQHandler(void) { while(1); } void USB_HP_CAN_TX_IRQHandler(void)...
Zwróź też uwagę, że w cytowanym przez Ciebie dokumencie nie ma ani słowa o Cortex, a Cortex jest w tym aspekcie inny od wszystkich dotychczas produkowanych procesorów. Sorry, ale dalsza dyskusja nie ma sensu, skoro twierdzisz że wiesz wszystko o Cortexach, tylko nie to, że są one częścią architektury ARMv7-M... No i jeśli te dodatkowe instrukcje uważasz...
Zresztą wcale nie ma tu jakiegoś wielkiego zapasu - mikrokontroler działa na 3.3V, dopuszczalne napiecie dla M95512-W to 2.5V minimum - tylko 0.8V różnicy. Też sobie wybrałeś kość (M95512-R i F mają 1,8V i 1,7V). To faktycznie rodzi problem, bo STM32 działają poprawnie przy obniżeniu do poziomu określonego przez power down reset (n.p. 2V). Czyli nie...
Napisałem delay oparty o timer konfiguracja TIM1: void TimerConfig() { RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_ClockDivision=... TIM_TimeBaseStructure.TIM_CounterMode=TI... TIM_TimeBaseStructure.TIM_Period=72; TIM_TimeBaseStructure.TIM_Prescaler=1;.....
Hej, dziękuje za źródła. Przedstawiona przeze mnie procedura działa, pod warunkiem wyłączenia przerwań, więc próbuje przenieść ją tak żeby wykorzystywała przerwania. Obsługa przerwań wygląda tak (na razie robie tylko odbiór rejestru) [syntax=c] void I2C1_EV_IRQHandler(void) { uint32_t event = ( (uint32_t)(I2C1->SR1) | (uint32_t)(I2C1->SR2)<<16...
Sprawdziłem: 1. Najpierw zmieniłem kolejność konfiguracji rejestrów na taką jak funkcja - działa wszystko dobrze: nie działa 3. Zmieniłem kolejność konfiguracji, najpierw SCL, potem SDA - o dziwo działa ; 4. Zmieniłem kolejność inicjalizacji za pomocą funkcji: działa . Wniosek: Istotna jest kolejność konfiguracji, zaznaczam, że w momencie inicjalizacji...
Witam. Jestem w trakcie pisania bootloadera po magistrali CAN dla STM32F103VE. Opieram się głównie na publikacji AN2557 zamieszczonej na stronie ST. Potrafię przesłać aplikację użytkownika po magistrali CAN do uC i zaprogramować pamięć Flash od wybranego adresu w górę. Na wstępnie odblokowuje pamięć Flash (FLASH_Unlock(); ) następnie podgrywam aplikację...
https://obrazki.elektroda.pl/3252078300_... Poniższy artykuł przedstawia – krok po kroku – wykonanie niewielkiego, kieszonkowego oscyloskopu cyfrowego. Nie jest on tak dobry jak zwykły warsztatowy oscyloskop, ale z drugiej strony można zabrać go niemalże wszędzie. Poza tym – nie wszystkie projekty DIY muszą mieć sens....
jeśli chodzi o inne przerwania od układów peryferyjnych to poza ustawieniem rejestrów tego układu muszę włączyć to przerwanie i czy tu wystarczy funkcja z core_cm3 np. NVIC_EnableIRQ( RTC_IRQn ); tak I dlaczego nie musiałem włączyć globalnych przerwań żeby SysTick działał?;] Przerwanie SysTick jest w grupie exceptions, ich się nie da wyłączyć w NVIC....
Timer wyzwala taki pomiar, jaki zaprogramowałeś w ADC. Jeśli zaprogramowałeś kolejny pomiar czterech kanałów bez discontinuous mode, to ADC zmierzy 4 kanały. Problem ze sprzętowym startowaniem polega na tym, że wybrałeś zdarzenie CC1, a nie reload/update. Sprawdź, czy da się wyzwalać ADC innym zdarzeniem timera, a jeśli się nie da - zaprogramuj blok...
Po kilku godzinach program odpaliłem ..... podświetlanie się załącza dopiero po naciśnięciu kilka razy klawisza, monitor pokazuje start i numery naciśnietych klawiszy i to nie za każdym naciśnięciem. nie wiem jak "zatrzymać" dany ekran menu żeby zrealizować inna funkcje np; zmiana stanu wyjścia /* * sterownik który wykończy mnie i innych ..............
W normalnym świecie SPI działa w ten sposób, że wysyłając jeden bajt, odbiera się jeden. Pisząc pewien ogromny program, używałem powyższego założenia implementując obsługę SPI1 z pomocą kanałów DMA (DMA1_Ch2 i DMA1_Ch3). Jeden kanał używany do transferu bloku z pamięci RAM do SPI1->DR, drugi kanał do transferu w drugą stronę. Wszystko działało bez najmniejszego...
Witam, napisałem sobie kod z wykorzystaniem bibliotek STM32 peripheral , w którym robię pomiar na potencjometrze za pomocą przetwornika ADC. Po zakończeniu każdego pomiaru mikrokontroler wchodzi w przerwanie, w którym chcę przesyłać wynik pomiaru na PC za pomocą USART. Niestety coś idzie nie tak, gdyż program wysyła co najwyżej 2 pomiary i potem się...
Ustawienie alarmów: HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); if(MAX_SAFE_ALARM_TIME_SEC<sec... sec = MAX_SAFE_ALARM_TIME_SEC; if(MIN_SAFE_ALARM_TIME_SEC>sec... sec = MAX_SAFE_ALARM_TIME_SEC; /**Enable the Alarm A */ uint8_t overflowSec = 0; uint8_t overflowMin = 0; sAlarm.AlarmTime.Seconds = (sTime.Seconds...
https://obrazki.elektroda.pl/5694434400_... Moduły zasilaczy warsztatowych, takie jak DPS5005, dostępne są od dłuższego czasum.in. na AliExpress. Doczekały się wielu recenzji, w większości pozytywnych. Jednakże często wskazywanym problemem z tymi modułami jest kiepskiej jakości oprogramowanie – interfejs użytkownika pozostawia...
http://obrazki.elektroda.pl/3796073600_1... I Opis ogólny urządzenia: Chciałbym przedstawić mój projekt bazujący na mikrokontrolerze STM32 dokładnie na modelu STM32F11RET6 http://www.st.com/content/st_com/en/prod... Jest to sterownik dla urządzenia...
Obsługa UARTa z przerwaniami jest dużo bardziej skomplikowana niż to co pokazałeś. Szczególnie nadawanie jest problematyczne, ponieważ nie można mieć non-stop włączonego przerwania, chyba że naprawdę chcesz NON-STOP wysyłać znaki. Zwykle trzeba to zrobić tak, że jak masz do wysłania paczkę, to pierwszy bajt wysyłasz "ręcznie" i dopiero wtedy włączasz...
Dobra, już chyba znalazłem... Do uruchomienia timera wykorzystałem funkcję HAL_LPTIM_Counter_Start_IT, dlatego po wyłączeniu przerwania wchodził w HF... Wystarczyło uruchomić timer funkcją bez obsługi przerwań i jest OK :)
Witam! Posiadam moduł wyświetlacza LCD 3.2", prawdopodobnie na sterowniku SSD1289 (sprzedawca twierdził, że na HX8347-A, jednak dopiero metoda inicjalizacji do SSD1289 zadziałała). Próbuję nim sterować przy pomocy mikrokontrolera STM32F103RBT6. Wszystko zdaje się działać dobrze, do czasu gdy chcę wyświetlić jasny kolor, np. RGB(240,240,240). Wtedy sterownik...
https://obrazki.elektroda.pl/6710486900_... Każdy, kto zaczyna swoją przygodę z Arduino, zwykle na samym początku staje przed dylematem w jaki sposób prosto i przejrzyście zarządzać zadaniami, które uruchamiane powinny być w określonych i najczęściej różnych interwałach czasowych. Jest to problem tzw. harmonogramowania zadań. W niniejszym...
stm32 przerwać przerwać wyłączenie przerwać stm32 przerwać
kostki brukowej radio grzać końcówka wtrysk matiz
karta graficzna wzmacniacz mikrofonowy
Brak komunikacji z modułem ABS w Peugeot 307 2.0 HDI Bezpiecznik zamka bagażnika Nissan Versa