Witam, Po inicjalizacji timera i przed jego włączeniem przeładuj timer (zapisz bit UG do rejestru EGR),a następnie wyczyść flagę w Status Register (TIM4->SR &=~TIM_IT_Update). Dopiero po tych czynnościach włącz timer - przerwanie powinno przyjść dopiero po odmierzonym czasie.
Witam, to temu, że timer 6 będzie taktowany z prędkością 2x większa niż magistrala APB1. Wytłumaczenie masz w reference manual (u mnie Doc ID 13902 Rev 11) str. 84, 85.
Skoro plik main.cpp jest plikiem C++, a wektory są funkcjami z C, to handler obsługi przerwania musi mieć ozdobnik `extern "C"`. Wstawiaj kod i logi w odpowiednich znacznikach (code/syntax), bo nie da się tego czytać.
Możesz dowolnie zmieniać tryb pracy Timera.
Skoro nie masz problemu z timerem, to po co w ogóle o nim pisać i po co testować program który ma też przerwania od timera? Niemniej jednak na początek brawa za to, że NIE używasz słynnego i popularnego badziewia (; Wg mnie (skoro chodzi o pin zerowy), powinieneś konfigurować rejestr AFIO->EXTICR[0], a nie 1. Problemem jest manual niezgrany z plikiem...
Stos dla przerwań ustawiłeś? 4\/3!!
1. Jeśli kierunek ma wartość 0 to to przerwanie nigdy nie jest wykonane. 2. Używanie biblioteki SPL dla potencjalnie szybkiego sygnału mija się z celem. 3. Jeszcze bardziej z celem mija się używanie Exti dla enkodera skoro STM32 ma timery z wejściami enkoderowymi.
Problem rozwiązało właśnie użycie przerwań zewnętrznych. Można w funkcji obsługi przerwania EXTI sprawdzać od którego wejścia pochodzi przerwanie i zliczać impulsy z tego wejścia. Dzięki za pomoc.
Uzupełniłem o Dodano po 8 Zmierzyłem stoperem ile czasu utrzymuje się 0 V a ile czasu 0,38 V i wyszło, że 10 s 0V poczym zmienia się na 0,38 V i utrzymuje się przez 10 s i cykl się powtarza, co ciekawe wykasowałem rejestry [syntax=c]TIM3->CCR3 = 500; TIM3->CCR4 = 500;[/syntax] i działa dalej tak samo.
Witam, mam problem z obsługą timera w STM32f103ZET6 na płycie ewaluacyjnej HY RedBul v3.0. Problem polega na opóźnionym zapłonie jednej z funkcji. Realizuje to na przykładzie samozamykającej się bramy po 15 sekundach, tak aby nie zatrzymać całego programu. Generalnie udało mi się skonfigurować przerwania od TIM1, ale timer liczy cały czas, czyli jeżeli...
może popatrz na to: https://stm32.eu/2012/04/11/timer-systic... Nie mam doświadczenia z STM32. Moja odpowiedź raczej dotyczyła licznika 4-bitowego.
Ok po pierwsze zdecyduj się czy używasz kanału 1 czy kanału 2 DAC bo odpalasz DMA dla kanału pierwszego DAC ale w rejestrze DAC_CR odpalasz kanał drugi. Do tego aby działał trigger inny niż software'owy musisz ustawić bit TEN1 oraz bity TSEL1[2:0] w zależności od źródła wyzwalania. Więc dla TIM6: [syntax=c]DAC->CR = DAC_CR_DMAEN1 | DAC_CR_TEN1 |...
Może to na początek. [url=https://www.digikey.com/en/maker/pr... [url=https://community.st.com/s/article/...
W STM32 domyślnie podczas zatrzymania rdzenia timery pracują, więc podczas twojej pracy krokowej zgłaszane są setki kolejnych przerwań. Aby to zwalczyć należy w rejestrze DBGMCU->CR (w manualu DBGMCU_CR) zapalić stosowny bit dotyczący stosownego timera. Niestety nie zawsze jest to możliwe (bo aplikacja może wymagać aby timer naprawdę stale pracował...
Cześć Chciałem odpalić timer i podłączyć do niego przerwanie ale napotkałem na pewien problem, a mianowicie konfiguruję sam Timer a następnie NVIC i po włączeniu zezwolenia na przerwanie procek skacze od razu do obsługi przerwania i już z tamtąd nie wraca. Umieściłem w obsłudze przerwania zmianę stanu pinu i wstawiłem breakpointa w main-ie zaraz po...
Witam ! Posiadam mikrokontroler STM32L100RC. Chciałem napisać następujący program: Timer2 ma zliczać 5-krotne naciśnięcie przycisku i zapalać i gasić diodę w przerwaniu. Przycisk jest podłączony do pinu PA1, dioda do pinu PC9. Obsługa przerwania działała kiedy Timer był taktowany zegarem mikrokontrolera, zatem wnioskuję, że coś jest nie tak z ustawieniem...
Trzeba pewnie włączyć jeszcze globalne zezwolenie na przerwania, tylko nie mogę się tego doszukać w RM. Domyślnie przerwania są globalnie "odblokowane". W przeciwieństwie do poszczególnych przerwań, więc jest taka funkcja NVIC_EnableIRQ() czy jakoś tak. P.S.1. Nie musisz deklarować przerwania na górze, przed main(), bo i po co? P.S.2. W obsłudze przerwania...
Witam, timery w stm'ach są bardzo rozbudowane i staram się zrozumieć koncepcje działania. Napisałem standardowy kod na miganie dwiema diodami: TIM_Period i TIM_Pulse . Przy takich wartościach diody są idelanie zsynchronizowane (jedna mruga dokladnie 2 razy szybciej niż pierwsza), ale gdy zmienie wartości TIM_Period na 60000 (ewentualnie 59999) i TIM_Pulse...
Na bazie jednego z przykładów od STM zrobiłem transfer DMA z urządzenia zewnętrznego i drugi układ z transferem do urządzenia zewnętrznego. W każdym przypadku miałem zewnętrzny sygnał taktujący (zegar) danych równoległych w takt którego dane są wysyłane/odbierane. W przykładzie był do tego zaprzęgnięty któryś timer, ale nie pracował jako licznik tylko...
Jakim cudem zmiany kodu wykonywanego w pętli głównej mogą mieć wpływ na działanie tego co jest przed nią ?! Może jest coś wspólnego np. funkcja delay_ms() jest także wykorzystywana przed pętlą główną? ;) A jak wygląda delay_ms(): zwykła pętla for czy użyłeś timera?
Brak Ci preloadingu (buforowania). Wytłumaczę ten fenomen tak: Powiedzmy że Twój timer liczy od 0 do 100 (taka wartość jest w ARR), a ty nagle zmieniasz ARR na 10, tyle że aktualna wartośc licznika wynosi 50. No i teraz Twój timer musi doliczyć do 65535 żeby się przekręcić i doliczyć do tych 10. Dokładnie tak samo ma się sprawa z wartością CCR. Przed...
jaki sposób można to zmieniać na rejestrach? Jest rejestr TIMx capture/compare enable register (TIMx_CCER). https://obrazki.elektroda.pl/9768584600_...
cytat z twojego przykładu: [syntax=c]__IO uint16_t CCR1_Val = 40961; __IO uint16_t CCR2_Val = 27309; __IO uint16_t CCR3_Val = 13654; __IO uint16_t CCR4_Val = 6826; uint16_t PrescalerValue = 0; [/syntax] PS. odliczyć sekundy już trudniej widzę nie można.
Trzeba dodatkowo włączyć taktowanie bloku przerwań. Wstaw np. zaraz przed while(1) RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); Jak dojdziesz do timera to też dodatkowo trzeba włączyć taktowanie RCC_APB2PeriphClockCmd(RCC_APB2Perip...
Jakaś dokumentacja jest w katalogu firmware procka. Są tam też jakieś przykłady. Jest taka fajna pozycja o STM32 z wykorzystaniem CubeMX: https://www.carminenoviello.com/masterin...
Proste pytanie - czy przeczytałeś opis timera 1 w manualu? 4\/3!!
No to jest CM3 a nie 0 jak napisał sulfur. Z resztą żeby nie wprowadzać ewentualnych kłótni [url=http://www.st.com/internet/mcu/prod... jest źdódło. Różne częstotliwości na kanałach jednego Timera można uzyskać tylko programowo.
Kilka wskazówek: 1. Jeśli sprawdzasz dwa piny, to sprawdzaj tylko te dwa, a nie cały port: if (GPIOC->ODR & 0x300) 2. Zamiast całego warunku if ... else , możesz po prostu odwracać stan portu: GPIOC->ODR ^= 0x300; 3. W pierwszej wersji było włączanie przerwania instukcją z CMSISa - tak było całkiem OK, więc nie ma co zmieniać. 4. Profilaktycznie daj...
Timer w STM32 ma sprzętowe filtry itd w timerze.
ale teraz się zastanawiam (stąd ten post ) czy goście z CodeSourcery nie zrobili tego memcpy na DMA, bo czas kopiowania jest bardzo krótki. Nie zrobili, nie wszystkie uC maja DMA, poza tym kompilator nie ingeruje w żadne peryferia.
Witaj. Tu masz trochę o PWM czyli o sterowaniu pompą: https://forbot.pl/blog/kurs-stm32-7-licz... Poczytaj również o STM32CubeMX. Dobrym środowiskiem programistycznym jest Atollic studio. a tu masz jak odczytywać napięcie: https://forbot.pl/blog/kurs-stm32-6-pomi...
Chodzi o wyłączoną generację PWM, czy wyłączony timer?
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.
Cześć, Chcę zmieniać w Tmerze na STM32 PWM 0..99%, ale w zakresie częstotliwości od niewielkiej do powiedzmy 40kHz (zmiana liniowa). Czy jest to możliwe? Pozdrawiam.
A ktoś potrafi zmienić mi kod tego timera ? Mam po kompilacji 2 błędy ten z timera i "attachInterrupt(digitalPinToInterrupt(2... distance_count, FALLING); "
W STM32 timery chodzą nawet jak układ stoi - da się to przestawić rejestrem DBGMCU->CR. Pewnie z watchdogiem jest tak samo. Wtyczka GDB Hardware Debugging jest do znalezienia w "standardowym" repozytorium wtyczek dostępnym do wybrania zaraz po instalacji - http://download.eclipse.org/releases/ind... 4\/3!!
OK, dzieki użyłem gotowca Nie używaj gotowców w takiej banalnej sytuacji. Doczytaj co to jest ten Systick. W dużym skrócie to licznik 24 bitowy - to ważna informacja, może zliczyć maksymalnie do ok. 16 mln (2 do 24). Po doliczeniu do zaprogramowanej wartości zgłasza przerwanie. Do ustawiania wartości można użyć funkcji Systick_Config(), ale najlepiej...
Dostępne peryferia opisane są na stronie Keila, dla powyższego układu (STM32f103RC) http://www.keil.com/dd/chip/4230.htm . Podobna sytuacja jest z innymi wersjami np. STM32F107VB (tu to jest tragedia nie ma części GPIO i są tylko 2 timery i inne ograniczenia) i coś ciężko im idzie usunięcie ograniczeń bo stan się nie zmienia od ponad roku.
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...
Czyli gdzie może być problem? :)
Może by tak te impulsy na próbę podać na zwykły licznik/timer i zobaczyc ile zliczy na sek. i czy zlicza stabilnie? Przynajmniej bedzie wiadomo czy to problem bardziej sprzetowy, czy programowy.
Ja bym to zrobił przy pomocy Timera
Mnie tam brakuje ustawienia przerwania: [syntax=c]TIM1->DIER = 0x00000001;// enable update interrupt[/syntax] Ogólnie takie coś powinno działać: [syntax=c]TIM1->CR1 = 0x00000000;// default TIM1->PSC = 0x000000FF;// set max prescaler TIM1->ARR = 0x00000FFF;// set max reload count TIM1->CCMR1= 0x00000068;// set PWM mode 1 TIM1->CCR1= 0x000000FF;// set...
Nie przemawia to do mnie, w stm32f0xx.h mamy coś takiego: #define TIM_SR_CC1IF ((uint16_t)0x0002) /*!<Capture/Compare 1 interrupt Flag */ jak na mój gust zapis: TIM1->SR = ~TIM_SR_CC1IF; spowoduje najpierw zanegowanie TIM_SR_CC1IF a potem przypisanie do rejestru SR, czyli de facto wrzucimy tam wartość 0xFFFD. Zapis: TIM1->SR...
W STM32 Advanced Timery mają wyjścia komplementarne z deadtimami. Komparatorów chyba nie uświadczych, nigdy nie potrzebowałem. No to jeszcze przykład takiego STM32 w cenie poniżej 4 PLN (za Dondu, nie sprawdzałem) i już się przesiadam. Albert
Na samym końcu funkcji której używasz- TIM_TimeBaseInit() - jest wymuszany "update", co powoduje ustawienie flagi przerwania które włączasz. BTW - używasz bibliotek które zostały oficjalnie porzucone przez producenta. Takie był dobre, że stwierdzili, że trzeba to wywalić do kosza bo nic się z tym nie da zrobić [; Miliony ludzi, którzy twierdzili, że...
Popatrz na warunek pętli for - nigdy nie będzie spełniony, więc pętla nigdy nie będzie się kręcić. Może to i lepiej, bo opóźnień nie robi się na pętlach, tylko na timerach.
Tutaj masz example do tej rodziny: https://my.st.com/content/my_st_com/en/p... HRTIM to nie do końca timer do general purpose... wątpię że będziesz w stanie na nim mierzyć częstotliwość,...
Hehe :) No niestety złapałem się na tym :) Dzięki za podpowiedź!
Poradziłem już sobie z tym. Niepoprawnie było wybrane wejście wyzwalacza (TIM_TS_ITRx) dla timera5. Było ustawione 1, a powinno być 0 -TIM_TS_ITR0. Zależności między numerem wejścia wyzwalacza a timerem który go steruje przedstawia poniższa tabela: http://obrazki.elektroda.pl/3959735900_1... (Źródło [url=http://mycontroller.ru/stm32-timer-...
SysTimer jest wykorzystywany w FreeRTOS jako zegar systemowy. Ale jeżeli potrzebujesz timera(dla zliczania czasu będącego wielokrotnością zegara systemowego) dla jakiejs innej biblioteki możesz wykorzystać vApplicationTickHook(), gdy tylko masz symbol configUSE_TICK_HOOK zdefiniowany na 1 (plik FreeRTOSConfig.h). Funkcja ta jest wywoływana w przerwaniu...
Kilka dni temu wkleiłem kod inicjowania timera w STM32, zresztą podobnych przykładów znajdziesz całe mnóstwo. Bez SPL byłoby to 5 linijek kodu. Preskaler powinien mieć wartość o 1 mniejszą.
Peryferia w różnych STM32 są PRAWIE takie same. Identyczne są timery, UARTy mogą się różnić rozszerzeniami funkcjonalności (baza zawsze taka sama), SPI występuje w dwóch odmianach, USB - w kilku różnych. Seria L4 ma najmniej udziwnień i parę przyjemnych cech, np. w wielu modelach można używać USB bez kwarcu, co w F4 ani F7 nie jest możliwe. W wyborze...
http://www.elektroda.pl/rtvforum/topic19...
NVIC->ISER U mnie przerzuciłem się na funkcję CMSIS, bo faktycznie sprawdzanie dwóch plików pdf w czterech miejscach w poszukiwaniu gdzie znajduje się dane przerwanie jest trochę utrudnionę. W tzw międzyczasie znalazłem sobie coś takiego: http://www.keil.com/download/docs/363.as... (STM32 Timer Example) i przyglądam się jak to jest tam zrobione
A nie prościej będzie zamiast zmieniać polaryzację załadować wypełnienie będące dopełnieniem do okresu? (czyli przełączenie polegałoby na załadowaniu (okres - x) zamiast dotychczasowego x). Sprzętowo nie da się zmienić polaryzacji ściśle synchronicznie z okresem. Nawet użycie DMA może wygenerować szpilkę.
011<<4 Wiesz co w C oznacza zapis 011? Podpowiem, że odpowiada on liczbie 9, co binarnie odpowiada liczbie 1001. Proponowałbym napisać tam cyfrę 3. Pozatym każdy twój przykład kodu ma chyba więcej błędów. W tym momencie ustawiłeś, że timer liczy do 1, a zmianę pinu będziesz miał przy wartości 200. No to jakim cudem chcesz jakąkolwiek zaobserwować,...
Zobacz sobie obrazek nr 8 (Clock Tree) w RM0008 w rozdziale o RCC. DO: TIM2,3,4,5,6,7,12,13,14 idzie częstotliwość: jeżeli APB1 prescaler = 1 to częstotliwość APB1 w przeciwnym wypadku - częstotliwość 2*APB1 podobnie jest z pozostałymi timerami na APB2 więc jeśli uC jest taktowany zegarem 72MHz i na APB1 jest 36MHz (prescaler = 2) to tim2 i tak "działa"...
Nie. Jest jak w stm32. Uklad uart, timer czy twi można podłączyć do domyślnych lub alternatywnych pinów. I ot cały remap.
Hmm na początek może spróbuj coś prostego, spróbuj tak ustawić Timer żeby działał ci na jedno zbocze i np narastające w trybie InputCapture i generował w tym momencie przerwanie, a ty każdorazowo będziesz sobie zliczał (dodawał +1). Podpowiem tobie że Ciebie Timer15 posiada 2 kanały i może wygenerować dwa przerwania, spójrz sobie na stronę 377 w RM0041.
W rzeczywistości nie jest możliwe osiągnięcie takiej częstotliwości programowo. Zastanów się nad tym - nawet jeśli operacje które pokazałeś zajmowałyby 1 cykl (a nie zajmują!) to przy zegarze 72MHz (max dla typowych STM32) masz niby 2 cykle na zmianę, a więc 72MHz/2. 50MHz można wyciągnąć tylko za pomocą układów peryferyjnych typu timer, SPI, FSMC itd....
Czy autor wątku poradził sobie z przerwaniami?? Pytam bo zamierzam napisać bootloader do programowania kulku uC po RS485 i planuje wykorzystywać w booltoaderze przerwania od UARTa oraz Timera.
Czy aby na pewno częstotliwość przerwań od timera powinna wynosić 1kHz? Skoro masz (w teorii) 24MHz podzielone przez 24000 (preskaler), to faktycznie zegar dochodzący do samego timera będzie równy 1kHz, ale wg mnie przerwanie timera będzie co dwa jego cykle, bo timer liczy tak: 0 ... 1 (przerwanie) ... 0 ... 1 (przerwanie) ... EDIT: sekundy... normalnie...
Mam jeszcze jeden problem otóż uruchomiłem timer 1 i używam funkcji [syntax=c]TIM1_UP_IRQHandler[/syntax] do jego obsługi ale teraz postanowiłem uruchomić timer 2 i w żadnych plikach nie widzę funkcji do tego timera.
No jak wiesz ile masz zliczeń i z jaką częstotliwością chodzi timer to jeżeli łapiesz jeden okres to będzie coś jak: Fzmierzona = f taktowania timera /(Nzliczen na okres).
a wyłączasz timer czy pwma ? :)
Powiedzmy otwarcie, że o gustach się nie dyskutuje, co jest w użyciu przyjemniejsze. AVR są na pewno dużo prostsze niż ARM (prostsze znaczy także uboższe w możliwości), a czy to zaleta czy wada przy nauce od zera? Moim zdaniem zaleta. Sam chyba przyznasz, że jeśli ktoś szkoli się na mechanika (skoro już wchodzimy w tematy samochodów) to łatwiej zacząć...
Odpowiedz sobie (przy okazji możesz i nam) na poniższe pytania: Jaki to mikrokontroler? Jaka jest częstotliwość głównego zegara? Jaka jest częstotliwość zegara szyny timera? Jaka jest częstotliwość zegara timera? (to nie jest wcale takie oczywiste - są automatyczne dzielniki, przy podziale częstotliwości szyny zegar timera może być 2x szybszy od zegara...
Jeśli się gdzieś nie pomyliłem, to zestawienie obu tych linijek dla jednego kanału jest co najmniej zastanawiające. W konfiguracji niektórych peryferiów jest tak, że jeżeli jakiś bit w rejestrze kontrolnym nie jest ustawiony do odblokowania jakiejś opcji, to nie bierze się w ogóle pod uwagę bitów tych opcji. Trochę namieszałem, ale chodzi o to, że...
Wracając do tematu, czyli STM32F4DISCOVERY rozpoczęcie programowania. Chciałem sprawdzić działanie FPU wykonując proste dodawanie, mnożenie itd. float'ów w przerwaniu od timera. Ku mojemu zdziwieniu przy każdym wykonaniu instrukcji na float'ach wywala mi HardFault. Gdy wyłączyłem w opcjach korzystanie z FPU wszystko hula. Używam Keil'a w wersji dla...
Problem już rozwiązałem, użyłem 12 timerów, każdy generuje po jednym sygnale PWM. Dziękuję bardzo za rady, jeżeli później będę potrzebował jeszcze więcej sygnałów, to możliwe że wykorzystam moduł. Faktycznie spełnia wszystkie moje wymagania. Jak program się mocno rozbuduje, to pewnie będzie konieczny. Pozdrawiam
Też nie to, pomiędzy czytaniami jest opóźnienie (w readadc), ale dopisze to tu. W while dalszy kod (kreseczki) wykonuje sie dość długo - obsługa LCD, sama petla while powtarza sie co ok. 200ms. 1. Opóźnienie? A jakbyś tak sprawdzał flagę zakończenia konwersji? 2. delayadc(...)? A jakbyś tak użył do odmierzania czasu timera?
Witam piszę aplikację obsługującą silnik krokowy. Wykorzystuje do tego PWM ( Nie pytać dlaczego, tak chciał prowadzący). Na początku robiłem to na przerwaniach, ale się nie spodobało. Miałem wykorzystać do tego DMA + PWM i ładować z DMA wartości do periodu, tak aby okres ten był zmienny. Napisałem aplikację, ale niestety nie zmienia się period jest...
Sorki, pomieszałem wartości. W Xmega zegar dla timera pracował z 128 lub 256MHz, ale dla 12-bit timera uzyskałem częstotliwości PWM 16 i 32KHz. Na pewno na STM32 są także podobne timery. Co do Xmega, to nie jestem jakimś jej fanem, ale swego czasu sporo się nią bawiłem i w sporym stopniu ją poznałem, dlatego teraz biorąc się za STM32 mam jakieś porównanie.
Jeśli timer jest 16-bitowy to musisz dorzucić coś więcej - 16-bitów to zbyt mało. Licznik z którego korzystają run-time stats musi być 32-bitowy... Ja na STM32 mam to zrobione tak... 1. W FreeRTOSConfig.h mam: [syntax=C]... /*--------------------------------------... | Runtime...
W timerach STM32 jest coś takiego jak PWM Input Mode który służy do sprzętowego pomiaru wypełnienia i okresu PWM - szczegóły są w np w Reference manual. O ile jednak dobrze pamiętam to jednym timerem sprzętowo można mierzyć tylko jeden sygnał PWM. Na jednym timierze 4 kanały pewnie trzeba będzie mierzyć programowo z wykorzystaniem Input Capture Mode
1. Czy ktoś Cię zmusza do używania bezsensownych funkcji HAL zamiast prostego podstawienia, takiego jak GPIO_LED->BSRR = LED_MSK; ? 2. WS2812 z STM32 można sterować z wyjścia timera lub SPI z użyciem DMA (w nowszych modelach również z UART). Każde z tych rozwiązań jest lepsze, niż programowe przestawianie wyjścia.
Doczytałem głębiej i w sumie chyba faktycznie da się to zrobić. Wychodzi na to, że trzeba po prostu sprawdzić [; Trzeba tylko tak dobrać timer, aby jego (używane) kanały nie wypadały po kilka do jednego kanału DMA, bo wtedy się nie będzie dało. 4\/3!!
A nie masz tam czasem włączonego jakiegoś Watchdoga czy czegoś takiego co Ci resetuje procka? :)
O rany, to ta przyjemna praca z STM32 ? To ja jednak wolę LPC17xx, lub 8 bitowe PIC. Tam to jest RTC! Bo toto co opisujecie to RTC tylko z nazwy, a de facto zwykły timer. Albert
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Zupełnie nie rozumiem, w jakim celu miałbyś zapisywać rejestr timera, jeśli transmisję do WS na STM32 możesz zrobić bez timera na SPI, kodując każdy bit do WS2812 na trzech bitach zamiast na bajcie czy słowie 16-bitowym. Opis kodowania i transmisji SPI bez DMA masz w już darmowej EP 03'2014.
Jest wiele metod. Najwygodniejsze: 1. Ustaw sobie SWV data trace i pisz do jakiejś globalnej zmiennej. Bedzesz miał w CubeIde licznik taktów wyświetlony kiedy ten zapis się dokonał. Odejmiesz dwie wartości i będziesz miał wynik :) [url=https://www.elektroda.pl/rtvforum/v... pisałem Ci już o SWV Jest to potężne narzędzie...
Dziękuje za pomoc rzeczywiście nie włączyłem taktowania modułu AFIO, swoją drogą wykonuje przykłady z książki pana Paprockiego i tam nic o tym nie było wspomniane;( Idziemy dalej z nauką-teraz czas na Timery.
Nie znam frameworku arduino dla stm32 ale wygląda na to że konfigurujesz timer ale go nie startujesz. tutaj jakiś przykład jak korzystać z timerów https://github.com/rogerclarkmelbourne/A... Spróbuj zmodyfikować funkcję void...
Niestety na STM'ach nie da się w prosty sposób zrobić generatora impulsów o liniowej częstotliwości. Proponowałbym taktować jakiś timer mikrokontrolera sygnałem zegarowym z DDS'a (będziesz miał skok 0,2Hz w zakresie 0 - kilku MHz przy zastosowaniu AD9834)
No ale w innych mikrokontrolerach jakoś jest to możliwe bez "cudownych" narzędzi, tutaj robi się to tak samo. Ja np otwieram arkusze excela, wypisuje co mi potrzebne, potem sprawdzam czy tak się da - oczywiście najpierw wśród "normalnych" pinów. Jeśli nie da się "normalnie", to przechodzę do tych zremapowanych, cały czas patrząc na manual (co wtedy...
Dane którymi będę karmił ten generator to jest wypełnienie czy częstotliwość. Wypełnienie. Timer będzie generował przebieg o stałej częstotliwości Częstotliwość ta powinna być większa od częstotliwości słyszalnej.
A gdzie masz ustawienie bitów SW na PLL w RCC?
W jakimś przerwaniu timera migasz diodą. w trakciemigania sprawdza jakąs flagę czy ma migać a jak nie to wylacza diodę. W pętli jak klawisz sie nacisnie (zakładamy tylko jeden stan - wyłaczenie - a właczenie migania następuje poprzez inny magiczny przycisk = reset) ustawiasz flagę na niemiganie. Jezeni wyłaczenie ma nastapić natychmiast (a nie przy...
Idź przez instrukcje asma zamiast instrukcjami C i zobacz co sie dzieje pod &TIM4->SR gdy wykonuje sie sekwencja rozkazow BIC i STR. Takie dwa powinny tam być. Sprawdź również, czy proces zatrzymania rdzenia zamraża timer. Jeśli nie, to timer chodzi caly czas nawet przy zatrzymanym rdzeniu, i nie zauważysz najpewniej momentu kiedy ten bit jest zerem.
W czwartym poście w tym wątku napisałem, że tak działa timer w STM32 - na początku okresu ustawiane są znaczniki porównanie dla kanałów, których reejstry porównania mają wartość większą niż ARR.
Co do TIM3->SR &=~TIM_SR_UIF; przyznam, że dalej nie rozumiem jaka jest różnica w obydwu przypadkach kasuje tylko JEDEN bit nie CAŁY rejestr. W jednym przypadku zeruje jeden bit, w drugim przypadku zmieniam jego stan na przeciwny. Operacja logiczna na którą się tak uparłeś i zamierzasz bronić do ostatniej kropli krwi generalnie ma same wady i zero...
Jeśli ten STM32 nie będzei miał prawie nic innego do roboty, to i programowo mógłby to dekodować. Sensowniej jednak byłoby zaprząc do tego timer w trybie pomiaru okresu i szerokości PWM. Uda się i jedno i drugie, o ile nie będziesz korzystał z SPL.
Główne różnice to obecność "zanegowanych" sygnałów wyjściowych (OCxN) z opcjonalnym deadtime oraz wejście "hamulca" (BKIN). Timery w STM32 są niesamowicie rozbudowane... 4\/3!!
Witam, Czy zmiana TIM_TimeBaseStructure.TIM_Period podczas działania programu powinna zmienić licznik (częstotliwość) dynamicznie, czy należy ponownie użyć funkcji TIM_TimeBaseInit? Czy jest jeszcze inny sposób? No takiego pytania w tych czasach się nie spodziewałem. Trzeba użyć init, a jeszcze lepiej zrobić to bezpośrednio. przez TIMx->ARR.
Jak już się upierasz przy "flagach", to może konsekwentnie również je "kliruj" i "setuj". ;) Ja wolę ustawiać znaczniki niż "setować flagi". Flagi to się raczej wywiesza, zwłaszcza o tej porze roku. Jak działa SR timera w STM32 - to dokładnie wiadomo - "w0c". żadna filozofia tego nie zmieni, a operacja &= skutkuje błędami, jeśli oprogramowanie ma reagować...
sprawdź w dokumentacji czy aby po zresetowaniu flagi przerwania timera nie trzeba odczekać kilka instrukcji (2-3 NOP'y). Jeżeli tak jest, to w przeciwnym wypadku zaraz po wyjściu przerwanie otworzy się drugi raz i w tej sposób dioda mrugnie tak że tego nie zauważysz. Możesz to sprawdzić tak że diodę ustawisz na zapłoną (a nie stan przeciwny), to po...
Jeśli chcesz uzyskać minimalny narzut czasu procesora na obsługę wyświetlacza - w ogóle nie czytaj znacznika BUSY, bo jego wyzerowanie nie oznacza gotowości. Obsługuj wyświetlacz w przerwaniu timera. Jakiś czas temu obsługa HD44780 na STM32 w przerwaniu timera była pokazana w EP. A pierwszy błąd w Twoim kodzie jest tu: LCD_EN_bb=0; LCD_EN_bb=1; - wymagany...
Rozumiem, ze jak mam 3 zadania/watki/taski, to bajer polega na tym, ze wszystkie zmienne uzyte w danym watku, sa zrzucane/zapamietane - kontekst. Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). A co jak sie zadeklaruje jakas tablice TAB Generalnie nie da się zadeklarować...
timer stm32 stm32 timer pulse stm32 przerwania timer
sonda uruchomienie piekarnik zawiasy ciśnienie zbiorniczek
kymco schemat elektryczny temat wałkowany wielokrotnie
Radmor 5102 TE - brak dźwięku, świeci wskaźnik częstotliwości Błąd F3 w wózku widłowym Still ECH 12 - przyczyny i diagnostyka