Witam, Bawię się STM32 już od jakiegoś czasu ale właściwie nigdy nie potrzebowałem jakiś super prędkości. Teraz chciałem napisać prostą funkcję do sterowania WS2812b i natknąłem się na dziwny, moim zdaniem, problem. Pomimo, że Timery działają szybko to zwykłe przełączanie pinu (funkcja HAL_GPIO_WritePin) działa niemiłosiernie długo. Najprostszy program:...
https://obrazki.elektroda.pl/5926592700_... Aloha! Świąteczny konkurs, który nie mógł się oczywiście obyć bez projektów z migającymi diodami w tym roku przyniósł także dwa całkiem nowe i ciekawe sposoby sterowania diodami WS2812. Mam tu na myśli rozwiązania panów tmf ( https://obrazki.elektroda.pl/9596522100_... No...
Wydaje mi się że mnie plik wygląda okay [syntax=c] /** ****************************************... * (at)file startup_stm32f030xc.s * (at)author MCD Application Team * (at)version V2.3.0 * (at)date 27-May-2016 * (at)brief STM32F030xc/STM32F030xb devices vector table for Atollic TrueSTUDIO toolchain. * This module performs:...
Witam, Próbując się posiłkować reference manualem (RM0008) oraz książką "Mikrokontrolery stm32 w praktyce" próbowałem odpalić okresowe wykonywanie przerwania na TIM2 i niestety nic z tego nie wyszło. Proszę o rade gdzie szukać błedu. Wygląda to tak: Konfiguracja NVIC // Wlacz przerwanie od Timera 2 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp...
Może zacznę od opisu konfiguracji. Mam czujnik TSOP1736 podłączony do zasilania 5V, zaś jego wyjście do wejścia P0.16 mikrokontrolera LPC2148. Pozostałe połączenia (zasilanie, JTAG itp.) są OK, gdyż jest to zestaw ewaluacyjny Propoxu - EVBlpc213x\4x. Napisałem sobie bibliotekę do odbioru kodu RC5. Posiłkowałem się tą #include "lpc214x.h" #include...
[syntax=c] #include "stm32f10x_conf.h" #include "stm32f10x_gpio.h" #include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_flash.h" #include "misc.h" #include "stm32f10x_exti.h" #include "stm32f10x_flash.h" #include "integer.h" //#include "rtc.h" #include "diskio.h" #include "ff.h" #include "ffconf.h" #include "stdio.h" //------- Pin Defs...
Wykorzystując timer 16-bitowy oraz preskaler 65535 chciałbym wywołać przerwanie co 1 minute(59,6 sekundy) i w efekcie naprzemiennie zapalać i gasić diodę: [syntax=cpp] void Clock_init(void); void GPIO_init(void); void Tim1_init(void); int main(void) { Clock_init() ; GPIO_init(); Tim1_init(); while(1){;} } void Tim1_init(void) { TIM_TimeBaseInitTypeDef...
Ustawiłem TIM3. Pracuje poprawnie. Ma generować impulsy co 1 s. Mam jednak problem bo już na starcie wystawia impuls, który jest zliczany. Jak zrobić aby pierwszy impuls pojawiała się po 1 s?
W jakimś przerwaniu timera migasz diodą. w trakciemigania sprawdza jakąs flagę czy ma migać a jak nie to wylacza diodę. W pętli jak klawisz sie nacisnie (zakładamy tylko jeden stan - wyłaczenie - a właczenie migania następuje poprzez inny magiczny przycisk = reset) ustawiasz flagę na niemiganie. Jezeni wyłaczenie ma nastapić natychmiast (a nie przy...
Nie napisałeś nic o środowisku programowania. Jeśli to jakaś samoróbka Eclipse, stawiam na błędną konfigurację stosu/stosów. żeby poprawnie obsłużyć przycisk w przerwaniu portu, musisz i tak mieć przerwanie timera i wyłączać przerwanie przycisku po jego przyjściu, a potem włączać je w przerwaniu timera - bez sensu - dużo łatwiej i krócej zrobić to w...
DZIĘKI BARDZO. W końcu działa :) Keil nie chciał wgrywać programu i debugować ponieważ pamięć była zabezpieczona, trzeba było ją odblokować i wszystko jest ok. Rzeczywiście uc resetował się przez układ watchdog. Najciekawsze jest to że był on od początku i nawet o tym nie wiedziałem. Jeszcze raz dziękuję bardzo ;) Pozdrawiam
Witam staram sie uruchomić sprzętową obsługe encodera w stm32F4. Generalnie całość już działa problemem okazuje się sam timer. Działa inkrementacja i dekrementacja timera jednakże licznik nie chce się przepełnić zarówno przy zliczaniu w górę i w dół timer dolicza do maksymalnej wartości zapisanej w rejestrze CNT. przy zliczaniu w góre (obrocie koła)...
Może więc warto by było napisać co zrobiłeś, że Ci zadziałało, w jakich konkretnych warunkach ten błąd wystąpi (np wersja Windows/Linux, wersja Ecplise) i pomóc innym? Sam walczyłem z Ecplipsem jak jeszcze nie był dla ARMów tak popularny, były z pluginami problemy ale trzeba było je zwalczyć np. zmienić wersje Eplipsa, zainstalować ponownie, poszukać...
Tego jeszcze nie grali ;) Wstawiłem tą funkcję do przerwania od Timera TIM3_IRQHandler i procek stawał. Potem wstawiłem tą funkcję do funkcji main i było OK. Wstawiłem tą funkcję z powrotem do przerwania i odpiąłem JTAGa i cyka. Hmm ciekawe. Więc w sumie procek się resetuje ale jest to rozwiązanie trochę pośrednie do tego, które chciałem wykorzystać....
Jeśli coś mniejszego od Raspberry/Orange Pi, to proponuję zacząć od poszukania oprogramowania niezbędnego do działania z Arduino i z modułem STM32, oraz sprawdzenia, jakie możliwości daje który moduł. Z tego, co pamiętam, STM32 jest dużo szybszy, najtańsze moduły do obu są w cenie kilkunastu zł - moduł STM32C8T6 od około 14zł, Arduino Pro Mini od 12.60zł...
Ogólnie widziałem że używasz real-time do domierzania opźnień. nie, do opóźnień jest przerwanie timera 1 co 50ms. KEYBOARD_KEY_TIMEOV z przerwania obsługi klawiatury, jak po 15 sekundach nic nie naciśnięto, wystawiany jest kod klawisza : KEYBOARD_KEY_TIMEOV. natomiast propozycja milis() niestety nie przyniesie oczekiwanego rezultatu. najlepiej jest...
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)...
Odpowiedź na Twoje pytanie jest trywialnie prosta. Rejestry które są buforowane (ARR, PSC i chyba jeszcze jakieś) aktualizują swój realny stan w momencie update'u, który występuje automatycznie w momencie przekręcenia licznika, czyli (w uproszczeniu) doliczenia do ARR. Ty w swoim wyjątkowo dziwnym kodzie fizycznie uniemożliwiasz wystąpienie update'u,...
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:...
Nie sądzę, by jakikolwiek projekt dał się sensownie zrobić bez przerwania timera, więc testowanie obecności pastylki można zrobić w tym przerwaniu. Z drugiej strony kod obsługi OneWire z delay() nie nadaje się do użycia w projekcie, w którym są przerwania, więC proponuję zrobić od nowa obsługę OW. Przykład na F0 masz w niedawnej EP.
Pojawił się u mnie ostatnio problem po dodaniu w programie przerwania od Timera. Dotychczas działało wszystko super, debagowanie trybie krokowym działało bez problemu itd. Po dodaniu przerwania program również działa ale niestety w trybie krokowym...nie do końca. Gdy zatrzymam rdzeń w jakimś miejscu programu i wykonam następną instrukcję pojawia się...
Tak oczywiście: Podobnie zresztą jak w kodzie, który wyżej dałem. [syntax=c]void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line13) != RESET) { // Czyszczenie flagi przerwania EXTI_ClearITPendingBit(EXTI_Line13); //TIM_SetCompare1(TIM2, 200); // okolo 60ms //TIM_SetCounter(TIM2, 0); // zeruj licznik // Wlaczenie timera //TIM_Cmd(TIM2, ENABLE);...
Korzystam z przykładu od Freddiego stm32cl_blink_led-1.2.1-120107 i tam w vectors.c jest właśnie funkcja Default_Handler która kręci się w kółko... Poza tym zadeklarowanych jest dużo funkcji w tym: [syntax=c]// System tick timer void SysTick_Handler(void) __attribute__ ((interrupt, weak, alias("__Default_Handler")));[/syntax] oraz: [syntax=c] void Reset_Handler(void);...
Witam! To znowu ja. Uczyli w szkole o generale, co się kulom nie kłaniał, a ja mam rejestry, co się resetu nie słuchają, ani sprzętowego z pinu, ani z jtag-a. Jak to rozumieć? Timer i dma też nic sobie z resetu nie robią. Teoretycznie po resecie powinienem mieć w rejestrach reset value, ale przynajmniej w wymienionych tak nie mam. Pomaga dopiero wyłączenie...
Trochę się zakręciłeś <: w końcu zegar taktowania APB i wyjście z APB to to samo. Jeśli preskaler APB wynosi 1, to f_tim = f_apb, w przeciwnym wypadku f_tim = 2 * f_apb Dla precyzji pamiętaj też o tym, że jeśli chcesz zliczyć N impulsów, to do rejestru timera wpisujesz wartość N - 1, tak samo z preskalerem - podział przez N uzyskasz wpisując do rejestru...
Co do samego programu to co racja to racja. Można było wykorzystać licznik, który dałby większą dokładność, ale to nie było istotą problemu. Koledze chodziło o skorzystanie z timera w celu zmniejszenia poboru prądu przez to twoje urządzenie. Mikrokontroler powinien cały czas spać, bo nic nie robi, do tego powinien chodzić na jakimś niskim zegarze....
Zamieszczam podsumowanie problemu, gdyby ktoś w przyszłości szukał ... Niestety mieliście racje, wyzwalanie timera nawet dla ARMa, a w zasadzie obsługa timera zajmuje bardzo dużoooooo czasu. Zamieszczę podsumowanie dla SYSCLK równego 180MHz: Dla poniższej obsługi przerwania, tylko na rejestrach uzyskana częstotliwość przełączania osiągnęła 6,349mhz...
Witam, Mam problem z konfiguracją ADC. Chcę skanować 3 kanały, 5, 8 i 9. W momencie przerwania Timera chciałbym wysłać poprzez DMA wartości 3 kanałów ADC do bufora Adc, jest to tablica 3 elementowa. Coś jest nie tak bo jak wysyłam te wartości do terminala to otrzymuje losowe wartości, podczas gdy kanał 5 jest podłączony do masy, 8 do zasilania a 9 wisi...
Mógłby ktoś rzucić okiem i sprawdzić czy konfiguracja timera jest poprawna? [syntax=c]void TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // TIM_OCInitTypeDef TIM_OCInitStructure; //Konfiguracja licznika 1 //Ustawienia taktowania i trybu pracy licznika 1 TIM_TimeBaseStructure.TIM_Prescaler = 7200-1; //taktowanie licznka fclk = 72MHz/7200...
Czy ja dobrze czytam, że w przerwaniu od timera robisz set/reset pinów i to Twój PWM? Nie, to jest lewitacja elektromagnetyczna i odwracam w ten sposób polaryzację cewki, kiedy PID wyliczy ujemną wartość (lewitujący obiekt przekroczy setpoint). Dodano po 6 Wrzucam jeszcze całego main'a. [syntax=c] /* USER CODE BEGIN Header */ /** ****************************************...
STM32 robi za wszystko poza procesorem - pamięć ROM i RAM, reset, zegar, port konsoli, timer i port LED, a dodatkowo za sprzętowy monitor z pracą krokową, deasemblacją, edycją pamięci, ładowaniem plików .hex i wieloma innymi funkcjami. Ogólnie FPGA nadaje się lepiej do takich zabaw, ale ciut trudniej się programuje i rzeźbi w nim złożone urządzenia...
Można. Potem z 8251 wchodzimy na przejściówkę USB i w ten sposób łatwo osiągamy 1/10 funkcjonalności tego, co ja mam w jednym STM32. ;) Myślałem sobie kiedyś, żeby z chińskiego modułku STM32F103 zrobić tylko generator zegara i RESET dla procesora oraz widziany przez uP jak układ peryferyjny niby UART z USB po drugiej stronie, ale rozwiązanie z całym...
Witam, odwróciłem 115200 ale to wychodzi na jedne bit a nie bajt czyli raz 10 czyli około 86us, to nie jest ważne... Teraz uruchamiam timer co 1ms i sprawdzam czy "były dane" chciałem użyć timer w trybie Slave mode: Reset mode, czyli ja podam mu zewnętrzny sygnał to zbocze narastające lub opadające od transmisji go wyzeruje, a jak nie ma transmisji...
Witam, Zacząłem niedawno zabawę z STM32 i mam problem z przerwaniami oraz timerami. Chciałem uruchomić przerwanie zewnętrzne, a dalej przerwanie od timera co np 1sek. Jednak nie działa ani jedno ani drugie, czy ktoś mógłby nakierować mnie na dobrą drogę i powiedzieć co robię źle? Przeglądałem przykładowe aplikacje jednak dalej nie potrafię tego uruchomić....
Witam, mam problem z obsługą timera w STM32f103ZET6 na płycie ewaluacyjnej HY RedBul v3.0. Problem polega na opóźnionym zapłonie jednej z funkcji. Realizuje to na przykładzie samozamykającej się bramy po 15 sekundach, tak aby nie zatrzymać całego programu. Generalnie udało mi się skonfigurować przerwania od TIM1, ale timer liczy cały czas, czyli jeżeli...
Przyłącze się do tematu- nie łatwiej wykorzystać przerwanie od przepełnienia timera? Ponizej przyklad realizacji 32 bitowego licznika dla enkodera: // Inicjalizacja timera void TimEncInit(void) { TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,TIM_ICPolarity_Fall...
Witam, Od razu pisze że nie jestem mistrzem w pisaniu programów, a z stm zaczynam swoją przygodę. Chce wyłączyć przerwanie od EXTI na przykład po obsłudze tego przerwania: Do wyłączenie/wyłączenia przerwania np. od Timera jest TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //TIM IT enable Generalnie chodzi mi o to że muszę zrobić detekcje sekwencji...
Od jakiegoś czasu zmagam się z problemem wysłania danych przez UART co określone chwile czasowe. Dokładnie chodzi o to iż jeśli wywołuje funkcje: void uart1WriteByte (t_int8u byte) { while (!(USART1->SR & USART_FLAG_TXE)); USART1->DR = byte; } w pętli głównej programu while(1) { uart1WriteByte(0x77);...
No i dodatkowo sądzę, że na uprzejmą prośbę konstruktorzy znający cortexy chętnie opublikują przeróżne inity, takie jak timer, timer z pwm, SPI, CAN (ale to już chyba gdzieś wala się na forum), USB czy nawet ethernet, bez używania "tej lipy" ;] Może jest jakiś sposób w jaki mógł bym się z tobą porozumiewać nie zaśmiecając forum głupimi podstawowymi...
Hej, Zrobiłem podejście z timerem, polegające na tym, że w przerwaniu DMA TC, uruchamiałem timer, który po chwili miał zrobić latcha. [syntax=c] // DMA1 channel 3 transfer completed void DMA1_Channel3_IRQHandler(void) { //* Clear the DMA tranfser complete interrupt bit DMA_IT_TC3*/ DMA1->IFCR = DMA1_IT_TC3; // start timer to generate delayed latch TIM_SetCompare1(TIM1,...
Timer wyzwala taki pomiar, jaki zaprogramowałeś w ADC. Jeśli zaprogramowałeś kolejny pomiar czterech kanałów bez discontinuous mode, to ADC zmierzy 4 kanały. Właśnie nie mogę zrozumieć różnic pomiędzy trybami discontinous i scan. Rozumiem, że SCAN skanuje dowolną ilość kanałów, dodatkowo można skanować z innym czasem próbkowania, ale czym się różni...
Niby można się domyśleć że TIM2 Jest 32bitowy, ale nie chodzi o to aby się domyślać. I słusznie, bo timery w STM32 nie są 32 bitowe. Nawet w pierwszym zdaniu opisu jest to napisane "wprost" (wręcz "jak krowie na rowie"): 15 General-purpose timers (TIM2 to TIM5) ... 15.1 TIM2 to TIM5 introduction The general-purpose timers consist of a 16-bit auto-reload...
Reasumując: 1. Włączasz zasilanie = nie działa 2. Wykonujesz reset STM'a = działa ? Mógłbyś jeszcze "main'a" pokazać, albo najlepiej odchudź kod do obsługi tylko SPI i wrzuć cały projekt. dokładnie... Wydaje mi sie że SPI po uruchomieniu mikrokontrolera nic nie wysyła, dopiero po resecie. Nie mam oscyloskopu aby to potwierdzić. int main(void)...
Heh, u mnie ESP8266 potrafi rozłączyć się z siecią WiFi, ale... on dalej myśli, że jest podłączony do WiFi (sprawdzanie odpowiednią funkcją) i nie reaguje na polecenia rozłączenia. Jedyna opcja to pingowanie bramy domyślnej co ustalony interwał i w przypadku braku odpowiedzi na ping - reset całego ESP. (at)AIIoT biorąc pod uwagę, że jest to na dziwnym...
Sprawdzona konfiguracja na STM32F407VGT [syntax=c]void adc_init(void) { RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN; //konfiguracja ADC ADC1->CR2 = ADC_CR2_ADON | //włącz ADC ADC_CR2_EXTEN_0 | /*ADC_CR2_EXTEN_1 |*///wyzwalanie przetwornika zboczem opadającym i narastającym ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0 |//wyzwalanie...
W koncu mogę wyrazić swój żal do ST!!... W STM32F1 peryferial I2C jest dokumentnie spie-przo-ny w samym krzemie. Ponad 2 tygodnie walczyłem z stabilnością odczytu z dwóch akcelerometrów i ADC wiszących na kabelku. Ciężko we znaki dał mi się bug powodujący, ze po "misplaced stop" (więc de facto byle durne zakłócenie linii), cały peryferial wisi az do...
Rozwiązałem część problemu (źle rozumiałem adresowanie w Packet Memory ale dzięki zerowaniu tego obszaru pamięci podczas resetu USB i podglądu w debugerze + podglądnięciu jednego z przykładów zrozumiałem jak to działa) i otrzymuję teraz prawidłowe żądanie GET_DESCRIPTOR. W trakcie pisania tego postu też w końcu doszedłem do tego co robię źle... błąd...
Bardzo dziękuję za uwagę. Jak zwykle skupiam się na budowie rejestrów procka, nie zwracając dostatecznej uwagi na składnie języka :cry: Czy proponujesz zatem taki zapis: [syntax=c]TIM3->CCMR1 |= (1<<TIM_CCMR1_CC1S_0 | 1<<TIM_CCMR1_CC1S_1);[/syntax] Po powyższych zmianach jeden obrót osi enkodera o rozdzielczości 1024 imp/obr powoduje,...
Mam problem z poniższym programem. Program pisałem samodzielnie w oparciu o książki wydawnictwa BTC. Timer TIM1 jest skonfigurowany tak, aby dokonywał pomiaru parametrów PWM (częstotliwość i wypełnienie) generowanego za pomocą timera TIM4. Wszystko działa prócz samego TIM1 (pomiaru), który wg. debuggera śpi jak niemowlę (wszystkie wartości w rejestrach...
No to tylko taka różnica że za każdym razem będziesz musiał na nowo skonfigurować DMA Jeszcze raz-czy niezaznaczenie trybu kołowego powoduje reset ustawień dma po przesłaniu całego zadeklarowanego bloku danych? Trzeba na nowo ustawic ilość transferów i włączyć dany kanał Dodano po 15 Popatrzyłem jeszcze w RM i znalazłem tabelkę jak w załączniku-to...
Witam. Mam następujący problem. Otóż, chcę w obsłudze przerwania od kanału 1 timera TIM1 ustawiać semafor, na podstawie którego wykonuje się jedno z zadań. Robię to w standardowy (chyba) sposób: // Obsluga przerwania od TIM1 void TIM1_CC_IRQHandler(void) { static portBASE_TYPE xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE;...
reset timera stm32 przerwania timera stm32 przerwanie timera
joomla dodatki energia ujemna spawarka schema
progi punktowe śląska progi punktowe śląska
Błąd E8 w zmywarce Bomann - przyczyny i rozwiązania Błąd "b" w piecu Buderus Logomax GB112 - przyczyny i rozwiązania