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.
W tym projekcie w którym Ci to nie działa pewnie nie masz prawidłowych wektorów przerwań, bo w pliku startup_stm32f030xc.s nic ciekawego nie ma (tylko same zera).
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.
Mam problem z programem w którym timer ma zliczać impulsy (zbocza opadające). Konkretnie zegar timera ma działać w rytm impulsów podawanych na piny TIM4_CH1 i TIM4_CH2, z tym, że osobno liczę impulsy z każdego kanału i generuję osobne przerwanie dla każdego kanału. Liczenie impulsów z dwóch kanałów powinno działać jednocześnie. Impulsy pochodzą od 2...
dziękuje wszystkim za pomoc. Zamykam temat
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...
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!!
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);
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...
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?
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...
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...
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...
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.
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...
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.
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.
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.
(zmiana liniowa) Liniowość może być w stosunku do czegoś. Np Liniowa zmiana w cześtotliwości w stosunku do napięcia podanego na ADC. Ale jeżeli będziesz mierzyć napięcie na potencjometrze logarytmicznym to już zmiana nie będzie liniowa w stosunku do kąta przeręcenia tego potencjometru.
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!!
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.
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? :)
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
Kupa błędów, trudno, żeby działało. Nie wiem, czy wszystkie wyliczę: 1. W komentarzach jest TIM1 ch1, TIM1 ch2, TIM1 ch3, ale kody pod tymi komentarzami są identyczne (tylko rejestr CCRx jest zmieniony) - niby czym się różni inicjowanie dla poszczególnych kanałów? 1a. Rejestry PSC i ARR są określone dla timera (wspólne dla wszystkich kanałów), więc...
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
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...
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...
r"]Myślałem że zmieniam płytkę, wgrywam nowy bootloader i działa tak samo jak inne arduino. Wykonywałem procedurę z tego linku https://geektimes.ru/post/277928/ Będzie "działać tak samo" o ile ograniczysz się do kodu arduino bez odwoływania się bezpośrednio do sprzętu specyficznego dla danego MCU (jak chociażby timery w podanym przykładzie). Swoją...
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...
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...
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...
http://www.elektroda.pl/rtvforum/topic19...
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...
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!!
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.
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...
Dziękuję za odpowiedzi.
Skąd bierzesz sygnał wejściowy? Mam nadzieję, że nie z przycisku - wtedy będziesz miał kilka zatraśnięć timera przy każdym naciśnięciu i zwolnieniu. TIM2->SR&=!TIM_SR_CC1IF ; // Zeruję flage - to inaczej TIM2->SR &= 0; Ta instrukcja zeruje wszystkie znaczniki źródeł przerwań timera. Całkowicie niepotrzebnie używasz też: NVIC_SetPriorityGrouping( 5);...
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...
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 ? :)
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ść,...
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ąć...
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.
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...
Możesz, poczytaj w RM8 jak można to zrobić bo fizyczne wyjście z Timera do wyzwalania ADC jest Ci niepotrzebne.
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...
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...
Jak się bawisz Keilem, to prześledź sobie działanie programu w symulatorze jak nie masz debuggera. Zobacz też czy masz zdefiniowane przerwanie od systick i co ono robi, jak nie grzebałeś nic w pliku konfiguracyjnym, to z automatu on jest włączany na wartości domyślne.
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
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.
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....
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
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.
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...
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)
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.
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...
A gdzie masz ustawienie bitów SW na PLL w RCC?
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
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?
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.
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!!
To nie ma znaczenia, i tak zostanie skonwertowane do całkowitego 23. Ale w sumie faktycznie śmiesznie wygląda [; Co do problemu, to jak masz oscyloskop, to sprawdź czy przypadkiem na samym początku na pinach nie dzieje się coś baaaaardzo dziwnego. Ewentualnie pokaż te przebiegi i porównaj je z przebiegami z kontrolera który masz. 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.
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...
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ć...
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...
Zapomniałeś tylko dopisać, że ustawiłeś samodzielnie bit UDIS w rejestrze CR1 timera, który właśnie coś takiego powoduje. Nie wiadomo jednak po co go ustawiłeś. Nie potwierdzam, nie zaprzeczam ale faktem jest, że obecnie nie ustawiam bitu UIDS w rejestrze CR1 i bez ustawienia bitu UG w rejestrze EGR preskaler nie działa poprawnie. Poniżej kod jakim...
timer stm32 stm32 timer pulse stm32 przerwania timer
regulator spali tranzystor openocd winarm skrypt dostep
schemat kabli radia napęd silnik wycieraczek
Rezystancja czujników temperatury NTC i PTC w lodówkach Ariston, Hotpoint, Indesit – wartości i pomiary Czerwona dioda zmienia się na zieloną i miga - przyczyny