No tak: [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" #include "stdint.h" #include "misc.h" #define CLK_FREQ 36000000 /* User defined function prototypes */ void GPIOA_Init(void);...
Zapytam tu o inną jeszcze sprawę, bo nie chcę dla tego drobiazgu zakładać nowego tematu. Muszę ustawić timeout ramki, jezeli po odpowiednim czasie odbiornik nie odpowie, to transmisja zostaje przerwana z flagą błędu. Chcę do tego użyć timera, np.TIM4. Uruchomiony bedzie w najprostszej konfiguracji zwykłego licznika, ładowanego przed rozpoczeciem transmisji....
Wpisując w licznik wartość JEDEN zostanie wysłany JEDEN element, po czym DMA się wyłączy. To co widzisz w debuggerze nie ma tu znaczenia, może bit faktycznie wciąż jest ustawiony - nieistotne, DMA nie działa po wysłaniu zadanej ilości danych. Nie wiem też absolutnie jakim cudem chcesz "ustawiać flagę nadawania" w rejestrze CR1, skoro ta flaga jest generowana...
Witam. Dla ćwiczebności napisałem sobie funkcję zwracającą ilość cykli zegara w celu pomiaru długości wykonywania funkcji itp. Aby to osiągnąć odczytuję "PENDSTSET" oraz stan licznika SysTick. Jednak pomiędzy tymi dwoma odczytami upływa trochę czasu i wartość licznika jestem w stanie skorygować znając czas jaki upłynął miedzy tymi dwoma instrukcjami...
Proszę mnie nie odsyłać do dokumentacji, bo siedzę z nią już kilka godzin. Normalnie mi wstyd, ale nie potrafię uruchomić timera jako licznika zewnętrznych impulsów - w najprostszej konfiguracji. Nie wiem np. jak ustawić pin GPIO - jako AF dla np. TIM1_CH1??? Na razie mam coś takiego - pewnie powrzucałem masę zbędnych rzeczy a nie ma czegoś podstawowego,...
Cieszę się, że mogłem pomóc. Fakt - ciężko się w tym odnaleźć, tym bardziej, że czasem są dziwne zależności. Jak np. żeby włączyć PWM dla TIM1 trzeba ustawić bit w rejestrze od break'a i dead-time: Dodano po 57 Pomogło dzięki. Ogólnie biorąc to w tych ARM'ach strasznie dużo rejestrów trzeba poustawiać, żeby coś działało ;) Mam jeszcze pytanie dotyczące...
Z tego co mi się wydaje przed odczytaniem wartości z licznika należałoby sprawdzić flagi które mówią o tym czy w liczniku cokolwiek sensownego się znajduje... 4\/3!!
Obsłużenie dowolnej bardziej skomplikowanej rzeczy w przerwaniu polega zwykle na sprawdzeniu flag statusowych (np. rejestru TIMx->SR) _ORAZ_ tego jakie przerwania są włączone (np. rejestru TIMx->DIER). Oo, tego nie wiedziałem :D To jest jakaś nowa ścieżka poszukiwań, chociaż pomimo tego, że teraz ustawiłem przerwania dla wszystkich kanałów CC to flagi...
zostanie wysłana po i2c cała paczka danych, czy może się zdarzyć, że zostanie wysłany kawałek starej tablicy i kawałek nowej ? (w trakcie wysyłania zostaną już nadpisane dane) Czy jednak trzeba sobie jakoś samemu zapewnić to, żeby takie "zbiory" były wysyłane jako całość ? W czasie przesyłania przez DMA, możesz modyfikować zawartość, bo i tak DMA widzi...
Nie znam nowych avrów, ten kod przypomina mi STM32, natomiast w starych była globalna flaga uruchomienia przerwań, sprawdzałeś czy tutaj takiej nie potrzeba? I przez analogię do STM, czy po zmianach częstotliwości zegara, nie trzeba poczekać ileś cykli aż się ustabilizuje? Jak tam prosty przykład? No i przeniósłbym zliczanie minut do przerwania, u siebie...
Definicja tcp_timer_needed() jest w pliku tcp_impl.h, żródła w timers.c. Plik tcp_impl.h zaincludowany w tcp.c z resztą tu nic nie zmieniałem. Po dopisaniu #include "lwip/timers.c" program się kompiluje owszem i wszystko działa ale mam potem problem z kompilacją gdy chce dodać liczniki softowe pod freertos a to za sprawą includeowania pliku timers.h....
Jeśli zajrzysz do definicji funkcji NVIC_SetPriority((), zobaczysz, że dla SysTick nie rusza ona wcale NVIC. Racja, wpisuje do innych rejestrów. Ale Manual pisze że SysTick też wchodzi o NVIC. Jeszcze kolejna sprawa. Skoro Aby mogło wystąpić przerwanie należy zarówno ustawić i to co generuje przerwanie np Timer jak i NVIC. Ale co np ze znacznikiem...
Korzystam z dev board STM3210B. Timer 2 konfiguruje następująco: [syntax=c] RCC_APB1ENR_TIM2EN_bb = 1; TIM2->PSC = 36000; TIM2 -> CNT = 0; TIM2 -> ARR = 0xFFFF; TIM2_CR1_CEN_bb = 1;[/syntax] po wykonaniu pewnej funkcji licznik zatrzymuje bitem CEN. i pobieram wartość CNT; Działa wyśmienicie. Teraz gdy zmienię licznik na TIM3 to: 1. otrzymuje inny czas...
HAL_UART_Receive_IT nie dość że trzeba wywoływać cyklicznie, to jeszcze potrzebuje argumentu właśnie ilości danych Tym się nie przejmuj. Używaj tylko długości danych=1 a tą funkcję wołasz tylko jeden raz z programu na rozruch. Ale HAL_UART_Receive_IT umieszczasz też w obsłudze przerwania od RX tak by to się kręciło w kółko. A w tym przerwaniu analizujesz...
oba przerwania wykonują się z taką samą częstotliwością, niezależnie od tego co wpiszę w Pulse Nic dziwnego :) Przecież oba mają tę samą podstawę czasu, czyli rejestr TIM1->CNT. Jedyna różnica jaką mógłbyś zobaczyć, to moment przełączenia wyjścia lub pojawienia się flagi przerwania. Ale nie zobaczysz, ponieważ niezbyt szczęśliwie dobrałeś czasy 0 i...
Poza tym typowy błąd AVRowca - nieskasowana flaga przerwania. W tym przypadku akurat jest kasowana przez sprzęt sama. Jeżeli nie włączył przerwań od błędów to i tak nie będą wywoływane poza ORE, który i tak nie czyści się poprzez pisanie czegoś do SR. Zresztą ORE w tym przypadku się nie spodziewam :) Jak właczysz wywoływanie przerwań od błedów wtedy...
Mimo wszystko nie działa. Jak linijke RCC->APB2ENR|= RCC_APB2ENR_TIM1EN dodam gdzieś poniżej pierwszego odwołania do rejestrów TIMERA1 to diody nie zapalają się w żadnej kombinacji, wtedy chyba nie wchodzi do przerwania w ogóle. edit: [syntax=c]#include "stm32f10x.h" void TIM1_UP_TIM16_IRQHandler(void) { GPIOC->ODR ^= 0x300; /*break point*/ } int main(void)...
Tak oczywiście: Podobnie zresztą jak w kodzie, który wyżej dałem. [syntax=c]void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line13) != RESET) { // Czyszczenie flagi przerwania EXTI_ClearITPendingBit(EXTI_Line13); //TIM_SetCompare1(TIM2, 200); // okolo 60ms //TIM_SetCounter(TIM2, 0); // zeruj licznik // Wlaczenie timera //TIM_Cmd(TIM2, ENABLE);...
Witam, mam problem z zawieszaniem się freeRTOSa. Program grzęźnie w funkcji vListInsert void vTaskUSART3(void * pvParameters) { portCHAR i; vSemaphoreCreateBinary( xSemaphore_US3_O ); xSemaphoreTake( xSemaphore_US3_O, 0); xQueue3_TX = xQueueCreate( 32, sizeof( portCHAR ) );//32 xQueue3_RX = xQueueCreate(...
Mogę się mylić, ale w tym przykładzie kolega miga diodką wykorzystując GPIO a nie podpinając do wyjścia timera, więc gpio out pp może chyba być. Czy kol. qczek przypadkiem na koniec nie konfigurujesz ch1 w tim2 jako capture, czyli "łapiącego" i liczącego impulsy z zewnątrz? TIM_SetCompare1(TIM2, TIM_GetCapture1(TIM1) + CH1_PULSE ); Poza tym nie zauważyłem...
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;.....
No tak, zawsze mam przeznaczony dla takich zadań jeden timer, ładowany odpowiednią wartością na początku obsługi funkcji I2C, w każdej pętli while, poza sprawdzaniem danej flagi, sprzwdzany jest także stan licznika - jeżeli zostanie przekroczony, petla while zostaje opuszczona z ustawioną flagą błędu. Nie pisałem o tym, bo to chyba standard? Do tego...
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 //--------------------------------------...
Poniżej 1km/h już nie ma sensu dawać, ale fajnie że wspominałeś o tym przepełnieniu. Jeśli timer się przepełni to v=0 Jak się przepełni, to nie 0, Ale flaga. Raz jest OK, 2 razy jest źle. Chyba, że zrobisz sprzętowe zerowanie licznika.
Nie trzeba go przekonywać. Dla DMA jest wszystko jedno pod jakie adresy mają się zapisać dane. Ale nie jest mu wszystko jedno, w jakich okolicznościach ma to robić. W przypadku UART TX, DMA request jest generowany za kazdym razem, gdy flaga TXE==1 (jesli UART ma włączony DMA oczywiscie). Wtedy DMA transferuje wartość spod adresu podanego w CMAR do...
Niestety nie ma poszczególnych flag dla poszczególnych zdarzeń timerów. A co z flagami z rejestrów TIMx_SR? Koniecznie muszę wystartować oba przebiegi w tym samym czasie. To czemu nie korzystasz z mechanizmu synchronizacji liczników? (patrz opis Starting 2 timers synchronously in response to an external trigger w RM) Pamiętaj, że rejestr preskalera...
Więc, doszedłem do tego, że mam źle skonfigurowany Timer. Jak wrzuciłem kod z użyciem bibliotek to ruszyło, zaczął przesyłać w nieskończoność jakieś losowe wartości. Po pierwsze w NVICu muszę odblokować przerwanie od Timera: Tak na początek - rejestr danych USART ma 8 bitów, nie 16. Zaprogramuj transfer DMA 8 bajtów, a nie czterech słów. Liczby transmitowanych...
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...
Zrobiłem teraz oczekiwanie na timerze 6 tą przerwę (1 sek) ale nic nie pomaga: Dodano po 38 Porównałem rejestry CR przed wywołaniem kalibracji w moim i przykładowym programie. Różnica polega na tym, że u mnie włączony jest bit ADstart a w przykładzie jest wyłączony. Skąd się bierze ta różnica?
Miło mi poinformować, że po wpisaniu komendy o zerowaniu flagi przerwania całość działa pięknie. Dziękuje a ponizej zamieszczam listningi poprawne: Konfiguracje [syntax=c] void NVIC_conf(void) { NVIC_SetPriority(TIM7_IRQn,1); NVIC_EnableIRQ(TIM7_IRQn ); } void TIM7_conf(void) { TIM7->CR1 |= TIM_CR1_ARPE | TIM_CR1_URS; //włącz buforowanie rejestrów...
Witam, chciał bym prosić o rade szanownych kolegów mianowicie nie mogę uruchomić nadawania modułem nrf24l01 z pełną szybkością z użyciem przerwań od pinu "IRQ" już wyjaśniam, w trybie polingu nadawanie pakietu 32 Bajtów trwa 156us i wszystko ładnie śmiga odbieranie udało mi się uruchomić z wykorzystaniem przerwań oraz DMA, lecz gdy próbuje wysyłać za...
He, dziękuję za sprostowanie - jednak dwa miesiące przerwy w programowaniu i mi się myli :). Tak - wkleiłem te niepotrzebne linie gdyż są one z komentarzem który przynajmniej mi pomaga zrozumieć co tam się dzieje w tych komórkach rejestrów, ale zgadzam się, że również może zaciemniać ogół - i to bardzo :). Freddie napisał dokładnie i krótko, to co chcę...
KEELOQ + rolling code można wykorzystać w swoim projekcie DIY bez przeszkód? Oczywiście. Dodano po 33 Mogę zainteresowanym podać kod KEELOQ dla pilota i odbioru , oczywiście z innymi danymi pilota ;). PILOT: Dodano po 10 Bardzo ciekawy i użyteczny projekt, właściwie to prototyp, który może przekształcić się w produkt. A czego mu brakuje żeby już nie...
Witam mam problem z miganiem dwoma diodami, ale czysto sprzętowo, za pomocą timera 3 w trybie outpu compare. Pisząc program wzorowałem się na kodzie ze strony http://en.radzio.dxp.pl/stm32vldiscovery... . Mój kod różni się tylko tym, że nie wykonuje tutaj remmapu, ponieważ w moim uC (stm32f103vct6) TIM3_CH3 i TIM3_CH4...
-> BlueDraco Postraszyłeś tym DMA i teraz początkujący Kolega uczy się: "DMA jest trudne i złe, lepiej napisać to na przerwaniach". BŁĄD!! Po to jest DMA w prockach, zeby z niego korzystać, i odciążać rdzeń tu gdzie tylko się da. I tym sposobem moja konstrukcja mieli ciągły strumien z UARTa rzędu 230kB/s dekoduje, sprawdza poprawnosc, przetwarza,...
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
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...
witam, mam podobny problem, nie wiem co robię źle, chcę zapalić diodę podłączoną do PB0 za pomocą przerwania od przycisku podłączonego do PC7 lub 8. po wgraniu kodu przerwanie od SYSTICK ładnie działa, zapala i gasi na zmianę diodę na PB1, natomiast dioda na PB0 swieci się cały czas i nie ma żadnej reakcji na naciskanie przycisku.... poniżej kod.
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....
W zasadzie we wszystkich przykładach wykorzystania przerwania z UARTA nie było nigdzie czyszczenia flagi, więc założyłem, że jej nie potrzeba... gdzieś czytałem, że flaga jest automatycznie czyszczona, ale jestem laikiem więc mogę się mylić. Wdzięczny byłbym za wszelkie wskazówki jak do tego podejść. Zamiast zgadywać, zakładać i czekać na odpowiedzi...
Czesc, mam taki problem, wydawalo sie na poczatku ze banalny. STM32L4, UART pracuje w trybie circular, przy starcie wywoluje HAL_UART_Receive_DMA(), wszystko ladnie dziala do momentu kiedy wystapi blad transmisji. Gdy wystapi blad to w standardowym handlerze zwiekszany jest licznik bledow i w innym watku porownywany jest stan licznika i ponownie wywoloywane...
Dzień dobry, Sprawa wygląda tak, że chciałem zrobić zadanie 8.4 z poradnika na temat stm32. Wymodziłem sobie takie coś: Open On-Chip Debugger 0.9.0-dev-00186-g30203b3 (2014-11-09-22:49) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxyg... Info : The selected transport took over low-level target control....
Aha... czaję. Przeczytałem tamten temat i już wszystko jest jasne. A co do flag to miałem lewe wyobrażenie o pracy licznika. Myślałem, że to jest flaga informująca o tym, że licznik doliczył do ARR i wyzerowanie go spowoduje zresetowanie timera. Wybaczcie, jestem początkujący i robię jeszcze masę błędów. Dziękuję serdecznie za pomoc.
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...
Witam ,(mój pierwszy post na forum :) ) mam następujący problem , prawdopodobnie spowodowany brakiem mojej wiedzy. Otóż potrzebuję co 1 sekundę wyzwalać ADC za pomocą TImera 1 dokładnie Flagi Timera TIM1_SR_CC4IF. Wydaje mi się że ustawiłem wszystko zgodnie z datasheetem a mimo to Przetwornik mój cały czas wykonuje konwersję wchodzi w przerwanie void...
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Witaj. Także mam falownik ESB 6kW-24V. Sprawa jest generalnie prosta, tylko trzeba rozpracować poszczególne polecenia, a i to niekoniecznie, by pobrać dane z falownika o statusie i bieżącej konfiguracji. Ot wystarczy wysłać sekwencję bajtów i potem obrabiać odpowiedź. Na potrzeby pobierania statystyk - to wystarczy na dowolnej platformie (AVR/STM32/ARM/Android/PC...
Cześć, Od jakiegoś czasu borykam się z takim problemem: chciałbym odbierać po CANie ramki, wpisywać je w gotowy szablon i dalej wysyłać po USARCie na kompa w kodzie ASCII. Czegoś mi brakuje w tym kodzie i za każdą wskazówkę będę wdzięczny. Z góry dzięki:) To mój main: [syntax=c] unsigned char tx_uart[]=" ID: DL: F: T: DATA: ";//54 char ramka[55]; unsigned...
Napisałem więcej punktów więc może pomieszałem. W tej strukturze będą znajdować się bufory w formie tablicy 100 bajtów, oraz spora ilość flag pomiędzy wątkiem głównym a przerwaniami i różne zmienne pomocnicze. Taki sposób jak zaprezentowałem ma pewną zaletę: łatwo debagować, bo w dowolnym momencie mogę podejrzeć całą strukturę, wszystkie bufory itd....
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 flaga stm32 flaga przerwać stm32 flaga przerwania
zmywarka candy sygnał dźwiękowy odprężnik kompresora karta pamięci uszkodzona
MIK400/771014 - schemat i podłączenie napędu Luzy zaworowe Same Silver 95 2002 - wartości i regulacja