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.
Poradnik kol. (at)szczywronek , strona 139.
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
(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_...
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)....
Najprościej podpiąć oscyloskop i zobaczyć co się naprawdę dzieje z sygnałem po podpięciu Timera albo od razu wtórnik na tranzystorze.
Albo dwa timery z przesunięciem, albo sterowanie drugim kanałem przez DMA z dwóch innych CCR tego samego timera.
no tak TIM1_TRG_COM_IRQn nie uruchamia się a flaga TIF nieaktywna ... szukam edit: ale czy TIF nie jest trigerem wejściowym do timera?
Popularne stm32f103 lub wg. potrzeb może być coś mocniejszego z rodziny f2,f3,f4...
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.
Każde PWM niezależnie? Ciężko będzie. Sprzętowe PWM wymaga timera i komparatora... to nie procesor generuje ten przebieg, tylko dedykowany, sprzętowy timer/licznik i komparator. Np. STM32F103 ma 4 timery i każdy z nich ma 4 kanały PWM. https://www.st.com/content/ccc/resource/...
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.
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.
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...
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ć.
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...
Ustaw preskaler tak, żeby za preskalerem mieć 1 MHz. Ustaw ARR na 19999 - okres będzie równy 20 ms Ustaw rejestr porównania na wartość z zakresu 999...1999, co odpowiada szerokości impulsu od 1 do 2 ms. Włącz tryb PWM i ustaw funkcję wyjścia timera na odpowiedniej linii portu. Gdybyś nie używał bibliotek, zajęłoby to wszystko 10 linii kodu.
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).
Znalazłem przykład M. Kardasia na nieblokującą obsługę przycisku. Dodajmy: niedziałający przykład. Czegóż to ludzie nie wymyślą, żeby tylko nie napisać dwóch linijek kodu w przerwaniu timera...
Po naciśnięciu ikony "Build" w oknie "Debug" pojawiają się błędy. Rozumiem, że kod napisał ktoś inny, a Ty nie znasz języka C. Bo to dość podstawowa wiedza dla studenta, żeby umiał napisać program, który się skompiluje, a jak nie, to wiedział, jak poprawić błędy. Zadaj jakieś konkretne pytanie. To jest Twoje zadanie napisać tę pracę - m.in. ma Cię...
Wyłączałem remapowanie USART1 dla pewności, do tego AFIO jest już chyba potrzebne. Może powinienem jakoś podłączyć te peryferia z pinem, bo widzę że standardowo wychodzi tam jeszcze MCO, 1 i 2 kanał timera 1?
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.
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.
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.
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...
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.
Przyciski czytamy zwykle w przerwaniu timera z częstotliwością 50..100 Hz.
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.
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...
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...
Przy jednym Timerze były by obliczenia takie jakie masz w pierwszym poście. Czyli kierunek masz dobry. Co do konfiguracji Timera to nie wiem, bo nie używam bibliotek STMa.
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,...
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.
A dlaczego timer nie mógłby wyzwolić konwersji w dowolnym momencie zaprogramowanym przez Ciebie?
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...
Witam, chcę wykorzystać timer1 do odmierzenia pewnej jednostki czasu w mikrokontrolerze STM32F103. Całość konfiguruję w CubeMX. Problemem jest to, że dla pozostałych timerów mogę ustawić global interrupt i wtedy w programie bardzo łatwo takie przerwanie obsłużyć. Natomiast w przypadku timera pierwszego, takie przerwanie w wektorze nie występuje. Czy...
No to szukaj błędu w ustawieniach zegara - skąd bierzesz przebieg wejściowy, częstotliwość (sprawdź czy dobrze ustawiona w module startowym), wywołanie SystemCoreClockUpdate itp... Prosty test: zaprogramuj timer i procedurę przerwania od niego an miganie diodą z częstotliwością 1Hz i zmierz sekundnikiem czas np. 60 mignięć.
Teraz czekamy na pytanie "Co to jest Reference Manual?"
Po pierwsze, nie w żadnej pętli, tylko w przerwaniu timera, zgłaszanym z częstotliwością np. 2400 Hz Po drugie, w każdym przerwaniu timera należy: 1. W rejestrze GPIOD->CRL/CRH ustawić wszystkie używanie linie portu jako wejścia lub Analog. 2. Do rejestru ODR zapisać jedynkę na linii wyboru kolumny, zera na pozostałych. 3. Do rejestru CRL/CRH zapisać...
W obsłudze końca transmisji DMA, STROBE, wyłączyć OE. To raczej nie zadziała. DMA zgłasza przerwanie, ale SPI jeszcze wysyła dane z rejestru szeregowego, a w buforze siedzi jeszcze jeden bajt. Będziesz czekał na zakończenie transmisji w przerwaniu od DMA? I tu pewnie jest problem. O tym nie pomyślałem że dane mogą jeszcze lecieć. Sądziłem iż przerwanie...
Wrażliwość jest nieznaczna. Nic się nie stanie, jak najpierw jakiś czas pochodzą na równych priorytetach. Chodzi o to, że mam PWM programowo zrealizowany na przerwaniu od timera - nie mam dojścia niestety do wyjścia timera, żeby sprzętowy PWM wykorzystać. I niestety czasem trochę się ten PWM przycina, chciałem dać najwyższy priorytet temu przerwaniu...
Którego w końcu timera używasz? W jednym miejscu TIM2, w drugim TIM3. Ustaw któryś CCR timera używanego do PWM tak, żeby wyzwalał ADC w odpowiednim momencie. Włącz Trigger Out z tego kanału do wyzwalania ADC.
Bo tak to zostało wymyślone - to najprostsza odpowiedź. Jeden moduł może generować wiele różnych przerwań, np. koniec okresu timera, porównanie, przechwycenie zbocza. W timerze ustawiasz, które z tych zdarzeń mają generować przerwania. W NVIC ustawiasz, z których urządzeń chcesz obsługiwać przerwania.
Ja rozumiem ze mozna szarpać się z darmowymi toolchainami, ale zeby z keilem?... Postawienie darmowego toolchaina trwa minute :)
Tak, można uznać że ATMega8 to staroć, Arduino przedłuża nieco popularność ATMEGA328, natomiast kolejne wersje płytek Arduino to już często ARM Cortex w różnych wydaniach. [url=http://www.st.com/en/microcontrolle... to ciekawa propozycja Cortex-M3 sporo RAM i flash, timery, ADC, i inne peryferia...
Pomiar częstotliwości i wypełnienia PWM realizują sprzętowo niektóre "zaawansowane" liczniki z STM32. 1. Ściągasz za punkty to : https://www.elektroda.pl/rtvforum/topic3... 2. Czytasz tylko o gpio i licznikach 3. Doczytujesz/poszukujesz gotowca do liczenia tego sygnału na podstawie licznika. 4. Modyfikujesz to co potrzebujesz. Z tego co pamiętam...
[url=http://stm32f4-discovery.com/2014/0... masz pokazaną zasadę działania 1wire z N DS18B20. Co prawda kod jest oparty na F4, jednak dużo różnic nie będzie w porównaniu z F1. Zawsze zamiast tworzenia swojego timera do delaya możesz skorzystać z SysTicka.
Nie no, konwersję wymuszasz programowo a nie przyłożeniem napięcia. Może to być jakiś freerun, konwersja na rządanie, z timera etc. ale zawsze jest wyzwolona czymś z wewnątrz, nie uruchamia się po przyłożeniu napięcia. Działa to tak, że na żądanie konwersji po 1 cyklu zegara ADC się ona uruchamia i po 14 cyklach (1us) w rejestrze masz wartość. Czas...
Pewnie (podobnie jak i ja) z kodu napisanego "własnoręcznie" [; 4\/3!!
1. Czy ktoś Cię zmusza do używania bezsensownych funkcji HAL zamiast prostego podstawienia, takiego jak GPIO_LED->BSRR = LED_MSK; ? 2. WS2812 z STM32 można sterować z wyjścia timera lub SPI z użyciem DMA (w nowszych modelach również z UART). Każde z tych rozwiązań jest lepsze, niż programowe przestawianie wyjścia.
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...
EP z grudnia 2016, a może 2015. Najprościej sterować przez SPI, ale musi ono działać na ok. 2.5 MHz (na L0 działa na 2.13 MHz, idealnie byłoby 2.4 MHz). Problemem w STM32 jest to, że podzielnik SPI musi być potęgą dwójki, więc wymagany zegar procesora to np. 20, 40, 80, 160 MHz. W takim przypadku każdy bit WS2812 koduje się na trzech bitach wysyłanych...
Czyli pierwsze co muszę zrobić to odwrócić sygnał REQ? Skoro w Twoim przypadku nie ma opcji w rejestrze UARTu to faktycznie albo sprzętowo odwrócić np. tranzystorem z opornikami czy transoptorem. Można też zrealizować ""programowy inwerter" korzystając z EXTI na jakimś pinie jako wejście (może nawet wręcz na pinie TX) a wyjściem może być inny dowolny...
Oto cały kod C# [syntax=csharp]using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Data; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging;...
Pomyśl: z timerem musisz zapisać bit na 16 bitach, z SPI - na 3. SPI ładujesz z częstotliwością ok. 150 kHz, timer - 800 kHz. Ty dla każdego bitu chcesz wykonać 6 transferów - już zaczynasz zatykać szynę wewnętrzną - ciut bez sensu. Przypisanie linii portów należy zrobić na początku projektu, a nie na końcu, a na PA14 masz SWD. Jeśli już upierasz się...
IWDG ma timeout dopiero po 1,6s, a jest resetowany w tasku FreeRTOSa, który pstryka co 1ms, oraz w innym, który pstryka co 1s lub częściej, jeśli ma coś w kolejce... Jeśli używasz w ten sposób watchdoga, to w sumie możesz go nie używać wcale. Nie zabezpieczy Cię to wcale przed tym, że zawiesi się jakikolwiek inny task, a nawet jeśli zawiesi się jeden...
Witam, Próbuje uruchomić obsługę karty SD pod STM32f103ZET6. Wykorzystuje do tego bibliotekę, używaną wcześniej pod STM32f407. Zmodyfikowałem tylko inicjalizacje SPI i dorzuciłem testową funkcję zapisu do karty. Mimo to karta nie chce ruszyć. Przy próbie otwarcia jakiegokolwiek pliku dostaje: FR_NOT_READY. Próbowałem już na dwóch kartach SD, formatowałem...
Jak będziesz kupował coś innego, to nie kupuj F1, lepiej wybrać coś w stylu F4, L4, F0, L0, F7, H7, F3 (kolejność dowolna) - generalnie cokolwiek byle nie F1 <: Dlaczego F1 to zły wybór? W porównaniu do 8-bitowych AVRów to taki np. STM32F103C8T6 , ma dużo zalet. Choćby to , że jest 32-bitowy , 72MHz , rozbudowane timery i łatwiejszy dostęp do debugowania.
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...
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...
Witam Mam problem z obsłużeniem enkodera w programie - brak jakiejkolwiek odczytanej wartości. Enkoder to (201935): http://www.maxonmotor.com/medias/sys_mas... [syntax=c]void encoder_timer_config(void) { gpio_pin_cfg(ENCODER_PORT, ENCODER_LEFT_A, ENCODER_PORT_MODE); gpio_pin_cfg(ENCODER_PORT, ENCODER_LEFT_B, ENCODER_PORT_MODE);...
Trzeba to zrobić za pomocą timera, chociażby najprostszego SysTicka
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 :)
Najpierw proponuję poćwiczyć prostsze rzeczy. Diody, klawisze, timery itp. Potem dopiero brać się za dźwięk
Jak napisano wyżej, do odmierzania czasu służą timery. Pomyśl, ile instrukcji musi zawierać pętla, która inkrementuje zmienną, porównuje ją ze stałą i zamyka się lub nie. Na moje oko minimum trzy, a może 5 lub więcej. Skąd więc pomysł, że 72000000 obiegi takiej pętli miałyby zająć procesorowi 72000000 cykli zegara, skoro jeden obieg musi zająć tych...
Jak chcesz na STM32F103 generować dużo sygnałów jednocześnie, to w ten sposób nie da rady. Nie wiem, jak z użyciem timerów (on ma chyba 4, i każdy chyba po 4 kanały) - trzeba by doczytać, co dokładnie te timery potrafią, może da się na nich generować te "alarmy" z dużo mniejszymi zniekształceniami. Ale może najpierw sprawdzić, czy te zniekształcenia,...
Na TIM1 mam zrobiony timer do odliczania opóźnień... Od tego jest SysTick, albo TIM6 lub TIM7. Co JTAGa, to RM0008 rev.14, str. 172: Tabela 37. Debug port mapping
Możesz, poczytaj w RM8 jak można to zrobić bo fizyczne wyjście z Timera do wyzwalania ADC jest Ci niepotrzebne.
Zmieniony program sterownika. dodałem przerwanie timera a w nim: obsługę klawiszy w przerwaniu co 50ms uaktualnienie zegara oraz synchronizacje z wewnętrznym RTC co godzinę pustą funkcję timerIntervalHalfSec w której proponuję odczytywać stan wejść analogowych, nie na raz tylko po jednym. dodatkowo masz przerobioną funkcję switch reagującą na nacisnięcie...
Witam, Jakiś czas temu używałem dosyć często przerwania co 1ms od SysTick i wysztko było w porządku. Aktualnie już pare godzin szukam problemu dlaczego nie otrzymuję przerwania od tego timera. Skonfigurowany przez CUBE czyli HAL_SYSTICK_Config(f zegara/1000) = w moim przypadku 24000. Funkcja inicjalizyje i startuje timer, niestety nie wykonuje się funkcja:...
A co to za funkcja? :-) I w którym miejscu kodu powinienem ją wywoływać? W żadnych przykładach nie widziałem aby ktoś jej używał no chyba, że gdzieś jest zaszyta. Może się pozmieniało odkąd ostatnio używałem FatFs, ale kiedyś ta biblioteka potrzebowała (przede wszystkim do odliczania timeoutów), aby zdefiniować jakąś własną obsługę przerwania od timera...
Bardzo dziękuję za informacje. Posiedziałem trochę wczoraj w nocy i: moduły DMA pamiętają adresy i pozostałe ustawienia. Po zakończeniu transferu wszystko jest przywracane w rejestrach. Jeżeli coś jest stałe, to nie trzeba tego za każdym razem ładować do rejestrów (jak w programach 2 i 3); wystarczy tylko ustawić bit DMA_CCR1_EN. Podpucha :) Rejestr...
Mam tylko parę doświadczeń, że peryferia są w jakiś sposób priorytetyzowane i włączenie dwóch dzielących ten sam pin i ustawienie tego pinu na alternate function zawsze skutkuje przydzieleniem tego pinu dla tego samego peryferium. Akurat timery mają możliwość konfiguracji (włączania) każdego kanału z osobna. 4\/3!!
zegary itp włączone, bo jak mówiłem wszystko chodzi i odczytuje ładnie aż do pewnego momentu gdzie się wiesza. Funkcja odczytu znajduje się w przerwaniu od systicka, a przerwania od timerów maja niższy priorytet wiec nie powinny się wcinać w komunikacje. Jednak jak je wyłączę to chodzi bezbłędnie.
Witam, znalazlem kawalek funkcji na ustawienie procesora na 72MHz i wydaje mi sie, ze działa bo uzywam system tick do togglowania pinu, ale chce uzyc poprostu funkcji dostarczonych od stm. Na screenie widze ze jest gdzies definicja o ustawieniu procesora typu "STM32F10X_LD_VL" przez co program chodzi na 24MHz. Gdzie ona jest? http://obrazki.elektroda.pl/5784698000_1...
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...
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...
(at)gaskoin Jak by nie patrzec zegar, porty, jakis timer, dac, adc, dma, USART i masz juz znaczna czesc RM do przeczytania... Chodzi o to ze sa bardziej zlozone niz AVR-y PICe itp. i tych rejestrow trzeba wiecej poustawiac... a znajomosc dzialania jakiegokolwiek prostego procesora wiele ulatwia. Mozna zaczynac od zera ale trzeba poznac od podstaw wszytko...
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();...
Przepraszam trochę zarzuciłem temat. Zrezygnowałem z eclipse. Moim zdaniem jak coś jest do wszystkiego to jest do ...... niczego. (at)Freddie - zgadzam się z Tobą w każdym punkcie Twojej wypowiedzi. Jednak mieczotronix wspomina o takim czymś jak "learning curve". Rozpoczęcie pracy z ARM to w porównaniu z 8bitowcami - skok w hiperprzestrzeń. Trudno zacząć...
Witam! Chciałem sobie zrobić prosty Counter zliczający ilość wciśnięć przycisku podpiętego do wejścia PA0. Skorzystałem z przykładu który zamieszczam poniżej. Niestety mój prosty Counter nie zlicza naciśnięć i zmienna cnt cały czas wynosi 0. Mam takie podejrzenie że przycisk nie jest programowo połączony z TIM2 tzn w funkcja TIM_TIxExternalClockConfig(TIM2,...
Konfigurujesz TIM3 do obsługi PWM ale on nie ma nic wspólnego z pinem PB8, poczytaj dokumentację: http://www.st.com/st-web-ui/static/activ... m.in strona 32. Użyj innego timera. W swoim kodzie robisz mapowanie na porty C i E, nie będzie to raczej potrzebne, ponieważ chcesz użyć portu B. Jak wrzucasz...
Co do timerów - kiedy konfigurowałem tim1 do pracy w roli timera opóźniającego, również testowałem opóźnienia na diodzie. Używając stopera wydawało się, że jest ok. Jednak ds18b20 nie działał. SysTick uratował sytuację. Dlaczego? Nie wiem... Musiałbym mieć oscyloskop, żeby sprawdzić dokładnie te opóźnienia. Niemniej jednak ds18b20 działa, więc zamykam...
Jeżeli to przykład z książki to nie należy jej czytać. Exti + timer. Bardziej zakręcony sposób ciężko wymyślić. Robisz w hal to wystarczy w co 20 do 50 przerwaniu systicka sprawdzać, albo jak nie szkoda timera w takim regularnym przerwaniu innego timera bez żadnych exti Dodano po 6 Ps przy okazji jak się uczysz to używaj elementów języka a nie jakiś...
Kierując się sugestiami o stosie, próbowałem już bardzo duży ustawiać, np. 17408 i efekt ciągle ten sam(mowa o innym miejscu programu, poprzedni problem załatwiony). Pytałem o inne ewentualności, bo teraz wykłada się po włączeniu funkcji, w której ustawiane i używane są timery, dma, adc i przerwania. Rusza to niby, timery też, sygnały wyjściowe się...
TIM2->CCR2=0x1F; TIM2->ARR=0x1F; To tylko strzał w ciemno, ale nie byłbym pewny, czy przy takim ustawieniu timera to będzie działać - daj CCR inne niż ARR (mniejsze) - może akurat w tym jest problem. 4\/3!!
Dołączam się do tematu. Jak uruchamiałem komunikację 1-wire na STM32F103 bez użycia timerów (opóźnienia odmierzane pętlą FOR), również spotkałem się z problemami różnych czasów wykonania funkcji opóźniającej. Opóźnienia początkowo skalibrowałem za pomocą analizatora logicznego/oscyloskopu. Po użyciu nowszego kompilatora lub zmianie optymalizacji kodu,...
Dziś rano zabierałem się już do dopasowywania rejestrów do kodu Sparrowhawk'a gdy rzucił mi się w oczy brak: [syntax=c]GPIO_PinRemapConfig( GPIO_Remap_TIM4, ENABLE );[/syntax] Po dodaniu działa. Dziękuję wszystkim za pomoc. Tutaj całość działającego kodu dla potomnych: [syntax=c]RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD, ENABLE...
(at)tplewa - nie jest to prawda. Nie ma debuggera. A coś wydajniejszego w cenie arduino to bluepill z STM32F103 czyli jak Marek_Skalski napisał rodzina starsza i na wyginięciu, ale przynajmniej zapoznaje z 32bit MCU i architekturą ARM (ahb, apb, rcc, dma, różnorakie timery i nvic). Inne platformy, mocniejsze, gotowe do rozpoczęcia zabawy, w miarę tanie...
Teraz ogólnie ciekawe rzeczy wychodzą w ramach TINY. Ostatnio czytałem jakąś AppNote, gdzie w TINY był timer pracujący na 64MHz To już AtTiny24/45/85 miał (wbudowany PLL). AT90PWM chyba też. Mapowanie peryferii ma Tiny167. On tez ma wbudowane źródło prądowe przydatne przy pomiarze rezystancji czy pojemności.
Zamieszczam wyeksportowany plik z LPCXpresso z programem napisanym w asemblerze. Program ten mruga diodą w równych odstępach czasu które są odmierzane przez 32-bitowy timer. Program ten był testowany na tej płytce http://www.kamami.pl/index.php?ukey=prod... na układzie LPC1343. W pliku jest wszystko co niezbędne - skrypty linkera i...
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...
Nie ma większej różnicy jeśli chodzi o początki programowania. Biblioteki są troszke inne , ale zasada ich uzywania bardzo intuicyjna. Sam procek oczywiscie się różni zasobami , iląścią pamięci flash ram ale nie ma to większego znaczenia. Podstawowe peryferia jak timery przetworniki itp są w obydwu. Programuje się to programatorem najlepiej ST-LINK...
Kiedy timer jest zatrzymany (CEN=0), rejestry ARR i PSC ładują się natychmiast, bez UG. Przerwanie zostaje zgłoszone przy wyzerowanieu CNT na końcu okresu. W przerwaniu Autor po kolei czyta rejestr CNT (prawdipodobnie równy w tym momencie 0), wyświetla górny bajt (co zajmuje jakiś czas), po czym PO CZASIE POTRZEBNYM na wyświetenie CZYTA CNT jeszcze...
Przeglądnąłem trochę tematów odnośnie tych procesorów i wiele osób odradza stosowanie biblioteki Std_Periph... na rzecz bliższego zapoznania się z procesorem już od samego początku. Postanowiłem w ten sposób zacząć i udało mi się skonfigurować SysTick (przerwanie co 1ms). Teraz chciałem sygnałem PWM "zaświecić" diodę z odpowiednim wypełnieniem. 2 diody...
Witam szanowne grono programistów:D Borykam się z drobnym problemem, ale czas goni a chciałbym to w ten sposób rozwiązać. Potrzebuję przekazać do funkcji cały rejestr, który ta ma ustawić. Żeby zobrazować jakoś prosty przykład: [syntax=c]void save_amp(uint16_t amp, TIM_TypeDef reg, TIM_TypeDef* tim) { tim->reg=amp; // jakiego typu drugi argument żeby...
czyli jedziesz na wewnętrznym. Dobrze przynajmniej ze w ARM-ach nie działajacy zegar nie powoduje milczenia procesora. A tak przy okazji jak mozna pisac program nie sprawdziwszy tak podstawowych rzeczy jak ustawienie zegarów. Już nie pisze o podłączaniu oscyloskopu ale choćby i timerami zasilanymi z rożnych źródeł - diodą pomigać - przynajmniej człowiek...
Podłączenie jest wzięte z dokumentacji odbiornika: https://obrazki.elektroda.pl/2408779300_... Wejście mikroprocesora może być którekolwiek (np. PC0) Patrzyłem programy na inne rodzaje mikroporcesorów, lecz nie potrafiłem ich przerobić na swój. Głównie dlatego, że niedawno zacząłem się tym zajmować i jeszcze nie do końca rozumiem jak...
stm32f103 firmware stm32f103 programowanie oscyloskop stm32f103
tyrystory zamienniki iveco zacisk znajduje filtr oleju
jesteś głupi korek naczynia wyrównawczego
Mikrofon nie działa w SteelSeries Arctis 5 po wymianie kabla Mikrofon nie działa w SteelSeries Arctis 5 po wymianie kabla