...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,...
Na pewno nic nie wraca do wartości domyślnych po wyłączeniu przerwania w NVIC... 4\/3!!
choć myślałem, że kiedy nie ruszam niczego co ma związek z CC to on nie porównuje.. To źle myślisz. Włączenie CC to tak naprawdę włączenie tego co dalej. Czyli sterowania kierunkiem liczenia reakcje wyjścia OC itp itd. Porównanie działa nawet gdy CC jest wyłączone.
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?
U mnie w kodzie nie ma ...... /* * sterownik dla Margas * wersja dla NUCLEO STM32F446RE * działa dzieki życzliwości i zaangarzowaniu członków forum ELEKTRODA * wspomagających moją skromną wiedzą programistyczną * za co jestem im bardzo a to bardzo wdzęczny * data xx-xx-2024 */ #include "STM32TimerInterrupt.h" #include "STM32_ISR_Timer.h"...
Byłem przekonany, że po wyłączeniu EXTI flagi sie nie zmieniają. Czyli muszę wyzerować flagę poleceniem EXTI_ClearFlag(EXTI_Line0)?
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...
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.
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...
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;...
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?
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;...
Tu też nie trzeba nic robić w przerwaniach - wystarczy zaprogramować timer. Jeśli trzeby wygenerować określoną liczbę impulsów - trzeba odliczyć je w przerwaniu timera i po kolejnym przerwaniu wyłączyć timer albo ustawić wypełnienie na 0.
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,...
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...
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...
Wyłączenie przerwań i ponowne ustawienie wektora przerwań na początku głównej aplikacji Kod C - Bo zapewne Twoja aplikacja w magicznych funkcjach typu SystemInit() ma zakodowane na stałe ustawienie wektorów przerwań na 0x8000000. Co trzeba zmienić w opcjach debuggera, aby działał poprawnie? No debuggowanie takich kombinacji jest nieco problematyczne,...
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,...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
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...
Na wstępie odrazu zaznaczam nie znam FreeRTOS :) - pytam się o niego z tego powodu że dokumentacje FreeModbusa mozna zrozumieć jedynie dzieki przykładom - bo jest dość uboga :). Sekcja krytyczna ma blokować dostęp do współdzielonych zasobów a nie do wszystkich zasobów- tak przynajmniej mi się wydaje. Prosty przykład mamy powiedzmy układ który ma za...
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...
Zwiększ rozmiar stosów, bo przerwania mogą po prostu przepełniać stos. No i jeśli ich nie potrzebujesz, to wyłącz możliwość przerwań zagnieżdżonych. 4\/3!!
(at)_lazor_ Reset Handler Raczej ciężko nazwać to przerwaniem. Stany wyjątkowe, jakim jest NMI i RESET, to przerwania o ujemnym priorytecie. Przerwań tych nie można wyłączyć. w ARM RESET jest przerwaniem.
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...
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...
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....
Rzecz w tym, Panowie, że te bramki tam są i robią ten OR czy AND, chociaż oczywiście robią go szybciej niż procesor. Ciekawe byłoby porównanie czasu wykonania sekwencji kilkudziesięciu zapisów słów 32-bitowych i kilkudziesięciu zapisów BitBand, przy założeniu, że procesor wykonuje w obu przypadkach wyłączenie instrukcje STR, bez obsługi pętli i modyfikacji...
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"...
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...
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...
Ale wtedy rozbieżność będzie jeszcze większa (; chyba mniejsza. CYCCNT liczy wszystko - włącznie z przerwaniami. Tak ze trzeba odjąć czas w przerwaniach, albo je wyłączyć do testów
Brak timerinit(), więc nie wiemy, co robi. A to co?: osThreadInit(); osKernelStart(); timerInit() zamieściłem w pierwszym poście, powtarzam: Dodano po 15 Buforowanie rejestru preskalera? Po konfiguracji rejestru TIMx_PSC dodaj ustawienie bitu TIMx_EGR_UG i daj znać czy pomogło ;) Dodałem to o czym piszesz: [syntax=c] void timerInit(void) { /* Włączenie...
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...
Czy mnasz jakieś przerwania które mogą być wywoływane w trakcie odczytu rejestrów? Jeśli tak to podczas odczytu rejestrów spróbuj wyłączyć przerwania i zobacz czy dalej wywala.
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;.....
Tu nie ma za dużo do przerabiania. Trzeba zrobić od nowa. Z powyższego przykładu to co najwyżej literki sobie można wykorzystać do napisania nowego kodu :D. Miganie diody pasuje zrobić na Timerze. Na przerwaniu EXTI migania nie zrobisz w ogóle. Na EXTI to co najwyżej można zrobić oczyt stanu przycisku, ale to też niezbyt dobre rozwiązanie bo utrudnia...
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ę...
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...
Jaka jest wielkość tego większego kołowego bufora i czy jest podzielna przez 3? Co ile sekund bufor się zawija? Gdyby nie był, przyczyna "przeskakiwania" byłaby raczej bardzo prozaiczna ;) Bufor jest malutki, 64x3 bajty. Jest takim pośrednim stopniem przed finalną obróbką danych. Do tego bufora trafiają paczki po 3 bajty, następnie w przerwaniu DMA...
Bez taktowania nic nie będzie działać. Funkcja zapisuje dane pod adresy które są wyłączone, więc możesz tam wpisywać co chcesz. 4\/3!!
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...
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...
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...
Wyłączyłeś przerwania przed skokiem do aplikacji. Działa. Wydaje się że to celna uwaga. Ale nie rozumiem dlaczego. Te 2 apki nie są ze sobą powiązane, więc może procek ma włączone przerwania by default i nie ustawia tego po resecie. Z drugiej strony, znalazłem to gdzieś w zakamarkach internetu , przeglądając 10tki bootloaderow - większośc ma ten jump...
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...
No tak... ;) Mam jeszcze takie pytanie, napisałem ostatnio funkcję opóźnienia (delayus/delayms). Generalnie działa poprawnie, ale dzieje się jedna dziwna rzecz, której przyczyny nie mogę znaleźć. Opóźnienie zrobiłem z wykorzystaniem timera TIM2. Działa to tak, że gdy jest wywoływana funkcja delayus to włączany jest TIM2, wpisywana jest wartość do rejestru...
Pierwsza propozycja, w czwartym wywołaniu zamiast oczekiwać 10000 itemów przestaw się na oczekiwanie 8400 itemów, wtedy nie będziesz musiał przerywać pracy DMA w innym przerwaniu (takie przerwanie pracy może powodować błędy). A miałem napisać w pierwszym poście że nie ma to sensu :D Taki sam efekt uzyskam ustawiając transfer na 9600 itemów. A nawet...
Ściągnąłem ten sprintf_ ale przy kompilacji co chwila o coś woła jakieś usarty i inne.. A wystarczyło zajrzeć do pliku nagłówkowego i wyłączyć "printf", no ale co kto lubi. Nikt nie powiedział, że to bezobsługowe. 4\/3!!
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...
(...) początek przerwania 1. gasimy wszystkie wspólne zakończenia (katody/anody) 2. wystawiamy na linie segmentów kombinację odpowiadającą znakowi 3. zapalamy odpowiednie wspólne zakończenie dla kolejnego wyświetlacza koniec przerwania O to chodzi. Musi być pewien czas (rzędu kilku mikrosekund) między wyłączeniem starego i załączeniem nowego wyświetlacza....
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 :)
Próbuję zbudować szkielet programu wykorzystując płytkę STM Discovery F072. Trzy podłączone potencjometry (przez ADC) , które mają sterować częstotliwością na wyjściu DAC. Dotyczy to częstotliwości akustycznych. Planem jest budowa prostego syntezatora FM. Piny PA4 lub PA5 są skonfigurowane jako wyjścia DAC1 i DAC2 odpowiednio. Kod programu jest umieszczony...
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...
stm32 przerwań globalne wyłączenie przerwań stm32 obsługa przerwań
termostat danfoss parametry kamera cofać przekaźnik schemat elektryczny układu zapłonu
renault mascott renault mascott
Dynamiczny kierunkowskaz LED 6 diod – najprostszy układ NE555 + CD4017 lub ATtiny85 Ogranicznik prądu do wiatraka: wewnętrzny czy zewnętrzny? BLDC, DC, AC, PolyFuse, e-Fuse