Możesz dowolnie zmieniać tryb pracy 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...
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.
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...
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.
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...
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,...
To co opisujesz to właśnie idealne zastosowanie dla przerwań zewnętrznych, więc nie ma sensu w ogóle kombinować z timerem (jeśli nie możesz podłączyć tych sygnałów gdzie indziej, a w zasadzie tylko jednego z nich). 4\/3!!
Pokaż log kompilacji po zrobieniu "clean".
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ąć...
Cześć, nie analizowałem kodu, ale kiedyś wykorzystałem to: http://www.keil.com/download/docs/370.as... . Porównaj może się przyda. Są wykorzystywane te rzeczy co potrzebujesz chociaż nie pamiętam czy ac jest wyzwalane timerem. Pozdrawiam
Wydaje mi się, że najłatwiej będzie rozwiązać to w obsłudze przerwania jednego z timerów. I przychodzą mi do głowy dwie możliwości: 1. Zmienianie parametrów pracy timera po każdym "trybie" przebiegu jaki ma być wygenerowany na wyjściu. Tj. przeładowywanie liczby do jakiej licznik powinien odliczyć zanim wygeneruje przerwanie. 2. Ustawienie licznika...
Timerem zmierzyć możesz.
Teraz czekamy na pytanie "Co to jest Reference Manual?"
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:...
Wczytaj się w informacje o zegarze timerów w rozdziale o RCC. W niektórych przypadkach jest on dzielony czy tam mnożony przez 2. 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.
TIM1 jest tu specjalny, bo ma kilka wektorów przerwań (TIM1_BRK_IRQHandler, TIM1_UP_IRQHandler, TIM1_TRG_COM_IRQHandler, TIM1_CC_IRQHandler). Reszta timerów ma jeden. TIMx_IRQHandler, przeglądnij sobie -> 10.1.2 Interrupt and exception vectors
ADC wyzwalaj timerem, zrób dwa bufory na odczyty i pakuj do niech dane naprzemiennie, odpuść tryb circular. Otóż to, cicrular ma sens na przykład dla sygnałów wolnozmiennych, gdy jest obojętne, kiedy zmierzysz. Wtedy po prostu na początku programu odpalasz DMA z ADC i nie musisz się niczym przejmować, zawsze w pamięci będzie aktualny pomiar. Ale jeśli...
Stos dla przerwań ustawiłeś? 4\/3!!
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...
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 |...
Generalnie już sobie z tym poradziłem. Chyba przesiądę się na STM32 - one mają po conajmniej 5-7 timerów, nie mówiąc już o innych funkcjach, które w AVR-ach są rzadkością :D
pętla dla atmegi musi wyglądać tak:....... Mając tyle dostępnych timerów w STM32 robienie pętli opóźniającej w tak prymitywny sposób woła o "pomstę do nieba" :)
jest jakaś prosta metoda na timeout ? Nie wiem jaki masz STM, ale niektóre mają sprzętowy timeout. Wystarczy w rejestrze RTOR podać po ilu nieodebranych znakach ma zostać wygenerowane przerwanie. Ewentualnie musisz się posiłkować jakimś timerem - np. w trybie OPM. Szczerze mówiąc chyba lepiej Ci będzie napisać tę cześć kodu bezpośrednio na rejestrach...
Może to na początek. [url=https://www.digikey.com/en/maker/pr... [url=https://community.st.com/s/article/...
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);
Chodziło mi o kod za pomocą którego sprawdziłeś timerem SysTick że jest 8MHz :) Czyli jak dobrze rozumie, rdzeń pędzi z prędkością 48MHz? Czy z taką prędkością wszystko się wykonuje? Kwestia zegarów w ARM jest "nieco" bardziej złożona. Rdzeń, magistrale i peryferia ustawia się oddzielnie. Wieczorwm wrzuce kod :D Skoro to bardziej złożona kwestia, to...
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
Wymyśliłem sobie, że użyję ADC1 do wyzwolenia DMA. ADC nie będzie nic mierzyć, jednak wyzwoli DMA2, natomiast ADC mogę wyzwalać innym timmerem. Przesiedziałem z tym cały dzień i coś pomijam bo nie działa wyzwalanie ADC z timmera. Jeśli uruchomię ADC z własnym zegarem, transfer DMA działa po każdej konwersji. Jeśli uruchomię ADC wyzwalane z timmera,...
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-...
Gdybyś przeczytał w reference manualu, w rozdziale o RCC, w podrozdziale "clocks", to co jest napisane pod tym wielkim obrazkiem na temat timerów i ich mnożników, to byś wiedział wszystko co trzeba.
Ostatnio robiłem obsługę WS'a na stm32. Użycie DMA w połączeniu z Timerem rewelacyjnie rozwiązuje sterowanie WS'a bo nie jest to tylko różnica w MHz.
Cześć Chce zrobić komunikację pomiędzy urządzeniami(podlączanymi i odłączanymi podczas pracy systemu mikroprocesorowego) a mikrokontrolerem stm32 z wykorzystaniem magistrali 1-wire. Problemem jest to, że muszę też wiedzieć gdzie dane urządzenie jest aktualnie podłączone, więc wspólna magistrala np przy pomocy USART'a odpada. Czy zrobienie oddzielnych...
Albert: dość mocno mijasz się z prawdą. Niektóre uC z rdzeniami Cortex mają sprzętowy mechanizm gwarantujący czas odpowiedzi na przerwanie, który umożliwia redukcję drżenia (jitter) przerwania o najwyższym priotrytecie do zera również wtedy, kiedy mamy w systemie inne przerwania. Jeśli użyjesz tego mechanizmu, to sam decydujesz jawnie o czasie od przerwaia...
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ł.
Jedno mnie dziwi - nigdy nie miałem takich problemów. To, że timery czy inne peryferia sobie pracują, gdy rdzeń jest halt to nie powinno nikomu przeszkadzać, skoro stepowany rdzen w ogóle nie skacze pod wektory ISRów...? Gdy używam Ride7 to nie mam tego problemu, ale gdy przekroczyłem limit 32kB przesiadłem się na Eclipse+OpenOCD. No i niestety w trakcie...
Sensowne rady były powyżej. SPI, ew. timer, w obu przypadkach z DMA. DMA jest łatwe do ogarnięcia, o ile nie używasz HAL. Poszukaj artykułu z EP sprzed paru lat o sterowaniu WS2812 przez SPI z STM32. Kod też tam znajdziesz. Rozwiązanie z timerem (gorsze, ale przy braku SPI ujdzie): Timer programujesz tak, by po preskalerze mieć zegar 2.4 MHz, okres...
Wyzwalając konwersję timerem. Do dyspozycji masz timery 1,2,3,4,5 i 8.
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...
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!!
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?
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.
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
Jeśli przerwanie obsługujące I2C trwa długo, to może po prostu timery dostają jakiegoś overflow (or sth) i wiesza się tak naprawdę gdzie indziej? Masz JTAGa? 4\/3!!
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?
Witam. A może zatrzymać na chwilkę TIM3 tylko na czas odczytu by później znowu go odpalić ?
Nie 103 a 107. Cała rodzina F1 jest przestarzała. W STM32F4, F7 i F0 jest do sześciu SPI. Do tego warto dodać, że USART może pracować w trybie SPI w każdym STM32.
Obejrzałem, nic nie zrozumiałem. Uwagi: 1. Bardzo uśredniaj wartości z ADC - nie tak że żywcem 2. Ja bym generował sinusoidę poprzez DMA wyzwalany timerem, a jedynie zmieniał czasookres pomiedzy wyzwoleniami.
Definicja tcp_timer_needed() jest w pliku tcp_impl.h, żródła w timers.c. Plik tcp_impl.h zaincludowany w tcp.c z resztą tu nic nie zmieniałem. Po dopisaniu #include "lwip/timers.c" program się kompiluje owszem i wszystko działa ale mam potem problem z kompilacją gdy chce dodać liczniki softowe pod freertos a to za sprawą includeowania pliku timers.h....
STM32 NUCLEO-F303K8 z Cortex M4? Na przykład. Co do timerów - to fakt, ale nie powinno się ustawiać ich na ślepo. Są pewne zasady, jesli się ich przestrzega, nie będzie większego problemu. Niestety należy tej wiedzy szukać głównie w anglojęzycznym Internecie. Trzeba też czytać noty katalogowe dość dokładnie. Ważna też jest odpowiednia konfiguracja...
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.
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...
[syntax=c]#define ONE_WIRE_SET_LOW ( GPIOA->BRR |= ( 1 << 3 )) #define ONE_WIRE_SET_HIGH ( GPIOA->BSRR |= ( 1 << 3 ))[/syntax] Powinieneś użyć normalnego przypisania "=", a nie logicznej sumy "|=". Nie ma to tutaj specjalnego znaczenia, ale warto o tym pamiętać. Sprawdź w manualu, czy timer którego używasz (jak wszystkie timery na...
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!!
OC1CE: Output Compare 1 Clear Enable 0: OC1Ref is not affected by the ETRF input 1: OC1Ref is cleared as soon as a High level is detected on ETRF input Wszystko już działa OK - dzięki powyższemu opisowi, który podałeś. Niedokładnie przeczytałem opis timerów... Wielkie dzięki :)
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...
Chodzi o wyłączoną generację PWM, czy wyłączony timer?
Nawet dla takiego małego Miki jak ja już na pierwszy rzut oka jest jasne że te kody to potężne źródło problemów. Co widać bez wgłębienia się w szczegóły: * Funkcja main() jako rozbiegówka to słaby pomysł. Kolega stmx napisał coś na ten temat (nawet podaje link w promowanych tematach), warto to przeczytać. * Stos musi mieć odpowiednie wyrównanie, zwykle...
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.
Po ponad tygodniowej przerwie STM32 znowu zagościł na moim biurku. Aktualnie walczę z Timerem, na szybko skonfigurowałem go tak aby odliczał do góry, teraz chciałbym aby było z niego wyzwalane przerwanie. Z tego co wyczytałem w przeróżnych manualach udsotępnianych przez STM trzeba to zrobić w rejestrze ISERx, pytanie tylko co podstawić za x i pod którym...
Jeżeli nie potrzebujesz dokładnych opóźnień a takich Π•oko, to IMHO delay na pętlach w zupełności wystarczy. Timerów w stm32 niby wiele...ale prawie zawsze, w większych aplikacjach znajdzie się szczytniejsze dla nich zastosowanie. Z drugiej strony stosowanie pętli opóźniających na ARM-ach trąci profanacją :) Jeżeli nie interesuje Cie korzystanie...
Timer w STM32 ma sprzętowe filtry itd w timerze.
Proste pytanie - czy przeczytałeś opis timera 1 w manualu? 4\/3!!
Witam, początkowo zacząłem programować mikrokontroler stm32f103RBT6 wykorzystując bibliotekę standardową, ale zachęcony przeczytanymi postami na elektrodzie zacząłem programowanie wykorzystując tylko definicje rejestrów zawarte w pliku stm32fx.h. Chciałem włączyć jakiekolwiek przerwania (np. od timera 4) niestety wogóle nie wiem jak do tego się zabrać....
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
Na ogół "sprytne" rozwiązanie - to takie, które minimalizuje koszty sprzętowe. Przy kodowaniu 3-bitowym kosztem jest dodatkowa pamięć RAM w uC, której może w niektórych sytuacjach zabraknąć. Jeśli nie braknie - rozwiązane nie kosztuje nic. W rozwiązaniu z bramką kosztuje układ, miejsce na płytce i montaż - w każdym egzemplarzu urządzenia. Rozwiązanie...
Wygląda, że masz podobny problem jaki ja miałem niedawno na procesorze STM32F030R8... Sytuacja u mnie wyglądała tak: Taktowanie APB 48MHz, TIM1->PSC = 480. Co daje takt 10uS. Timer konfigurowany "po rejestrach". Zliczam impulsy timerem i czekam aż się timer przepełni: TIM1->ARR = 150 (zgłoszenie przepełnienia co 150*10uS=1.5mS) Okazuje się, że timer...
Nie jest bo zliczanie jest programowe. Na ścisłość masz rację. Ale w obsłudze przerwania, dodanie jedynki do zmiennej to nie chyba jest jakiś wielki program, którego powinno się wystrzegać. Tu jest mowa o rozwiązaniu w którym konstrukcja urządzenia zapewnia zachowanie między przerwaniami minimalnego odstępu 24000 (!) taktów na najwolniejszym ze wszystkich...
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...
Nie znam uC-os jednak wiem jak działają RTOSy, i mogę stwierdzić, że masz coś nie tak z prio wątków. Jeśli chcesz po prostu 2 niezależne wątki które się wykonują quasi-równolegle to twój os musi potrafić wywłaszczać (round-robin time slicing) a oba wątki muszą mieć ten sam prio (i jeśli os wymaga, to trzeba mu skonfigurować ile ma trwać timeslice dla...
Ja bym to zrobił przy pomocy Timera
Heh, faktycznie niepotrzebnie straszę, jeśli zakładamy, że konstruktor ma CAN tu, gdzie jest default ;] Znam te "kilka stron" z erraty na temat gryzienia się remapniętych AF. I oprócz CANa nigdy szopek nie miałem, a już zdążyłem remapować i używać dosyć udziwnionych konfiguracji SPI,UARTów,timerów compare i timerów capture, mimo tej erraty ;] BTW, STM32...
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
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...
Przerwanie powinno być w porządku, ale co do inicjacji samego Timera to nie jestem pewny. Po prostu nie mam zaufania do funkcji API dla Timerów. Czy udało Ci się uruchomić cokolwiek związanego z licznikami na tych funkcjach?
Jeśli chodzi o przerwanie od tim2, to napisałem w poście powyżej nie do końca prawdę. Kod głównego programu jest wykonywany, a gdy zatrzymam procesor, program się zatrzymuje na tym rozkazie ktory mial wykonać. Następnie debugując <Step into (F5)>, procesor zaczyna wykonywać przerwanie TIM2_IRQHandler. I klikając F5 nigdy już nie wyjdę z tego...
Jest tu co prawda wiecej kanałów PWM (razem 12, z czego 4 w rdzeniu master i 8 w rdzeniu slave) STM32G474 też ma 12 kanałów Równorzędnych. Master jest ponad nimi. Jeśli dobrze widzę, to ten układ ma 12 wyjść PWM, ale tylko 6 timerów. Microchip ma 4(rdzeń master)+8(rdzeń slave) timerów i odpowiednio 8+16 wyjść. Jednak mi tyle nie jest potrzebne, te...
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
TIM17? Jesteś pewien, że masz tyle timerów w swoim STM? To seria F4 ma ich jak dobrze kojarzę 14 sztuk, a F1 - 8 sztuk.
Dla enkoderów ze stykami mechanicznymi, jeśli nie podłączasz go do uC za pomocą prostego filtru RC, wykorzystywanie timera czy przerwań to ślepa uliczka. Z racji, że takie enkodery nie generują impulsów o dużej częstotliwości, to najlepiej zrealizować odczyt programowo, np. cyklicznie w systicku sprawdzać czy mamy stan wysoki przez minimalny czas i...
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...
Poczytałem manuala do JTAga i spróbowałem wgrać kod przez OCD. Wywołuje go z parametrami: -f scripts/interface/ftdi/jtag-lock-pick_ti... -f target/stm32f1x.cfg -c "adapter_khz 1000; reset_config trst_and_srst; init; reset init; flash write_image erase C:/ARM/project_eclipse/stm32_timer/out/s... reset run; shutdown;" Otrzymuje błędy:...
Zrobiłem dokładne pomiary - 100 przeładowań pełnego ekranu i pomiar timerem. Najkrótszy czas przesyłu 154kB to 0.0608 sek. To najwyższa prędkość SPI1 dla taktowania 72MHz. Wyświetlacz pracuje stabilnie i godzinami przeładowuje się bez błędu. Jednak jest to prędkość SPI zbyt duża dla transmisji dwukierunkowej, pracuje dobrze tylko w transmisji do wyświetlacza...
Mam problem z kolejkowaniem przerwań i wywłaszczaniem w STM32 Cortex M3. Otóż mam 2 timery, TIM6 oraz TIM12 o tym samym priorytecie (jeśli się wykonują, nie mogą się wywłaszczać, dlatego ten sam priorytet). Czasem używam globalnego wyłączenia przerwań i w tym czasie zgłaszają się oba, z tym że pierwsze ( po włączeniu IRQ) wywołuje o niższym numerze,...
(o ile masz dużo timerów) Wystarczy jeden na wiele silników. Pozatem widzę że Kolega AVR-owiec. W cortexach ilość timerów z reguły nie stanowi problemu :). Pozatem są one nieco bardziej wyrafinowane i więcej rzeczy da sie na nich zrobić.
Nie mniej jednak najlepiej jak by ta częstotliwość była powiązana z częstotliwością próbkowania w pliku Wav. Czyli jak próbkowanie to 8kHz to PWM też powinien mieć 8kHz. Albo wielokrotności czyli 16, 24, 32kHz, itp. Co ciekawe użycie częstotliwości PWMa większych od 20kHz bez odpowiedniego filtru na wyjściu niewiele daje, i dalej słychać pisk 8kHz....
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 wypadku korzystania z biblioteki stma trzeba każdorazowo pisać strukturę i ją inicjować (koniecznie). Jeśli chcesz robić pewne rzeczy efektywniej to warto zajrzeć do wnętrza biblioteki lub wczytać się w dokumentację i korzystać z odpowiednich rejestrów. Biblioteka generalie skupia się na czytelności kodu a struktury są zrobione z założenia ze "inicjuje...
A obsługa SPI przez DMA to co? Nic lepszego ani bezpieczniejszego nie wymyślisz..... za dużo prądu zmień MCU... Generowanie zegarem, czy timerem czegokolwiek to proszenie się o błędy. Zmniejszanie taktowanie nie koniecznie zmniejszy poboru prądu jeśli korzystasz z trybów stop lub sleep
Dokładnie tak jak pisze kolega R-MIK. Jak sprawdzałem czas od wykrycia zera do podania sygnału na triak dla uC stm32, to było to około 0,7ms. Więc maksymalny czas załączenia triaka w jednej połówce sinusa to 9,3 ms, więc wystarczająco na dość dokładne sterowanie. Ale dalej nie wiemy co kolega chce z tym robić, więc nie wiemy co będzie lepsze :) Sinus...
Czyli: 1. Jeżeli APB jest ustawione na 1 (bez dzielnika) to zegar timerów wynosi tyle co taktowanie samego APB. (no zrozumiałe) 2. Jeżeli jest inaczej to zegar timerów wynosi x2 zegara taktowania APB...czy może wyjścia z APB?? To drugie jakoś nie kapuje.
Wyzwalasz timerem sprzętowo, odbierasz wyniki do bufora przez DMA, po odebraniu bloku o długości, którą sam wymyślisz - przetwarzasz wyniki. Dane możesz pewnie przetwarzać w przerwaniu DMA. Jeśli masz inne, ważniejsze przerwania - obniż priorytet przerwania DMA.
72e6 razy sie zmieni to wywoła UEV co spowoduje wywołanie (w tym przypadku) tego handlera. poniewaz 1 zmiana licznika to 1 takt zegara to 72e6 / 72e6 = 1s Jak wartość bedze 72e3 to 72e3/ 72e6 = 1e-3s Takie pytanko: czy wiesz w ogóle jak działa licznik? Tyle że systick jest 24 bitowym timerem. Wypadałoby zajrzeć do implementacji zanim zaczniesz wprowadzać...
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...
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.
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...
Jeśli to ma być PWM to powinieneś zmienić na: Dodano po 4 GPIOC->MODER |= LED1 | LED2; Co się kryje pod LED1 i LED2? Bo LED2 którego sterujesz ręcznie, aktywujesz tak samo jak LED1, który ma być sterowany timerem. A przecież to 2 odrębne tryby MODER: 01 - wyjście - LED2, oraz 10 - AF - LED1.
sterowanie timerem pilot timerem alarm timerem
jakie glosniki komputerowe zdalne sterowanie silniczkiem pioneer słuchawki naprawa
wojsko częstotliwości wentylacja garażu
Sterownik kart inteligentnych dla Windows 7 - skąd pobrać? Szmery w rozrządzie silnika 1HC 102 - możliwe przyczyny