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.
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.
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?
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.
Czy zna ktoś odpowiedź, dlaczego nie mogę z powrotem zmienić pinu na PWM?
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...
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.
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!!
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.
Chodzi o wyłączoną generację PWM, czy wyłączony timer?
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ł.
Stos dla przerwań ustawiłeś? 4\/3!!
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ść, 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 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 więc działa. Gratulacje :) Docelowo chcę zrobić co innego: Muszę próbkować 4 kanały ADC1 w przemiataniu i wysyłać wartości po USART do komputera. Tylko, że kanał 4 DMA zajmuje się USART1 TX a kanał 1 ADC więc jeszcze nie mam pomysłu jak to połączyć. Kolizja DMA nie występuje, bo są różne kanały. Po prostu jeden poczeka na drugi. Jak najbardziej sensowne...
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...
Proste pytanie - czy przeczytałeś opis timera 1 w manualu? 4\/3!!
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...
Timer w STM32 ma sprzętowe filtry itd w timerze.
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.
Może to na początek. [url=https://www.digikey.com/en/maker/pr... [url=https://community.st.com/s/article/...
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...
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...
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...
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...
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.
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
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.
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.
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.
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
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...
Z czym może to być związane ? Z tym, że jedna funkcję masz skompilowaną w swoim projekcie a drugiej nie masz. Jaka jest różnica między: SysTick_CLKSourceConfig i SysTick_Config ? Pierwsza konfiguruje tylko źródło zegara dla systick. Druga dodatkowo włącza timer, przerwania oraz zapisuje wartość którą będzie przaładowywany 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.
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.
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 tak, to pewnie dlatego, że timer chodzi (czyli jak se wpiszę TIM4_STOP do DBG) to będzie okej. Tym bardziej, że wszystko wyglądało że chodzi okej, tylko podczas debugowania innej rzeczy to mi się nie zgadzało. No i dzięki Dosinksy za wskazanie tej notacji. Jeszcze tak zdesperowany nie byłem, żeby przeczytać wstęp do manuala. Szukałem oczywiście w...
Jeśli się mogę jeszcze wtrącić, to okres PWM a wypełnienie to dwie różne rzeczy. Ma to znaczenie np. przy zadawaniu sygnałów referencyjnych. Zmieniając rejestr CCRx wprowadzasz jedynie wartość do porównania dla PWMa, a jego okres jest taki jak w zainicjalizowanej strukturze. Jedynym sposobem zmiany okresu jest reinicjalizacja danego timera.
Niestety nie ma takiej możliwości przez tą funkcję. Bliżej tego co oczekujesz jest funkcja OSTimeDly, w której podaje się liczbę tick'ów. Mimo to ograniczeniem pozostaje częstotliwość przerwania systemowego. Musiał byś je znacząco podkręcić. Jednak do 1us nie zejdziesz - nakład na wywołania funkcji systemowych jest zbyt duży. Lepszym rozwiązaniem przy...
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ą.
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...
Witam, Mam skonfigurowany TIM1 na pracę w trybie komplementarnych wyjść w 3 kanałach z martwym czasem. Chciałbym móc chwilowo wyłączyć jeden z kanałów - żeby na obu wyjściach komplementarnych był stan niski. Oczywiście zapis wartości 0 nie wchodzi w rachubę. Jak najlepiej to zrobić ? - Skonfigurować chwilowo GPIO jako wyjście ? - Zdezaktywować jeden...
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...
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...
(at)szczywronek LCD_WriteText nie ma żadnych opóźnień od innych przerwań. Funkcja zawiera jedną instrukcję...która pośrednio odnosi się do jeszcze 3 innych funkcji. Jednak żadna z nich nie wykorzystuje przerwań. Tak, posiadam debugger. Działam na openocd+eclipse oraz startupie Freddiego. (at)BlueDraco Dziś podczas kolejnych nieudanych prób ten sam...
Sygnał w żaden sposób nie jest niestandardowy. Toż to zwykły PWM, który jak najbardziej można wygenerować sprzętowo wykorzystując jeden kanał timera oraz wyjścia zwykłe oraz zanegowane. Jeśli między zboczami obu kanałów ma być odstęp czasowy to jest możliwość (dla advanced timers) skonfigurowania tzw. dead-time. Jak to skonfigurować? W Arduino nie mam...
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.
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...
a wyłączasz timer czy pwma ? :)
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 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.
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!!
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ąć...
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.
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ć...
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ć,...
Zupełnie inny układ, zupełnie inne timery obsługiwane przez zupełnie inne rejestry :) I tak, przerwania też trochę inne (nvic).
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!!
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)...
Poza tym rejestr SysTick jest rejestrem kontrolera NVIC. Ciekawa teoria... 4\/3!! Dla niedowiarków : http://echiny.pl/piotr/arm/konfiguracja-...
Jeśli mierzysz to timerem to nie ma takiej możliwości. Za to na ADC można coś takiego ustawić i nazywa się to "analog watchdog". 4\/3!!
Czyli gdzie może być problem? :)
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"...
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,...
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...
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...
"continuously" sugeruje że jednak nie powinno zatrzymywać sie na wartośći ARR (auto RELOAD value) w dokumentacji F1 jest ten sam tekst, a jednak timer sie przekręca
A w jakim celu chcesz tak okrutnie utrudnić sobie życie? Po co Ci dynamiczna podmiana procedur przerwań i pseudodynamiczna zmiana numeru timera?
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....
Wg mnie na rdzeniach Cortex-M3 nie da się zrealizować delay'a na zwyczajnych pętlach - u mnie sprawdzają się tylko rozwiązania oparte na timerach. 4\/3!!
Na zapas dodam, że timery w niektórych STM32 wymagają ustawienia bitu OPM przed CEN (a nie równocześnie, jak by na to wskazywał zdrowy rozsądek). Próby radziłbym zacząć od konfiguracji bez slave mode. Po uruchomieniu OPM, bierz się dopiero za slave.
Jak coś to po prostu zrób dwie wersje testowe i sprawdź czy jest różnica w szybkości działania (przy pomocy jakiegoś timera, np. systicka).
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...
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...
Witam, za pomocą STM32 F072RB steruje silnikami krokowymi. Problem polega na tym iż nie mogę w tym samym czasie mieć włączonych dwóch silników. Włączanie kolejnego silnika następuje po wyłączeniu aktualnie działającego silnika. Tu nasuwa się pytanie, jak to zmienić? Tak, aby silniki mogły pracować równolegle niezależnie od siebie tzn. jeden silnik...
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....
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...
Tak samo jak z timerami w STM32 z UARTami też nie ma problemu - zwykle są dwa jak nie trzy - w tych najmniejszych, bo w tych większych to jest np 5, a w STM32F4 jest 6. Ciężko znaleźć zastosowanie dla tych nadmiarowych, a UART jest na 1wire lepszy niż timery, bo cały bit jest załatwiony sprzętem jednorazowo, a z timerem trzeba to robić na kilka etapów...
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ść,...
A wejście wyzwalające timer również potrzebuje tylu cykli ??
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
Nie piszę z biblioteką, ale spróbuj wrzucić konfigurację przerwań po timerze, a najlepiej zamiast ładować tam tę beznadziejną strukturę, użyj NVIC_EnableIRQ(TIM1_CCIRQn) czy jakoś tak, bezp. z CMSIS.
Dziękuję za odpowiedzi.
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ę.
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
Chciałbym na początek wykonać miganie diodą z częstotliwością 2Hz za pomocą przerwania Timera 6. Poniżej kod: [syntax=c]#include <stm32f0xx.h> void TIM6_DAC_IRQHandler(void); int main(void) { RCC->CFGR &= ~(RCC_CFGR_SW_1 | RCC_CFGR_SW_0); //HSI RCC->AHBENR |= RCC_AHBENR_GPIOCEN; GPIOC->MODER |= GPIO_MODER_MODER9_0; //wejscie GPIOC->MODER...
stm32f103RB Nucleo i jestem pewien, że jest dobrze
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)
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...
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.
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...
https://forbot.pl/blog/kurs-stm32-f1-hal...
Wyzwalając konwersję timerem. Do dyspozycji masz timery 1,2,3,4,5 i 8.
Możesz, poczytaj w RM8 jak można to zrobić bo fizyczne wyjście z Timera do wyzwalania ADC jest Ci niepotrzebne.
Kolejne pytanie: Jaką dokładnie rolę spełnia w pętli głównej TIMER? muszę dostosować do STM32 czy w takiej postaci jak jest będzie OK ?
stm32 timer stm32 timer pulse stm32 przerwania timer
czarny ekran instalacja system pralka candy zapchana swiadectwo kwalifikacji
fw870c philips jakie napięcie webasto
Programowy UART na ATtiny44 z przerwaniem INT0 Nieregularne uruchamianie nawigacji Harman Kardon