Może spróbuj przed włączeniem taktowania timera ustawić bit (Bit 0 UG: Update generation) w rejestrze EGR [syntax=c]TIM3->EGR = TIM_EGR_UG; [/syntax] Pozdrawiam
Strzelam (nie używam HALa). Jeśli timer już sobie pracuje, to gdy przestawisz mu wartości ARR czy wartości dla PWMów, to zwykle są one "buforowane" (hasło do poszukiwań w reference manual "preloaded"), na takiej zasadzie, że ich wartość jest uwzględniana dopiero po tzw. "update event" (to jest drugie hasło którego powinieneś szukać w reference manual)....
Pulse powinno robić robotę. Jednakże widzę dwie rzeczy które wydają się śliskie. Pierwsza to brak ptaka przy "internal clock" - jak więc timer jest taktowany? Druga: Fast Mode Enabled - coś mi się niejasno kojarzy (dawno o tym czytałem i pobieżnie), że ten tryb jakoś wpływa (ale nie pamiętam jak :-D) na sposób wyzwalania więc warto by o tym poczytać w...
Zgadza się. Na większości płytek jest 4k7 do +5, który dość skutecznie zastępuje 1k5 do +3.3. z grubsza chodzi o to, żeby przy podłączeniu na linii D+ pojawiło się napięcie nieco ponad 3V przy ściągnięciu w dół prądem ok 200uA. Stos USB z CubeMX nie wykrywa odłączenia, a funkcja Deinit() jest wołana tuż przed Init(). Są sposoby na wykrycie odłączenia,...
Jeszcze raz poproszę o poprzedni kod dla AVR, który ci działa. Jeśli to kod dla "frameworka" arduino (pozwolę sobie zażartować, chociaż język C++ jest jednym z moich ulubieńców), to wystarczy skompilować go dla STM. Wówczas tylko w sekcji definicji pozmieniaj nazwy portów, które będą obsługiwały LCD i inne peryferia. "Zasugerujcie jakieś ramy programu"...
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.
http://obrazki.elektroda.pl/9502079900_1... Autor przedstawionego poniżej projektu zmierzył się z zadaniem skonstruowania cyfrowej perkusji z wyjściem MIDI. Układ taki wykorzystywany jest przez wielu perkusistów do ćwiczeń lub też uzyskiwania nowych brzmień. Dzięki niemu możliwe jest podpięcie padów perkusyjnych z wyjściem analogowym...
Przecież 1 timer może wykonywać kilka (naście) zadań. Np. odmierzać kilka czasów, obsługiwać wyświetlacze LED, przyciski, odtwarzać muzykę. I to tylko 1 timer odpowiednio oprogramowany.
Poradnik kol. (at)szczywronek , strona 139.
Trochę mi się pomieszało ale zaraz wyjaśnię. Ta sama częstotliwość, Timer ustawiony na 8MHz (nie wiem skąd te dziury :not: ): https://obrazki.elektroda.pl/3176850300_... Dziury się biorą z tego, że analizator logiczny sampluje 16MSPS. Maksymalne, sensowne pasmo(cyfrowe), które można tym uchwycić to 4MHz. https://pl.wikipedia.org/wiki/Twierdzeni...
Witam kolegów po fachu. Od 3 dni walczę z problemem. Tłumaczę o co chodzi. Staram się odczytać za pomocą stm32f103 szerokość impulsów PWM pochodzących z 4 kanałów odbiornika RC. Skonfigurowałem 4 przerwania zewnętrzne EXTI, na 4 kanałach , wyzwalane zboczem opadające i rosnące. Ustawiony jest również TIMER4 z przerwaniem od przepełnienia który liczy...
wydaje mi się że robię tak - tutaj ostatnia linia Dodano po 11 Tu masz jakis kod z mojego dzialajacego programu (dodatkowo DMA) procesor co prawda F446 ale nie sadze aby róznice byly powalajace. Jednak są różnice, Ty wyzwalasz od 0110: Timer 2 TRGO event a w STM32F103 nie mogę wyzwolić z TRGO event dla TIM1 i chcę wyzwalać od 000: Timer 1 CC1 event
Witam, nie wiem czy kolega używa CubeMX, ale w tym środowisku możemy ładnie określić coś takiego jak slave mode dla timera. I teraz ten drugi timer byłby slavem względem pierwszego i dodatkowo należy mu ustawić chyba trigger source na przepełnienie timera, który jest masterem. Piszę z pamięci także mogę się mylić. Ale musi być przecież taka opcja generowania...
Mieliście wiele racji, lecz dalej tego nie łapię. Błąd jest taki iż cześć rzeczy peryferii skonfigurowałem ręcznie a cześć poprzez Cube, gdy zrobiłem wszystko z Cuba to nie działa wcale. Nie wiem czy się dobrze rozumiemy chce aby Timer 1 był wyzwalaczem dla DMA po osiągnięciu danej wartości. Dla zobrazowania co chce uzyska posłużę się linkiem: [url=https://github.com/MarcelMG/STM32F1...
To da się bardzo prosto zrobić z przerwaniem od zbocza: - przerwanie od zbocza blokuje przerwanie od zbocza i uruchamia timer w trybie one shot, - przerwanie timera włącza przerwanie od zbocza. Jak widać wystarczy dedykowany timer i dwa przerwania i już można obsługiwać przycisk przerwaniem od zbocza. Zamiast dedykowanego timera może być programowy...
Pytanie nie dotyczy samego działania Input Capture (sprawdziłem na generowanym przez procka sygnale PWM - jest ok). Muszę mierzyć częstotliwość na wyjściu [url=https://downloads.maxonmotor.com/Ka... silnika BLDC, jednak to...
Witam! Mam w swoim programie chciałbym wykorzystać timer w trybie one pulse do odmierzania czasu, ale w taki sposób, żeby można było wyłączyć timer w przerwaniu od wartości CCR. Do tego celu wykorzystuje TIM2 (general purpose). Niestety timer nieprawidłowo odmierza czas kiedy chcę go wyłączyć bitem CEN(np wpisuję ze ma się wyłączyć po 100us a wyłącza...
Skoro timer jest remapowany to może należy załączyć zegar dla funkcji alternatywnych. Czyli przed GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); wstaw RCC_APB2PeriphClockCmd(RCC_APB2Periph_AF...
Witam, Wpadła mi w ręce płytka prototypowa z STM32f103 na pokładzie wiec pomyślałem że spróbuję swoich sił z tym mikrokontrolerem. Jak dotąd programowałem hobbystycznie głównie 8bitowe AVR-y i z nimi mniej lub bardziej sobie radzę. Ale do rzeczy wymyśliłem sobie że w projekcie zaprzęgnę do pracy Timer2, którego zadaniem będzie po wywołaniu funkcji Beep();...
Witam, mam problem z generacją PWM z tablicy z wykorzystaniem DMA. Wcześniej ten sam projekt działał na STM32F103 ale po przejściu na Cortex M4 coś nie działa. Konfiguracja peryferiów wykonana w Cube, wszystko analogicznie do tego co działało mi na F103. W debuggerze cały czas wartości rejestrów CCR mają 0, czyli jakby DMA nie chciało przesłać z tablicy...
(at)stmx proszę nie wprowadzaj w błąd! Domyślne ustawienia w CubeMX dla STM32F103xx prezentuje poniższy rysunek. Jak widać wszystko jest na 8 MHz. https://obrazki.elektroda.pl/7829044400_...
Jedyny problem jest taki, że zmienisz tym sposobem lokalizację tylko jednego stosu (np. tego od przerwań) - na stosy wątków wpływ masz minimalny. To fakt, choć jeśli chodzi o FreeRTOS, to wspomnianymi wyżej narzędziami stwierdziłem, że jest w miarę ok. Taski są w moim odczuciu na tyle przewidywalne, że jeśli są określone z zapasem za pomocą watermarków,...
To, które znaczniki przerwań kasują się same i w jakich okolicznościach, jest dokładnie opisane w manualu. NVIC swoje znaczniki kasuje sam z chwilą wejścia do obsługi przerwania. Peryferiale, w których przerwanie jest związane z żądaniem jakiejś akcji, kasują znaczniki przy wykoananiu akcji (np. przy odczycie rejestru z odebranymi danymi). Inne, np....
Witam. Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie i z tego co już się nauczyłem oraz co sobie w ReferenceManualu wyczytałem to wiem, że AVR'y odłożę na półkę:) Moja nauka jest w stylu 'bare-metal' wykorzystuję jedynie pliki nagłówkowe stm32f103xb.h i kilka od CMSIS które można wydobyć z STM'owych bibliotek, więc ich...
Aby ruszyć z czymkolwiek muszę opanować ręcznie odpalane DMA, nawet w przerwaniu kosztem oczekiwania aż wszystko zostanie przepisane. Do testów skonfigurowałem Timer co 5m w którym mam coś takiego. [syntax=c] void TIM2_IRQHandler() { //przerwanie co 5ms if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); GPIO_ResetBits(P10_PORT,...
Mój Arduino nano ma procesor Atmega328P i zawsze taki miał jak kupowałem, słyszałem ze Arduino mini może mieć Atmega168 ale ja jak kupiłem Arduino mini to też miał Atmega328P , teraz program bryka i wyglada ze się dogadał z moim Arduino,jak zmontuję całość i skalibruję to umieszczę na forum. Jeden z pierwszych linków z Google https://pl.aliexpress.com/item/Pro-Mini-...
Witam, Niestety ale nie wiem jak ustawić Timer tak, żeby jeden cykl trwał 20 ms a jego wypełnienie ustawić np. 1ms. Jak ustawić częstotliwość na 50 Hz? I np. tak, żeby ustawienie: [syntax=c]TIM4->CCR3 = 1000;[/syntax] dawało wypełnienie 1 ms? Mam taki kod: [syntax=c]void TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef...
Witam, chciałbym się zapytać, czy taki sposób implementacji/algorytmu sterowania mikrokontrolerem falownika do silnika indukcyjnego 3 fazowego, przy najprostszym sterowaniu skalarnym U/f = const., bez prędkościowego sprzężenia zwrotnego jest poprawny? https://obrazki.elektroda.pl/1341149300_... Założenia: - Wykorzystuje STM32F103 -...
Mam problem z najnowszą biblioteką FatFs. Wszystko działa idealnie na SPI1, a na SPI2 nie chce chodzić. Może ktoś z doświadczonych kolegów zerknie na konfigurację. Przy ustawieniu SPI_CH na 1 wszystko śmiga jak należy, przy 2 tylko rozpoznaje, że karta jest włożona lub wyjęta. Przyglądam się temu i nie widzę błędu. Co tu jest nie tak? [syntax=c] #define...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Dzien dobry, Temat ten jest kontynuacją tematu z http://www.elektroda.pl/rtvforum/viewtop... Skorzystałam z udzielonej mi rady i postanowiłam użyć STM32F103. Mam już płytkę ewaluacyjną, teraz zajęłam się projektem płytki układu akwizycji danych. Zaznaczam, że jest to mój pierwszy samodzielny projekt, nigdy dotąd nie projektowałam żadnego...
Sprawdź w Ref. Manual, ile jest w Twoim mikrokontrokerze dostępnych wyjść timerów na nogach portów. Prawie wszystkie mogą pracować jako PWM. Jeśli ma poziomy wejściowe TTL, to możesz. Zaryzykuj - prawdopodobnie będzie ok. W każdym razie nic nie zepsujesz, najwyżej nie będzie działać.
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.
Popularne stm32f103 lub wg. potrzeb może być coś mocniejszego z rodziny f2,f3,f4...
Sprawdź w manualu opis rejestru DBGMCU_CR (DBGMCU->CR). Musisz sobie w nim ustawić odpowiednie bity, aby timer został zatrzymany gdy zatrzymany jest rdzeń. Problem który obserwujesz wynika z tego, że timer domyślnie nie jest zatrzymywany gdy debugger zatrzymuje rdzeń. Jeśli np. masz przerwanie od przepełnienia co 1 sekundę, to podczas tegoż debuggowania...
Akurat nie wiem jak to jest w przypadku USB, ale w przypadku innych peryferiów nigdy nie miałem takiego konfliktu. Zawsze można było wykorzystywać dowolne piny. Np. użyć RXD a nie użyć TXD (tzn. TXD użyć jako np. wyjście Timera).
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Jest gdzieś skrótowa dokumentacja do ustawień CubeMX, aby zaczynający programista się nie zniechęcił? Nawet jeśli korzystasz z CubeMX to zacznij najpierw od jakiejś literatury. "Poradnik Szczywronka" takie rzeczy dość łopatologicznie tłumaczy tzn. podstawy działania timerów (i nie tylko). Na pierwszym zrzucie mamy włączony OPM na drugim wyłączony....
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.
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.
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...
Ta linijka wygląda podejrzanie: ADC1 -> SQR3 |= ADC_SQR3_SQ1|ADC_SQR3_SQ1_2; //CHANEL 6 SELECT A ta jest błędna, ale "czasem zadziała" ;) ADC1->SR &=~ADC_SR_EOC; W kodzie powyżej nie ma włączenia timera, a niewłączony raczej nie wyzwoli ADC.
Cześć, Używam CooCox do pisania programów pod płytkę BluePill i nauki na podstawie książki Pana Marka Galewskiego. W tym środowisku sprawdź czy w zakładce Repository ma zaznaczone biblioteki, które dołączasz za pomocą #include. Dlaczego piszesz w CooCox i bibliotekach SPL?
Kosztem dokładności możesz zrobić to na jednym wspólnym 2-kanałowym timerze i przerwaniu EXTIi (oddzielnym dla każdego czujnika). Dwa kanały służyłyby do odmierzania czasu impulsu startowego i kasowania czujnika - wymuszenia kończenia pomiaru, a okres timera wyznaczałby cykl pomiarowy do kolejnego przeglądanai czujników.
A jakiś przykład kodu jest kolega w stanie pokazać? Ustawiasz timer, tak aby się przepełniał po czasie np. 1,5 znaku. W przerwaniu odbioru, zerujesz licznik timera. W przerwaniu przepełnienia timera ustawiasz flagę - koniec transmisji. Oczywiście w zależności od konkretnych peryferiów dostępnych w MCU, można ten proces zoptymalizować. Do tego dodałbym...
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...
No więc ja robiłem coś takiego - Zapis za pomocą ODR i odczyt za pomocą IDR. Jedno było triggerowane poprzez TIMER1, drugi TIMER2. Wszystko via DMA. W ten sposób zrealizowałem własny protokół (coś podobnego do K-Line/CAN). Wszystko ładnie działa tyle że na STM32F103, ale myślę że na STM32F4xx też powinno ruszyć. Max prędkość jest uzależniona od timerów...
1. Biblioteki ST są do d... (wszyscy to piszą, to ja też) 2. Żeby zmienić wartość jednego rejestru niekoniecznie trzeba wywoływać cała inicjalizację timera (patrz post powyżej) 3. Popatrz w Swoją pętlę główną. Zanim zdejmiesz paluch z klawisza, pętla obróci się kilkaset (kilka tysięcy?) razy i zmienna c pójdzie poza zakres.
Ne wiem, po co do takiego zadania angażować RTOS, chyba, że docelowo ma być tego duo więcej. Skoro wiesz, co i jak trzeba zaprodramować - po prostu zaprogramuj timer, ADC i DMA, obrabiaj wstępnie próbki w przerwaniu DMA, a resztę przetwarzania zrób przez PendSV (obniż priorytet do najniższego), bez pętli głównej. Wiesz calosc dekodowania i wysylania...
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.
stm32f103 reset stm32f103 schemat bootloader stm32f103
schematy mastercook zasilacz dzwonkowy przewód cinch audio
elfon optima mikrokomputer cobra1
Domofon Proel, Orno, Laskomex – pikanie w mieszkaniu przy otwieraniu drzwi brelokiem Ferguson 3412 – schemat wzmacniacza stereo, dokumentacja serwisowa, typowe usterki