Pomysł ze zgłaszaniem przerwań sto tysięcy razy na sekundę jest zpełnie chybiony, to po pierwsze. Mierz czas timerem. Po drugie, sprawdź w manualu, jaka jest minimalna wartość rejestru ARR umożliwiający poprawną pracę timera. U Ciebie wartość ta wynosi prawopodobnie 0. Po trzecie, jest w języku C takie słowo kluczowe na literę 'v', o którym co chwila...
[syntax=c]//============================... // TIM3 Interrupt Handler //======================================... void TIM3_IRQHandler(void){ if(TIM3->SR & TIM_SR_UIF) // if UIF flag is set { TIM3->SR &= ~TIM_SR_UIF; // clear UIF flag } }[/syntax] AND zbyteczny az prosi...
Może da się nieco "na około", czyli komparatorem wyzwalać transfer DMA, który uruchamiałby timer?
Np. zaprogramuj SysTick lub dowolny inny timer na zgłaszanie przerwań z częstotliwością 100 Hz. Co 25 przerwań zmieniaj stan jednej diody, a co 100 - drugiej. Wszystko razem zmieści się w max. 20 liniach. Jeśli chcesz "zobaczyć" działanie timera z rejestrami compare - użyj dwóch rejestrów CC. W przerwaniu końca okresu zaświeć dwie diody, w przerwaniu...
Śmieszny jesteś. Nie jeden już tu poległ bo mu wszyscy wciskali wersje "naj" Jest to bzdura - po prostu nie ogarniali tematu i było bez znaczenia jaki procesor mają. Wskaż jakies istotne róznice pod względem trudności programowania na poziomie elementarnym: GPIO, I2C, SPI, DMA, Timery, ADC, DAC, CAN itp. Są znikome. Większość poległa pewnie na poziomie...
Można to zrealizować tak, że timer wywołuje interrupt. Jego procedura zmienia za każdym razem inne wyjście.
W STM32F nie można równocześnie przyjmować przerwań z wejść różnych portów o tych samych numerach. Do wejść przerwań nie podłącza się przycisków, bo przerwanie od przycisku jest dużo trudniejsze w oprogramowaniu, niż testowanie przycisku w przerwaniu timera.
Migania nie zauważe, jednak wypełnienie tak. Dioda powinna świecić na 30% możliwości, a porównanie mam jak jasnym światłem świeci druga dioda z timera 3. Dodam że mam te same diody.
Witam mam taki problem z OPM w stm32f3: otóż potrzebuję generować impulsy prostokątne wyzwalające 4 różne urządzenia i każde urządzenie ma swój charakterystyczny czas impulsu wyzwalający w konkretnej chwili. Chcę również, że od razu kiedy uruchomię TIMER to przez 4 kanały wysyłane są naraz wszystkie impulsy o różnych długościach bez opóźnień. Niestety...
Wykorzystaj więc TIMER w trybie PWM, bo widzę - że wypełnienie robisz "ręcznie".
/* Setup SysTick Timer for 1 µsec interrupts */ Następny... Czy naprawdę uważasz, że przerwanie co jedną MIKROsekundę to jest dobry pomysł? Twój program się "zatrzymuje", bo po prostu w kółko wchodzi i wychodzi do przerwania (które zresztą nie jest nikomu do niczego potrzebne, ale...). Jeśli do tego próbujesz pracy krokowej, to już w ogóle Twój...
Witam, Próbuje skonfigurować timer w mikrokontrolerze STM32F3 Discovery: [syntax=c] RCC_APB1PeriphClockCmd(RCC_APB1Periph_TI... ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Prescaler = 8000 - 1; TIM_TimeBaseStructure.TIM_Period = 20000; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_RepetitionCoun...
Nie znaczy to, że Microchip nie ma swoich problemów - ma i to niektóre bardzo poważne (stosując te procesory należy koniecznie czytać erratę), ale przynajmniej PWM wygląda na działający poprawnie. ZNam ten ból. :) Możesz w takim razie zobaczyć czy High Resolution Timer w STM32F334xx, STM32G474xx lub STM32H7xxxx spełni Twoje wymagania (rozdzielczość...
Hmhm, wydaje się, że jednak nie zrozumiałem jaki masz problem... Natomiast sugestia, żebyś nie korzystał z magic numbers pozostaje. Tego po prostu nie da się czytać, więc ciężko pomóc. Jeśli przerobisz to porządnie to pewnie sam znajdziesz błąd.
Numer przerwania, które chcesz włączyc. W Twoim przypadku będzie to numer przerwania od przepełnienia. Są one zdefiniowane w pliku stm32f334xx.h w postaci czytelnej dla człowieka.
1. Ja się uczyłem z tej książki: https://helion.pl/ksiazki/jezyk-c-szkola... Dobrze opisane podstawy języka. 2 i 3. Cóż chyba najlepiej zacząć od podstaw, które arduino bezczelnie omija. Musisz zapoznać się z wszystkim co było "pod spodem" funkcji na arduino. Czyli co to są rejestry, jak je obsługiwać...
Popatrz na enable cycle time - 1200 ns, czyli wieczność. Obsługę tego wyświetlacza na szybkim MCU należy oprzeć np. o przerwania. Czyli w przerwaniach timera, wywoywanych co odpowiedni czas - max co 1200ns dokonujesz zapisu, jeśli masz coś do zapisania i kończysz przerwanie. Dzięki temu procesor ma szansę w międzyczasie zrobić cos sensownnego, a nie...
Witam, steruję silnikiem sj01 z enkoderem 1920 imp/obr za pomocą sterownika stm32f3 taktowanego 64MHz. Silnik oraz enkoder jest podłączony i skonfigurowany pod sprzętowy timer jednakże licznik timera zliczający impulsy nie zmienia się przy wyższych prędkościach. Układ pracuje poprawnie przy połowie maksymalnej prędkości. Wrzucam konfigurację timera...
Super teraz działa. 3 dni się z tym męczyłem, tak samo z encoder mod na timerze1 ale teraz to już będę wiedział jak to ustawić bo robiłem podobnie ja tu przy USART. Czyli w AFR przesuwamy np. tak jak tu 7 bo USART jest AF7 na pozycje pinu. Wielkie dzięki teraz dużo więcej mi się rozjaśniło, przede wszystkim noty katalogowe :).
Cześć, czy ktokolwiek na tej planecie próbował użyć opcji remapowania enkodera z TIM15 na TIM2/TIM3/TIM4 w STM32? W datasheet opisane jest to tak (rejestr SYSCFG->CFGR1) https://obrazki.elektroda.pl/4378207500_... TIM15 nie ma bloku enkoderowego, ale według mojego rozumienia ustawiając odpowiednio bity ENCODER_MODE w tym rejestrze mogę...
skorzystam z STM32G0, który pracuje na 64 MHz i ma ciekawe peryferia i opcje takie jak np . DMA. To co dla Ciebie będzie ważniejsze, to ADC wykonujący pomiary, DAC zadający parametry i timer generujący PWM. Dedykowane dla takich zastosowań są STM32G4 i poprzednik - STM32F3, ale do tak prostego układu to STM32G0 wystarczy w zupełności. Tym bardziej,...
Nie XOR - jedno wejście timera można wprowadzić na dwa kanały, np. wejście 1 albo 2 na kanały 1 i 2. BKIN jest oczywiście właściwszym rozwiązaniem.
Jeśli chodziło Ci o pozbycie się wskazanej linii kodu - nic nie pomogło. Po za tym - miałem tak zdeklarowane inicjalizacje przez ostatnie pół roku i zawsze działało Prośba do kogoś kto korzysta z coocox - prosiłbym o wklejenie kodu z USARTem, skompilowanie go i wysłanie samego pliku hex (folder projektu->debug->bin) Edit: Skompilowałem program, który...
1. Zegar dla I/O? Jest włączony. Pisałem, że DAC na tym wyjściu w trybie wyzwalania SW mi działa. 2. Wyrzuć TIM_DIER_UDE - to nie TIM generuje żądania DMA, tylko DAC. Tu racja. Niestety to nie pomogło. Masz debugger? Podejrzyj w rejestrach czy: - licznik działa - CNDTR w DMA maleje - może jakieś flagi typ error/overrrun się ustawiają kiedyś w tym projekcie...
TIM8 wyzwala 1 raz transfer 3 bajtów (NDTR) przez DMA2 z pamięci do SPI TX. Tym sposobem SPI odbiera też dane przychodzące. Jeżeli aktywny jest kanał DMA1 sprzężony z SPI RX, to dane lądują w pamięci bufora kołowego. Czas odczytu 3 bajtów wynosi 24xTbit + 2xDMA_delay. To tak w skrócie, ponieważ używasz TIM8 podłączonego do DMA2 do wyzwalania transferu,...
Najbardziej martwi mnie dostępność bibliotek różnego rodzaju. Do Arduino było tego masa. Ponoć, że biblioteki tworzone dla AVR mogą być używane z STM, ale nie mam pojęcia jak to wygląda w praktyce, dopiero czekam na devboard do STM32F3. Aczkolwiek nie ukrywam, że możliwości STM-ów i ich cena oraz dostępność kuszą i to bardzo, zwłaszcza teraz kiedy mam...
Witam, Mam taką funkcję: [syntax=c]int init_pwm(int pwm_freq) { int clk = 72e6; // 72MHz -> system core clock. This is default on the stm32f3 discovery int tim_freq = 2e6; // in Hz (2MHz) Base frequency of the pwm timer int prescaler = ((clk / tim_freq) - 1); int pwm_period = tim_freq/pwm_freq; // 2MHz / 200Hz = 10000 int ms_pulses = (float)pwm_period...
STM32F303 Timer PWM enkoder
Jedno i drugie - działa za każdym razem. Nowe wersje OpenOCD wprowadziły maskowanie przerwań podczas "single step" - może po prostu o to Ci chodzi? Opcja ta (można ją wyłaczyć działa tak, że podczas klikania "step" w debuggerze w zasadzie nigdy nie zostanie wykonane żadne przerwanie. Ma to pewne wady jak i pewne zalety (np. bez tej opcji debuggowanie...
Widać, że nie wiesz o czym piszesz. J OK, cieszę się, że Ty wiesz. Ale chyba nie do końca drogi Kolego. Pomiar IC jest tylko jedną z metod pomiaru częstotliwości (w tym przypadku akurat mocno średnio dobrą). Dużo lepiej jest podać taki sygnał na wejście zegarowe timera. W takim układzie pracuje jedno z moich urządzeń (na STM32F3) gdzie pracuje na raz...
Hej, Od dłuższego czasu grzebie sobie przy STM32F334, który jest dedykowany do przetwornic wszelakich (timer HRTIM jest bardzo bogatym peryferium). Moim głównym zainteresowaniem są przetwornice rezonansowe, które osiągają bardzo duże sprawności oraz nie sieją w eter zakłóceniami. Największym problemem takich przetwornic jest zmienna częstotliwość rezonansowa...
Witam. Od jakiegoś czasu walczę z płytką STM32F334 DISCO + wyświetlacz 16x2. Napisałem kod z pomocą StdPeriph - zadziałał, chciałem trochę poprawić kod i napisałem go rejestrami - nie działa. Przebiegi są dokładnie takie same. Przechodząc do rzeczy, zacznę może od kodu który działa : Sam kod wygląda tak : https://obrazki.elektroda.pl/7092947700_...
A dokładniej aby nie została przerwana w momencie da niej krytycznym - między przepisywaniem zmiennej data do bufora i inkrementacją zmiennej ut1_end. W czym przeszkadza, ze przerwanie od np timera, który nie ma nic wspólnego z UART, wykona się pomiędzy krytycznymi operacjami? Jeśli natomiast chodzi o przerwanie, które może wywołać odbiór czy tam nadawanie...
Mogę rzucać. W EP udostępniłem pokaźną liczbę kodów źródłowych i to niebanalnych konstrukcji. Ale jednak w EP to tez dostawałeś wynagrodzenie za robotę, jeśli się nie mylę, więc to takie słabe porównanie jak dla mnie :) Zresztą to co pisałem to były uwagi ogólne do "ogółu", nawet nie miałem intencji, żeby ktokolwiek się tłumaczył. To jak pisał SylwekK...
Użyj SPI, wyzwalanego ręcznie lub przez przerwanie EXTI. Do pinu SCLK SPI podłącz wyjście timera na którym będziesz generował wymagany zegar 1MHz.
Witam. Chcę za pomocą płytki STM32F334 DISCO sterować wyświetlaczem 16x2 przez interface 4-bitowy. Połączenie wygląda tak : VSS - GND VDD - 5V VO - NC RS - PB13 RW - GND E - PB15 D4 ... D7 - PA12 ... PA15 A - przez rezystor 220 ohm do 5V K - GND Kod napisany w "System Workbench for STM32" zgodnie z datasheet'em sterownika wyświetlacza. https://obrazki.elektroda.pl/3189253300_...
Witam, Założyłem tutaj konto ponieważ jest to prawdopodobnie największe forum elektroniczne w Polsce, a co za tym idzie zakładam, że znajduje się tutaj sporo specjalistów którzy mam nadzieje pomogą mi w pewnym problemie. Zaczynam dopiero swoją przygodę z układami STM32. Już mniej więcej wiem jak działają GPIO, timery jednak chciałbym już iść dalej....
Nie wiem o co chodzi, support STM mi powiedział, żebym wgrał kod do ramu oraz wektor przerwań. Cały problem od początku: Zadanie programu jest następujące: ze sterownika sczytuję wartości enkoderów i zapisuję je do pamięci flash. (powinno to być wykonywane timerem co 10ms). Następnie odczytuję te wartości z flasha w celu odtworzenia ruchu i odpowiednie...
Witam ponownie, Wracam tutaj z potrzebą skonsultowania pewnego problemu. Mianowicie po uruchomieniu USB postanowiłem dokładać kolejne bloki urządzenia i tak też pojawiła się obsługa DMA, ADC wyzwalanego timerem 2. No niestety projekt po kompilacji i wgraniu w ogóle nie działa :/ - Na terminalu otrzymuje 20 bajtów o wartości zero. Po zakomentowaniu prawie,...
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...
Witam wszystkich, Przez pewien okres czasu zdarzyło mi się programować przy dużym wsparciu bibliotek ST. Jak jednak powszechnie wiadomo, korzystanie z owego rozwiązania nie jest optymalnym podejściem. Postanowiłem zatem przejść do operacji na rejestrach mikrokontrolera. GPIO, Timery, DMA - wszystko poszło w miarę gładko, zdziwiłem się dopiero przy ADC....
A na czym polega różnica pomiędzy pisaniem kodu np. na STM32F4 i STM32F3, wynikająca z tego, że mamy w tych rodzinach różne rdzenie? Zrobiłem parę projektów przenośnych pomiędzy kilkoma seriami STM32 i jedyne różnice pomiędzy modułami specyficznymi dla serii polegały na szczegółach konfiguracji peryferiali - DMA i SPI. W F1 chora jest koncepcja "remap",...
Temat już przeze mnie poruszany...częstotliwość PWM...Chcę go użyć jako DAC. Dlaczego z takim oślim uporem brniesz w kierunku audio z użyciem PWM? Maksimum co możesz uzyskać w ten sposób to 41015Hz(at)12 bitach. A wystarczy dowolny DAC audio , bo przecież audio chcesz odtwarzać i masz 24 bity przy 96kHz, czyli jakość DVD, przy znikomym użyciu rdzenia,...
Witam, Korzystam z tego kodu: [syntax=c]#include "main.h" #include "stm32f3_discovery.h" /** * (at)brief Initializes the putput pins for the Timer one channels. Currently * hard coded to drive the LED3 (channel 1), LED7 (channel 2), and * LED10 (channel 3) on the STM32F3 Discovery board. * (at)param pwm_freq: Frequency of the PWM in Hz * (at)retval...
Nie neguję dokumentacji. Nawet więcej, nigdy nie odpalam bez niej. Nawet gotowca konfrontuję z datasheetem. Po prostu mi chodzi że z przykładem jest prościej i szybciej. Nie ma co popadać w skrajności. Czyli też w uruchamianie wyłącznie na podstawie datasheeta. Bo czas też kosztuje. I szkoda na nowo odkrywać koło. Niektórych rzeczy wręcz bym nie odpalił...
Witam, robię amatorsko quadrocopter i jak wiadomo do okreslenia orientacji przestrzennej uzywam oczywiscie magnetometru, akcelerometru i zyroskopu. Teoretycznie mozna by orientacje okreslac jedynie na podstaie magnetometru i akcelerometru, ale one z siebie same troche szumia i dlatego postanowilem zrobic taka fuzje czujnikow dolaczajac jeszcze zyroskop...
Czy: Kod C - Tak, chyba że wymusisz update "ręcznie". 4\/3!!
Ja mam to tak skonfigurowane: [syntax=c] // gpio enkoder - PB4, PB5 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; GPIOB->MODER |= GPIO_MODER_MODER4_1 | GPIO_MODER_MODER5_1; GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4 | GPIO_OSPEEDER_OSPEEDR5; GPIOB->PUPDR |= GPIO_PUPDR_PUPDR4_0 | GPIO_PUPDR_PUPDR5_0; GPIOB->AFR[0] = 0x00220000; //init enkoder RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;...
Ciekawostka: wiecie, że wiele mikrokontrolerów pozwala na budowę całkiem zaawansowanych przetwornic? Ciekawostka: Seria stm32F334 oraz nowsza stm32G474 oraz TMS320x280x, 2801x, 2804 Dlaczego? Właśnie dzięki bardzo zaawansowane timerom, TI dodatkowo dzięki wielu rdzeniom i możliwości debugowania tylko jednego rdzenia, gdy reszta dalej może się kręcić....
[syntax=c]TIM3->CR1 |= TIM_CR1_URS;[/syntax] Tym timera nie włączysz.
A zegary ustawia Ci ten plik wygenerowany przez excela system_stm32f4xx.c ? czy sam to robisz ? Bo może trzeba ustawić HSE_VALUE ? Jak nie masz ustawionego HSE_VALUE to biblioteki od STM zakładają że masz kwarc 25Mhz
Masz 100x tyle modeli, które aż tak bogate nie są. Zresztą nie bez przyczyny powstała seria CM0/CM0+, a właśnie po to by "wygryźć" 8 bitowce i seria ta takich "ficzerów" to akurat nie ma. No o tym pisałem że masz ogromny wybór. A jak porównujemy Xmega i STM to np: STM32F303RDT6 - cena £3.63 / szt Flash: 384KB SRAM: 64KB + 16KB CCM (razem 80KB)...
A dokładnie, to jak to robisz? volatile int8_t spi1_error=0; ... static uint8_t spiTransferByte(uint8_t addr,uint8_t data) // { // spi1_error=0; // GPIOC->BRR =(1<<12); // nSEL-->low uint32_t timer=spi_Timeout; // while(!(SPI1->SR&SPI_SR_TXE ) { if(--timer==0) return(spi1_error=-1);} // SPI1->DR=(uint16_t)(data|(addr<<...
AT90PWMx - Produkt w fazie zakończenia produkcji. Nie ma sensu w to inwestować. ATTiny26 - zupełnie bez sensu jeśli idzie o falowniki. Praktycznie żadnego zysku względem mega88. ATXMEGAxx - od biedy może być do nauki. Ale pamiętaj o upierdliwości ADC w trybie single ended (offset), braku synchronizacji pracy liczników z jedną podstawą czasu, pomiar...
A nie masz tam czasem włączonego jakiegoś Watchdoga czy czegoś takiego co Ci resetuje procka? :)
Czy proponujesz zatem taki zapis: ... Jeśli w tym rejestrze wcześniej jest coś co chcesz zachować to może zostać, ja proponuje użyć operacji przypisania "=" zamiast sumy bitowej "|=" - używając sumy zakładasz że wcześniej jest tam "znana wartość", co niekoniecznie jest prawdą i czasem można się nieźle przejechać na takim założeniu... Widocznie przekroczenie...
Co do instrukcji barierowych to tylko wiem ze są takie i mają coś pożytecznego robić np zmusić proca do wykonania zalegających w cachu instrukcji np zapisu STM32F0 nie mają żadnego cache. Punktem wyjścia jest program bez tych instrukcji który też nic nie wpisuje do rejestrów. Widzisz tą podświetloną na żółto linijkę? Tam właśnie zatrzymał się układ....
Błąd masz w każdym obliczeniu. Ustawienie rejestru PSC na wartość x powoduje podzielenie zegara przez "x + 1". Ustawienie rejestru ARR na wartość x powoduje odliczenie "x + 1" taktów zegara. Z tego względu tego typu rejestry zawsze ustawia się na "x - 1" względem tego co sobie obliczyłeś. 4\/3!!
Jeśli ustawiłeś tryb Center-aligned, to timer zlicza w górę i w dół - okres PWM jest 2 x dłuższy. Połowa okresu przypada na wartość równą wartości ARR.
Np. dwa timery działające w trybie kaskadowym :)
poszukaj sobie w timerze 1 takiego bitu o nazwie MOE P.S. Skoro używasz przykładu, to czemu nie skorzystać z funkcji konfigurującej wyprowadzenia, tak aby nikt nie musiał się zastanawiać co robisz i czy na pewno wszystko? P.S.2. Zerowanie wszystkich rejestrów timera jest całkowicie zbędne. Jeśli czujesz przemożną chęć resetowania timera, to w RCC masz...
Spróbuj zmienić ten parametr: [syntax=c]sBreakDeadTimeConfig.BreakStat... = TIM_BREAK_DISABLE;[/syntax] Bawiłem się jakiś czas temu PWMem na STM32F4. Możesz zerknąć na githubie [url=https://github.com/adam-borkowski/S...
[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...
RCC-> AHB2 ENR|=RCC_ APB2 ENR_TIM1EN; Popatrz tutaj _BARDZO_ dokładnie co do czego nie pasuje.
Witam, skonfigurowałem ADC które wyzwalane jest timerem 2(to działa dobrze). DMA wypełnia bufor 70 próbkami jednak: - większość probek jest ok, ale np gdy na wejście podam sinusa...to np co 15(w praktyce jest to losowa próbka) jest bitową reprezentacja jedynek obok siebie example: ..2345, 2345, 3f, 2344, 2421... Wydaje mi się że wina stoi po stronie...
stm32g4 oraz stm32f334 ma timer hrtim, który pozwala na generowanie deadtime z bardzo dużą dokładnością. Można też polecić procki z serii piccolo od TI, ale to egzotyka dla większości użytkowników, a szkoda bo bardzo dobre układy. Inne rozwiązanie to zakup sterownika dla kluczy. Sygnał podstawowy jest generowany przez uC a driver zapewnia pozostałe...
Stałą czasową. Im dłuższa tym lepiej, lecz musi być znacznie krótsza niż minimalny odstęp pomiędzy impulsami z enkodera. A wartości timera zbliżone do max mogą wynikać z odjęcia od zera, czyli następuje niedopełnienie.
STM32F33x też ma timer wysokiej rozdzielczości.
arm.com: Cortex-M4 Technical Reference Manual ARMv7-M Architecture Reference Manual Co do timera: prawdopodobnie chodzi o opóźnienie kasowania zgłoszenia przerwania. Jeśli skasujesz pod koniec procedury, to po jej zakończeniu znacznik będzie jeszcze ustawiony i spowoduje powtórne zgłoszenie przerwania. Do sterowania NVIC proponowałbym jednak użyć pseudofunkcji...
podobnie nazywa się funkcja tego przerwania - void TIM1_UP_TIM10_IRQHandler(void) Dodano po 1 jak masz uruchomione przerwanie timera - TIM_DIER_UIE, włączony w NVIC i funkcję przerwania z prawidłową nazwą - musi działać. Dodano po 1 To nie jest - TIM1_IRQHandler() - dla TIM1 nie ma takiego przerwania. Są - TIM1_BRK_TIM9_IRQHandler, TIM1_UP_TIM10_IRQHandler,...
Nie polecam robienia dead time na piechotę, stm32f334 ma specjalizowane timery do realizacji sterowania (między innymi tryb half mode,push-pull mode , deadtime, adc phase shift trigger i kilka innych). Są to rozwiązania sprawdzone i sprawne oraz są wsparte przez hardware, więc zawieszenie się uC nie ma wpływu na pracę urządzenia (bardzo przydatne podczas...
To jakiś cud, biorąc pod uwagę, że pokazany program nic przez UART nie wysyła. Czy zweryfikowałeś częstotliwość zegara procesora (np. miganie diodą w przerwaniu timera)? Na rejestrach BSRR i BRR nie wykonuje się operacji logicznych, bo nie ma to żadnego sensu.
Tu na pewno jest błąd: if(released & btn == btn) to to samo co: (poprawiłem) if(released & 1) Jeśli nie masz nieblokującej obsługi LCD w przerwaniu timera, to skoro już bardzo chcesz pisać coś na LCD w przerwaniu - obniż priorytet tego przerwania.
Przerwanie z timera może Ci zdekrementować zmienną przed jego wyzerowaniem. Skoro i tak czekasz w while'u to nie lepiej użyć trybu single shot? (edit: albo one shot. Nie pamiętam, chodzi generalnie odliczanie z zatrzymaniem przy końcu+zapalenie flagi)
Czy jest możliwość takiego skonfigurowania strumienia DMA w konfiguracji pamiec do periferial żeby wyzwalany był przez timer ale dane szły do Uarta? Jest to możliwe - to że dany kanał jest przyporządkowany - przykładowo - do Timera, nie oznacza że może on wysyłać/odbierać dane tylko do/z timera. Niemniej jednak jeśli chcesz wysyłać dane do UART przez...
Nie wnikałem, więc to strzał na ślepo, ale obstawiam, że częstotliwość timera wcale nie wynosi 45 MHz, tylko 90 MHz. W dziale o RCC jest taki obrazek "Clock tree" - przeczytaj dokładnie to co pisze pod nim (w przypisach, albo w dalszej części). Zresztą na obrazku też jest to namalowane.
Ale już dla: PSC = 83999; ARR = 999; nie ma sekwencji 1s ON i 1s OFF. Dioda wtedy mruga zdecydowanie szybciej. No właśnie (; Przecież timer i preskaler są 16-bitowe (; Trzeba było od razu pisać o tym warningu (; 4\/3!!
Witam, programuję od 2 miesięcy mikrokontrolery STM32. Środowisko jakiego używam do tego to CubeMX do generowania konfiguracji oraz System Workbench for stm32 (eclipse z nakładką). Co ważne używam tego na Windowsie (a nie ma linuksie). Tydzień temu odinstalowałem eclipse i zainstalowałem ponownie (czemu, nie powiem :), zrobiłem to) i od tego momentu...
3. Napisałem obsługę I2C na przerwaniach samodzielnie Nie napisałeś obsługi I2C na przerwaniach tylko masz polling I2C w przerwaniu timera. To jest klasyczny przykład na to jak czegoś nie należy robić. Obsługa I2C w przerwaniach polega na obsłudze przerwań przychodzących z tego waśnie peryferium. i zastanów się jak połaczyć przerwania I2C z przerwaniem...
11 podstawień u mnie vs. 24 u Ciebie - miłośnik długiego kodu się znalazł, he, he. ;) Plus - u mnie wiadomo, co jest w rejestrach timera, a u Ciebie - nie ;) I ostatnia różnica - mi kod działa. Wiem, na niestosowne żarty mi się zebrało, a tu Kolega w niedoli... No ale przynajmniej starałem się pomóc.
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...
https://obrazki.elektroda.pl/5077182400_... MICROS to niezależny dystrybutor praktycznie wszystkich bardziej i mniej popularnych mikrokontrolerów. Dzięki swojej pozycji nie koncentruje się na promocji żadnej wybranej marki i jest w stanie zaoferować optymalny produkt do wskazanego zastosowania. Mnogość dostępnych na rynku architektur...
Twoje problemy rozwiązałby jakiś TMS320 z serii C2000. Ale to tylko moje dywagacje. Jeśli chodzi o STM32F4 to musisz przemyśleć czy rzeczywiście 4 MHz jest niezbędne dla ADC. Kiedyś bawiłem się timerami w Keil'u więc kod wstępny na pewno Ci się przyda (kanały timera3 działają na GPIO->C6-C9): odznacz NVIC_EnableIRQ !!! ): [syntax=c]void TIM3_IRQHandler(void)...
To się mylisz, konflikt może być. Zapisz tego fora tak: [syntax=c] for(;;) { int tmp = TIM9->CNT; if((tmp> 5000) && (zapalona)) { GPIOD->ODR |= (1 << 15); // gasi LED zapalona = 0; } } } [/syntax] Co będzie, kiedy tmp będzie > 5000 (np. ==ARR), w międzyczasie przyjdzie przerwanie i wyzeruje timer oraz zapali diodę? Ew. zaglądnij...
Taki HAL od ST, może i wśród ludzi bardzo nielubiany (bo faktycznie ma swoje chore rozwiązania), ale u mnie spełnił swoje zadanie, gdy przesiadałem się z stm32F334 na nową STM32G4 to dzięki ich HAL miałem bardzo uproszczoną pracę, a różnicę między peryferiami niestety były znaczące, ale opis jaki dostarcza sam HAL po prostu robotę ułatwił. To co mogę...
(at)tmf - dziękuję za miłe słowa :) Właśnie takie było założenie co do grupy "docelowej". Myślę, że jeszcze długo ATmegi i ATtiny będą punktem startowym dla hobbystów ze względu na nawał informacji w Internecie i mocno zakorzeniony pogląd jakoby wszystko inne było drogie/trudne itd. W sumie chciałem, żeby w poradniku było trochę więcej nawiązań do...
albo powielić na jakimś szybkim Cortexie do 1kHz Następny. Jak się powiela na szybkim Cortexie, czego nie można zrobić innym procesorem? Albert To tylko sugestia. Jeśli w tej samej cenie mogę mieć dostępne 48MHz (przykładowo STM32F0) zamiast 16MHz (Atmega8) i nie muszę szczypać się, ile taktów zajmie mi zmiana GPIO, to czemu nie? O 32-bitowym timerach...
Super, dzięki... Nie dość, że ten atollic nie chce zbudować ani debugować tego projektu, to jeszcze przez niego zepsuło mi się obecne środowisko (oba są na eclipsie, może ma to jakiś związek). Żeby nie było, skopiowałem cały projekt do innej lokalizacji i stamtąd go zaimportowałem. Teraz w SW4STM32 mimo, że zmieniam coś w kodzie w projekcie w pierwotnej...
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...
https://obrazki.elektroda.pl/8252582300_... https://obrazki.elektroda.pl/9509387700_... Moduł DshanMCU Pitaya Lite to płytka rozwojowa MCU oparta na kolejnej alternatywie dla układów STM32: mikrokontrolerze MindMotion MM32 z rdzeniem ARM Cortex-M3, o którym mówi się, że jest kompatybilny programowo z STM32. Jednostka...
Po to, żeby całość działała dobrze i w miarę dokładnie, o ile celem jest dokładny pomiar serii kolejnych odcinków czasu wyznaczanych przez zbocza sygnału wejściowego przez zwykły timer. NA STM32F można też w tym celu użyć trybu timera przwidzianego dokładnie dla takiego zastosowania - "PWM input mode", z automatycznym zerowaniem timera po wykryciu jednego...
Witam! Wszyscy się czymś chwalą to ja też się pochwalę. Od razu pisze że projekt jest nieco zaniedbany i jest sporo błędów w większości drobnych ale widocznych. Nie jest to urządzenie pomiarowe z profesjonalnego punktu widzenia. W tym tygodniu przyjdą nowe płytki - tutaj mogę pokazać wizualizacje: https://obrazki.elektroda.pl/1240641000_...
Myślę że przesunięcie rzędu czas trwania jednej konwersj nie było by problemem więc pytanie nadal aktualne A dlaczego nie wykorzystać możliwości. Jeżeli nie znasz HALa to najpierw zainstaluj sobie przykłady w Cube (ale nie mx) i przeanalizuj je. Wtedy domyślisz się jak zaincjalizować porty, ADC, DMA i timer aby trygierzował konwersje w odpiednim czasie....
W miarę wzrostu skomplikowania prjektów na ATmega rozpocznie się walka z ubogimi peryferialami, podczas gdy Cortexy mają po min. kilkanaście timerów 16- i 32-bitowych z weloma kanałami PWM. Akurat STM32 mają w większości timery 16-bitowe i zwykle 0 timerów 32-bitowych (wprost, bo timery 16-bitowe można łączyć w "łańcuch"), takie STM32F0 mają aż 1 timer...
Masz działający kod na F0: [syntax=c]#define PWM_FREQ400// Hz #define PWM_STEPS80 #definePWM_CLK SYSCLK_FREQ #definePWM_PRE (PWM_CLK / PWM_FREQ / PWM_STEPS) RCC->AHBENR |= RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOAEN; LED_PORT->MODER = GPIO_MODER_AF << (GREEN_LED_BIT << 1) | GPIO_MODER_AF << (BLUE_LED_BIT << 1);// set LED pins...
Nie napisałeś jaki masz procek więc sam musisz rozwiać swoje wątpliwości za pomocą jego schematu układu zegarowego. Bywa, że częstotliwość taktowania danego timera jest powielona 2x względem szyny APB.
http://obrazki.elektroda.pl/3668151000_1... Witam. Chciałbym przedstawić sposób własnego pomysłu na w pełni sprzętowe sterowanie LEDów WS2812B za pomocą mikrokontrolera STM32F030. Nie trzeba nic konwertować, marnować cenny RAM czy cykle procesora, wystarczy dane RGB (3 bajty/led) wysłać jak po SPI. Można też do tego użyć DMA. Sposób...
Witam od dwóch dni mam problem z USART na stm32f4discovery. Otóż napisałem sobie prosty programik na bazie tego przykładu pod stm32f4discovery ze strony Freddiego Chopina, tyle że sam napisałem sobie konfigurację zegarów itd. Zrobiłem konfigurację USART 6, napisałem funkcję do wysyłania jednego bajtu oraz całego słowa i wrzuciłem sobie wysyłanie bajtu,...
Witam. Mam pytanie dotyczące płytki stm32f4 discovery. Dopiero zaczynam z nią prace i jestem przy timerach. Mam np. timer 4. Jaki powinienem dac okres zliczania i preskaler aby uzyskać np. 5 sek??? Czy odmierzanie czasu konfiguruje inaczej???
W Twoim przypadku mówimy o maksimum 13000 przerwań na sekundę, a nie o 200000 (to był mój przypadek). F4 nawet tego nie zauważy. Przy ciągłej transmisji 115200 (a ciągła raczej nie jest) zajmie to < 1% mocy obliczeniowej. Powtarzam pytanie: w czym problem? Ja miałem 200000 przerwań na sekundę w F0 działającym na 40 MHz.
stm32f3 usart stm32f3 discovery stm32f3 paczki
piekarnik amica piecze dziennik konserwacja bateria awaryjny
lifebook c1020 schemat podłączenia kotła gazowego
Porównanie głośników MEDION 44332 540W i MD 44458 200W Kompresja Toyota Yaris 1.0 2003: Stopień i Ciśnienie