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.
Pokaż log kompilacji po zrobieniu "clean".
Możesz dowolnie zmieniać tryb pracy Timera.
Nie wiem czy to chciałeś osiągnąć, ale pin masz ustawiony na floating. Definicja w komentarzu była dobra, wartość liczbowa - zła. Przykłady znajdziesz w wyszukiwarce forum, w ostatnich tygodniach tematów o EXTI było kilka. 4\/3!!
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....
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.
dziękuje wszystkim za pomoc. Zamykam temat
[syntax=c]przerwanie_timera(void) { static uint16_t utimer = 0; if (utimer) utimer --; switch (stan_bramy) { case ZAMKNIETA: if (chcemy_otworzyc) { utimer = MAX_CZAS_OTWIERANIA; otworz(); stan_bramy = OTWIERANIE; } break; case OTWIERANIE; if (czujnik_otwarcia) { stan_bramy = OTWARTA; utimer = CZAS_OTWARCIA; } if (!utimer) // awaria break; case OTWARTA:...
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...
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.
Może to na początek. [url=https://www.digikey.com/en/maker/pr... [url=https://community.st.com/s/article/...
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 |...
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...
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ł...
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!!
Ta biblioteka została stworzona po to, żeby ich nie rozumieć jako nadrzędne "wysokopoziomowe" API. Jak chcesz je znać w szczegółach to jej nie używaj i wtedy nota Ci wszystko wyjaśni. Nie mam pojęcia czemu to nie działa, analogiczny kod pisany z notą w ręku bez użycia bibliotek działa tak jak chcesz żeby działał.
Z warunkiem jest raczej wszystko ok, bo jak wspomniałem wcześniej przy wewnętrznym źródle taktowania timera wszystko działa poprawnie. Musiałem coś skasować podczas przenoszenia, w kodzie mam GPIOA -> AFR[0] |= (1<<5);
A musisz te dane pchać cyklicznie co jakiś czas czy generalnie kiedy tylko się pojawią? Jak źle kombinuję to mnie poprawcie, ale nie lepiej byłoby wykorzystać tu FSMC i pisać po prostu pod odp. adres?
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?
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...
Cześć, Chcę skonfigurować w STM32 4xPWM na jednym Timerze. Tak żeby Timer ciągle działał, ale jednocześnie móc załączać wypuszczanie sygnału PWM na określone piny wyjściowe kanałów. Czyli Timer ciągle działa, a ja kontroluje na które kanały mają wyjść sygnały na zewnątrz procesora. Czy da się tak zrobić w HALu? Jak to skonfigurować w HALu? Pozdrawiam.
Zrobiłbyś większy gdybyś zrobił co ci się mówi. a nie żerował na innych. Oczekujesz gotowców. Bo już pokazałeś ze ignorujesz właściwe rozwiązania. A gdybyś poświecił 30sekund i znalazłbyś przykład dokładnie robiący to czego oczekujesz.
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...
Proste pytanie - czy przeczytałeś opis timera 1 w manualu? 4\/3!!
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...
Witam Panowie mam takie pytanie: używając pętli for kopiowanie np 5 tys elementów z jednego bufora od drugiego trwa jakieś ~1,85ms. Mierzę to timerem robiąc przerwania co 50us. Jak używam memcpy to 5tys elementów kopiuje w 50us a dla 10 tys jest 100us . Czy to możliwe ? czy po prostu memcpy blokuje przerwania od mojego timera
Timer w STM32 ma sprzętowe filtry itd w timerze.
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.
Chodzi o wyłączoną generację PWM, czy wyłączony timer?
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.
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...
Czyli gdzie może być problem? :)
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-...
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.
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...
A moim zdaniem obie instrukcje są sobie równoważne. Nieważne czy ustawię rejestr z zerem w miejscu, w którym znajduje się bit do wyczyszczenia, czy zamaskuję rejestr i wstawię zero. Obie instrukcje działają tak samo, obie dają ten sam rezultat w debuggerze jak i z prostej obserwacji. To, że zapis jedynki jest ignorowany, to faktycznie zapomniałem o...
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
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...
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
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...
Witam, Bazuje na projekcie ze strony Freddie Chopin dla stma F4 z dodanymi bibliotekami STM32F4xx_StdPeriph_Driver. Zdefiniowałem sobie konfigurację timer'a w następujący sposób: [syntax=c]void Timers_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptio...
No ale co Ty chcesz korzystać z przerwania od timera żeby włączyć RĘCZNIE ADC i RĘCZNIE wysłać JEDNĄ próbkę przez DMA? 4\/3!!
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...
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...
Freddie, zawężasz dyskusję do jednego aspektu. Wy trochę też, bo może w przypadku flag przerwań timera faktycznie BB niczego nie wnosi, za to w innych przypadkach już tak. a wtedy konstruktorzy od ST robią coś, co jest zupełnie nieprzydatne W STM32 równie dobrze może być tak, że rejestry timera są takie a nie inne gdyż ST akurat miało taki układ peryferyjny...
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!!
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...
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"...
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...
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.
Dziękuję za odpowiedzi.
No i mamy odpowiedź. Myślę że jak to zrobisz, to wszystko powinno zadziałać, o ile dobrze oprogramowałeś µkontroler. Serwa jako punkt odniesienia dla własnego sterownia brały masę własnego zasilania. µkontroler podawał sygnały na wyjściach timerów w odniesieniu do własnej masy. Łącząc tylko wyjście timera µkontrolera z wejściem sterującym...
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.
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.
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.
a wyłączasz timer czy pwma ? :)
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.
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ąć...
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ść,...
Rzeczy, które zaznaczyłeś - to stałe zdefiniowane na podstawie lektury manuala - wartości bitów włączających odpowiednie tryby pracy peryferiali. MODER. A to nie powinno być zdefiniowane w pliku "stm32f0xx.h" aby wykorzystać w kodzie programu? Opis, który wkleiłeś plus opis bitów w rejestrach daje komplet informacji potrzebnych do zaprogramowania timera....
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...
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...
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?
No dobrze. W przypadku STM32F103RB TIM1 jest połączony z DMA1. :) Czy masz ustawiony bit TDE w TIM1_DIER? Musi być ustawiony, aby wyzwalać DMA. Nie pytaj gdzie to jest w HAL; nie wiem. Możesz ustawić bit przez TIM1->DIER |= TIM_DIER_TDE;
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...
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
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....
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.
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.
TIM1 może generować żądanie DMA lub przerwanie co określoną liczbę okresów, niekoniecznie w każdym okresie. DMA może zmieniać parametry przebiegu. Na moje oko użycie drugiego timera niekoniecznie jest tu dobrym pomysłem
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)
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...
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.
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...
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ć...
A gdzie masz ustawienie bitów SW na PLL w RCC?
Moduł AFIO trzeba włączyć tak samo jak trzeba włączyć GPIO, timer, przetworniki i każdą inną rzecz zanim jej użyjesz. 4\/3!!
tylko nie bardzo rozumiem po co :?: Bo nie można dzielić przez zero. Jeśli PSC wynosi 0, to dzielnik faktycznie ma wartość 1. No i dlatego trzeba to 1 odjąć od dzielnika jaki chcesz uzyskać, aby się zgadzało.
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
http://www.elektroda.pl/rtvforum/topic19...
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.
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...
A konkretnie, to czego z kodu inicjowania timera nie rozumiesz po przeczytaniu rozdziału o timerach z Reference Manual? Masz tam obrazki, opisy działnia i szczegółowo rozrysowane i opisane rejestry sterujące.
Możesz, poczytaj w RM8 jak można to zrobić bo fizyczne wyjście z Timera do wyzwalania ADC jest Ci niepotrzebne.
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.
Da się, zobacz arttykuł w EP z grudnia lub stycznia. Na STM32 można zrealizować sprzętowe sterowanie multipleksowanego wyświetlacza LED bez przerwania timera.
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!!
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.
Witam serdecznie, Z racji tego, iż nigdzie nie znalazłem satysfakcjonującej odpowiedzi na moje pytanie, chciałem je zadać tutaj. Mianowicie chce wyzwalać przetwornik A/C za pomocą Timera (nie określę jakiego gdyż nie chce się koncentrować na konkretnym). Piszę póki co programy przy użyciu wspomnianej w tytule biblioteki firmy ST. Z tego co już zrozumiałem,...
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.
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...
Witam, programowałem sobie na spokojnie (próbuję nauczyć się odpalać timery od zewnętrznych sygnałów zegarowych wchodzących na dany pin). W pewnym momencie chciałem wgrać program i otrzymałem taki komunikat: Open On-Chip Debugger 0.9.0-dev-00415-g2d4ae3f-dirty (2015-06-12-17:54) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html...
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...
timer stm32 stm32 timer pulse stm32 przerwania timer
kolumny trójdrożne wyświetlacz diodowy główka wiertarka
samsung naprawa inwertera 17mb95m ves315wnvl
Jak sprawdzić zasilacz kasy fiskalnej? Lokalizacja bezpiecznika postojowego w Scania Irizar