TIM_Pulse to jest zwykły współczynnik wypełnienia sygnału. TIM_ClockDivision jest to podziałka zegara -> timer masz taktowany określonym zegarem, który jeszcze możesz odpowiednio podzielić. TIM_OC1PreloadConfig() robi to co jest w opisie funkcji, nie wiem co więcej dodać. Ponadto: CCR1: "It is loaded permanently if the preload feature is not selected...
Co do ustawiania w tryb capture to chyba nie ustawiam. Funkcja TIM_SetCompare1 ustawia po prostu rejestr CCR1 a wg manuala "CCR1[15:0]: Capture/Compare 1 value If channel CC1 is configured as output: CCR1 is the value to be loaded in the actual capture/compare 1 register (preload value). It is loaded permanently if the preload feature is not selected...
Witam, mam problem z poprawną konfiguracją modułu Bluetooth. Chodzi o to, że na przetwornik ADC wyzwalany timer1 podaje sygnał z GPIOB i chcę próbkować go wg ustawień timera z częstotliwością co najmniej 500Hz. Dane pobierane są z rejestru ADC przez DMA do zadeklarowanego wcześniej buforADC (unsigned short int buforADC buforTx (unsigned char buforTx[4]={0};)...
Staram sie uruchomić PWM na TIM4. Chodzi mi o prosty PWM generujący na PB6 częstotliwość w zakresie 1 - 5000Hz, ze wsp.wyp. 50% (na poczatek), ale chyba nie rozumiem działania timera w tym trybie (troche bardziej skomplikowane niż w AVR. Oczywiście wszystko bez bibliotek ;) ale nie działa. Poniżej kod - może jest tam za dużo, bo już włączam co się da,...
chciałem poćwiczyć z stm32f4 i mam problem z PWM na tim1. Zrobiłem to tak [syntax=c] #define PreloadEnabe_PWMmode1 ((uint16_t)0x0068) #define Tim1Af ((uint32_t)0x00080000) //pin PE9 alternate function motor::motor() { //pwm init RCC->AHB2ENR|=RCC_APB2ENR_TIM1EN; // zegar na timer1 RCC->AHB1ENR|=RCC_AHB1ENR_GPIOEEN; // zegar na port E GPIOE->MODER|=Tim1Af;...
Brak Ci preloadingu (buforowania). Wytłumaczę ten fenomen tak: Powiedzmy że Twój timer liczy od 0 do 100 (taka wartość jest w ARR), a ty nagle zmieniasz ARR na 10, tyle że aktualna wartośc licznika wynosi 50. No i teraz Twój timer musi doliczyć do 65535 żeby się przekręcić i doliczyć do tych 10. Dokładnie tak samo ma się sprawa z wartością CCR. Przed...
[syntax=c] //Timer2 Prescaler :13; Preload = 59999; Actual Interrupt Time = 10 ms void InitTimer2(){ RCC_APB1ENR.TIM2EN = 1; TIM2_CR1.CEN = 0; TIM2_PSC = 13; TIM2_ARR = 59999; NVIC_IntEnable(IVT_INT_TIM2); TIM2_DIER.UIE = 1; TIM2_CR1.CEN = 1; } void Timer2_interrupt() iv IVT_INT_TIM2 { TIM2_SR.UIF = 0; //Enter your code here } [/syntax] Dostosuj do...
Po pierwsze aktualizacja CCRx powinna następować w pewnych określonych momentach. Dlaczego: wyobraź sobie, że licznik jest np równy 100, CCRx 105. Tym momencie zmieniasz ten CCRx na 99. Co się dzieje. Licznik będzie liczył do końca, przekręci się i doliczy do 99 - dając takie PWM o innej częstotliwości. Można włączyć preload register (rejestr CCMRx...
TIM1->CR1=0; TIM1->CR1|=(//TIM_CR1_ARPE| // Auto-reload preload enable TIM_CR1_CMS_0|// Center-aligned mode 3 I nie twórz takich cudów na przyszłość, po co zerujesz rejestr by później wykonać OR na nim? Skoro można wprost zapisać wartość. Sprawdź czy zanim go nie włączysz nie masz ustawionej flagi przepełnienia. Zrobiłeś update timera z zerowaniem...
Dzięki pomocy jednego z forumowiczy ( dziękuję mrh :) ), udało się ustalić, że przyczyną problemów komunikacyjnych z ds18b20 są źle skonfigurowane opóźnienia. Opóźnienia chciałem zrealizować na jednym z timerów 2-5 w trybie one pulse mode. Niestety nie udało mi się do tej pory znaleźć błędu, więc proszę o pomoc w walce z opóźnieniami. Zamieszczam kod...
Freddi dlaczego komentarz jest nie zgodny z działaniem? Dzięki za ta druga strukturę ale chciałbym to zrobić na razie bez obsługi przerwania, a bardziej od działającego pwm zależy mi żeby zrozumieć czemu mój kod nie działa ;/ Preloadowanie ARR również nic nie zmieniło
Mógłby ktoś napisać obsługę tego timera ? Widzę przykłady w internecie ale bez zrozumienia. [syntax=c]//niezbędne pliki nagłówkowe #include <stddef.h> #include "stm32f10x.h" //DEFINICJE PREPROCESORA //CCMRx #define OC3M_0 (1<<4) #define OC3M_1 (1<<5) #define OC3M_2 (1<<6) #define OC4M_0 (1<<12) #define OC4M_1 (1<<13)...
Witam ponownie, rozwiązałem swój problem, błąd był banalny i polegał na tym, że ustawiałem stan wysoki w rejestrach instrukcją |= i to było ok, ale nie zerowałem bitów tam gdzie powinny być zera instukcją &= ~. Na dole działający kod: [syntax=c]//niezbędne pliki nagłówkowe #include <stddef.h> #include "stm32f10x.h" //DEFINICJE PREPROCESORA...
3 razy źle.... do rejestrów preskalera i okresu wpisuje się Wartość o jeden mniejszą. Poza tym skoro masz na myśli 24, zapisz TIM1->PSC = 24-1; a nie 0x18 i w komentarzu wyjaśnienie, że chodziło o 24. Po co tak kodować stałe w programie i dekodować je w komentarzach? Jest taka stara zasada, po angielsku KISS, po polsku BUZI, czyli Keep It Simple, St......
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....
Lutowanie BGA (a stosowne ARMy chyba tylko w takich są obudowach) Dementuję takie pogłoski. Przykładowa płytka STM32F429-DISCO. Ma prawdopodobnie wszystko co potrzebuje autor tego tematu, kosztuje śmieszne pieniądze. Na pokładzie 64Mbit SDRAM, więc wystarczy na wiele ekranów. Alpha blending + overlay (obraz statyczny + dynamiczny) robi sprzętowo. Sercem...
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...
To jest sekwencja adresów rejestrów i ich zawartości dla STM32F0DISCOVERY, timer3. Nie jest to całkiem to samo, co u Ciebie, ale może Cię zainspiruje. W Każdym razie to działa. [syntax=c]// port setup {&RCC->AHBENR, RCC_AHBENR_GPIOCEN},// GPIOC, GPIOA {&GPIOC->MODER, GPIO_MODER_AF << (GREEN_LED_BIT << 1) | GPIO_MODER_AF <<...
Używam popularnej płytki: https://botland.com.pl/sterowniki-silnik... PC0, PC1 z mikrokontrolera są podłączone bezpośrednio do INPUT1, INPUT2, INPUT3, INPUT4 płytki. PC0-PC3 są w trybie GPIO output: https://obrazki.elektroda.pl/9991286000_... Pozdrawiam!
OK. Zdaje się, że bez kodu trudno będzie to wyjaśnić. Inicjalizacja TIM1: [syntax=c] void timc_startup(void){ // timer clock and interrupt __HAL_RCC_TIM1_CLK_ENABLE(); // Set Interrupt Group Priority //HAL_NVIC_SetPriority(TIMc_IRQn, TIMc_IRQ_PRIORITY, 0); //HAL_NVIC_EnableIRQ(TIMc_IRQn); hTIMc.Instance = TIMc; hTIMc.Init.Period = TIMc_PERIOD-1; trace_printf("timHandle.Init.Period:...
Cześć Chciałbym przedstawić kolejny mój projekt, tym razem jest to sterownik CNC. https://obrazki.elektroda.pl/2364320600_... https://obrazki.elektroda.pl/6352873400_... Jest już na rynku masa różnego rodzaju sterowników obrabiarek CNC, jak zwykle jednak chciałem zrobić coś własnego. Najważniejsze założenia projektowe:...
Niestety te przerwanie nie chce mi zadziałać, PWM jakoś działa ale chciałbym poznać na 100% jego częstotliwość. Kod wygląda tak: [syntax=c] // PWM constants #define PWM_FREQ1000// Hz #define PWM_STEPS400 #definePWM_CLK 168000000 #definePWM_PRE (PWM_CLK / PWM_FREQ / PWM_STEPS) #define TIM_CCMR1_OC1M_PWM1 (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2)// OC1M[2:0]...
Hej, Przyłączam się do pytania kolegi NSCNT. sam rozglądam się za podobnym zestawem (obcował bym za opcją bez TFT bo po co :) ). Płytka wygląda zachęcająco pod względem ceny jak i wykonania. Lecz szukając informacji na temat tych produktów znalazłem parę interesujących rzeczy: Nice little boards, however, ALL the s/w (uC/OS-II, uC/GUI, Keil uVision...
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)....
Inne niezupełnie optymalne rozwiązanie: tryb PWM, włączyć preload rejestrów CCRx, zapisać do nich 0, wywołać update i dopiero wpisać żądane wartości. Przy następnym zdarzeniu update licznik zacznie generować impuls; od tej chwili aż do zrównania CNT z ARR mamy czas na ponowne wpisanie zer do rejestrów CCRx (w przerwaniu lub przez DMA). Zalety to możliwość...
Witam Jak w temacie, ustawiłem timer 2 w tryb PWM. Sygnał powinien być na PA0,PA1,PA2 i PA3 a jest tylko na PA0. [syntax=c] ///TIM2 PWM RCC->AHBENR|=RCC_AHBENR_GPIOAEN;//zeg... PA RCC->APB1ENR|=RCC_APB1ENR_TIM2EN;//ze... TIM2 TIM2->PSC=48; TIM2->ARR=20000; TIM2->CCR1=1500; TIM2->CCR2=1500; TIM2->CCR3=1500; TIM2->CCR4=1500; GPIOA->MODER|=GPIO_MODER_MODER0_1|GPI...
Coś mi tu nadal nie działa. [syntax=c] //konfiguracja timera14 NVIC_EnableIRQ(TIM14_IRQn); RCC->APB2ENR|=(1<<8);//wlacz zegar tim14 TIM14->ARR=122; TIM14->CR1|=(1<<7);//preload enable TIM14->PSC=0xffff; TIM14->DIER|=(1<<0);//przerwani... od update TIM14->CR1|=(1<<0);//odpal timer [/syntax] W przerwaniu zeruje...
Dlaczego wyskakuje mi błąd "Undefined symbol Init_GLCDPORT?" [syntax=c] /* Includes ----------------------------------------... #include "main.h" #include "stm32f4xx_gpio.h" /* Private typedef ----------------------------------------... /* Private define ----------------------------------------...
Tablica wypełnieć nie przypomina niczego, co miałoby linearyzować jasność. Za duże skoki na początku, za małe na końcu tablicy. Skok pomiędzy 0 i 655 jest ogromny, kolejne też, za to te na końcu tablicy - mało widoczne. Zrobiłem tak dlatego, że dla wypełnienia 100% dioda jest wyłączona, a dla wypełnienia 0% - świeci z maksymalną jasnością (dioda podłączona...
To może wgraj oryginalną zawartość z Nucleo F411 jaka jest w nówkach na dzień dobry, by przynajmniej sprawdzić Nucleo plus ST-link. On tam miga i reaguje na przycisk może pamiętasz: No jest jakiś postęp chociaż nie wiem czy można to nazwać postępem. Wgrałem ten program, wyrzucił mi jakiś błąd elf loadera ale ostatecznie znalazł się w pamięci: Dodano...
Witam. Moje pytanie tyczy się ogólnie programowania mikrokontrolerów. Oto kod dla STM32: Poprawiłem formatowanie kodu. Proszę używać znaczników syntax, zamiast code, wtedy składnia jest kolorowana i łatwiej czytać taki kod.
A ktoś z was próbował przesyłać Z GPIO do RAM? Już coś ruszyło, ale ciągle nie do końca. Ruszyło z DMA2 w trybie peripherial-to-memory. Inicjalizacja DMA: [syntax=c] void DMA_init(void) { //Włącza zegar RCC->AHB1ENR |= DMA_STREAM_CLOCK; //Reset/wyłączenie strumienia DMA (kasuje bit EN) DMA_STREAM->CR &=~ DMA_SxCR_EN; while(DMA_STREAM->CR & DMA_SxCR_EN);//czeka...
STM32CubeIde STM32L552CCT6 Timer2 w trybie encoder mode Konfiguracja Timera [syntax=c] static void MX_TIM2_Init(void) { /* USER CODE BEGIN TIM2_Init 0 */ /* USER CODE END TIM2_Init 0 */ TIM_Encoder_InitTypeDef sConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; /* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE END TIM2_Init 1 */ htim2.Instance...
Dzień dobry. Chcę przerobić program służący do pomiaru odległości z czujnika HC-SR04 z std na hal.Problem polega na tym że jeśli mam timer TYLKO z skonfigurowanym kanałem pwm służącym do aktywacji czujnika, czujnik normalnie się aktywuję i zwraca sygnał echo (im większa odległość tym dłuższy stan wysoki, sprawdzałem diodą), po dodaniu (analogicznie...
Cześć Problem polega na tym że ADC1 współgra z DMA2 w trybie Injection, czy to jest związane z tym że nie nie ma sensu czegoś takiego robić, ze względu na to że w tym trybie wszystkie dane trafiają do różnych rejestrów JDRx, i nie ma "zagrożenia" overrunem? Konfiguracja wygląda następująco ADC1 w trybie Injection, wyzwalany zewnętrznie przez sygnał...
Nie zerowałem konkretnych flag przerwania od CCRx. Dziękuję za pomoc. Działający kod dla stm32f05: [syntax=c]timer2_init(void) RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->PSC = 4799; // Set prescaler TIM2->ARR = 100; // Auto reload value TIM2->CCR1= 20; TIM2->CCR2= 40; TIM2->CCR3= 75; TIM2->CCR4= 99; TIM2->CR1|=TIM_CR1_ARPE ; //AUTO...
Temat uważam za zamknięty. [syntax=c]RCC->APB2ENR|=RCC_APB2ENR_TIM1... // zegar dla TIM1 TIM1->PSC=840-1; // prescaler TIM1->ARR=1000; // auto-reload register TIM1->CCR1=100; // capture/compare register ch.1 TIM1->CR1|=TIM_CR1_ARPE| // Auto-reload preload enable TIM_CR1_URS; //Only overflow/underflow generates an update TIM1->DIER|=TIM_DIER_UDE; //...
Czy ktoś tu namawiał do używania magicznych wartości w rejestrach? Czy taki kod jest nieczytelny? [syntax=c]TIM16->PSC = SYSCLK_FREQ / LED_FREQ / LED_STEPS - 1; TIM16->ARR = LED_STEPS - 1; TIM16->CCMR1 = TIM_CCMR1_OC1M_PWM1 | TIM_CCMR1_OC1PE;// PWM mode 1, buffered preload TIM16->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P;// enable CH1 output TIM16->BDTR...
Za RM0316 17.3.9 As the preload registers are transferred to the shadow registers only when an update event occurs, before starting the counter, you have to initialize all the registers by setting the UG bit in the TIMx_EGR register. Czyżby zadziałało?
uC to stm32f207. Timer napędza pwm jedno z wyjść (zmienne pwm z preloadingiem co jakiś okres). Wszystko działa ładnie na zmapowanym pinie dla wyjścia OC tego timera (tim 10). Jednak czasem potrzebuję wygenerować identyczny przebieg na pinie tego timera oraz na innym pinie GPIO, akurat tego z tim1. Jednym z rozwiązań jest załadowanie danymi w tym samym...
Wydaje mi się, że nie dobrze zrozumiałeś co to jest One Pulse Mode, dlatego masz problem z konfiguracją W tym trybie nie ma konieczności wyłączenia timera poprzez: TIM2->CR1 &= ~TIM_CR1_CEN; bo on sam się wyłącza (przestaje liczyć) zgodnie z ustawieniami. Ja do tego zadania użyłbym trybu PWM i zrobił to jak w kodzie: https://obrazki.elektroda.pl/6412232700_...
Próbuje mierzyć częstotliwość sygnału wykorzystując przerwanie i Timer2 Napisałem taki oto kod przy pomocy CubeMX: 249992 Hz i niby ok. Jednak znalazłem kurs STM32 na FORBOT ( 249986 Hz. I teraz nie wiem czy prawidłowo należy skonfigurować timer do tego zadania tak jak zrobiłem czy tak jak w kursie?
BlueDraco Mam wersję Keila 4.5 i tutaj nie ma jeszcze tych podpowiedzi kontekstowych (gdy się naciśnie CTRL + SPACJA). Mam na płycie z EP wersję 4.72a. Aby dobrze działał to odinstalować wersje 4.5 i instalować nową, czy odrazu. Jak jest lepiej, żeby poźniej nie było problemów z działaniem? http://obrazki.elektroda.pl/4851810600_1...
(at)ElektrodaBot Dzień dobry, zmagam się z nietypowym problemem. Zepsuł mi się ostatnio moduł I2S2 MOD podłączony do stm32f407, który zawierał zarówno ADC jak i DAC działający po I2S. Kupiłem coś tańszego - jako ADC PCM1808, oraz jako DAC PCM5102. Wcześniej działałem na full-duplexie, teraz jestem zmuszony działać na half-duplexie. Napisałem prosty...
[syntax=c]/* USER CODE BEGIN Header */ /** ****************************************... * (at)file : main.c * (at)brief : Main program body ****************************************... * (at)attention * * <h2>© Copyright (c) 2020 STMicroelectronics. * All rights reserved.</h2>...
Używam bluepill. Tam jest teoretycznie stm32f103c8t6 czyli 64k flash, ale w prkatyce programator znajduje mi w nim 128k flash. Wobec tego chyba nie muszę zmieniać eeprom.h? Przesyłam aktualny kod. Mam nadzieję, że dobry. efekt taki, że miga diodką a następnie zawiecha.[syntax=c] #include <string.h> #include <eeprom.h> #include "stm32f1xx.h"...
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Witam, Próbuję wykorzystać funkcjonalność DMA burst aby pobierać wartości rejestrów ARR, RCR i CCR1 przy każdym update event timera 1 z tablicy bez zajmowania procesora. Program działa prawidłowo po wystąpieniu pierwszego przerwania UEV od TIM1, lecz kolejny transfer danych wprowadza inne dane do tych rejestrów niż zamierzone (znajdujące się w tablicy)....
Witam, męczę się z pisaniem prototypu programu do falownika 1 fazowego. Wykorzystałem tim1 mikrokontrolera f103rb, wygenerowałem (najpierw) na jedym kanale 2 komplementarne sygnały PWM. Po przepuszczeniu przez filtr RC dostałem sinusa. Problem jest w tym że ustawiając jakąkolwiek wartość deadtime (wiem, że odpowiednio się ją wylicza) efektów nie widzę...
Witam posiadam STM32 F042K6, posiadam również czujniki które zmieniają swój stan z wysokiego na niski podczas wykrycia przeszkody. Potrzebuje zamienić ify na przerwania tzn. [syntax=c] while(1){ przodprawo = HAL_GPIO_ReadPin(GPIOA, przod_prawo_Pin); przodlewo = HAL_GPIO_ReadPin(GPIOA, przod_lewo_Pin); prawo = HAL_GPIO_ReadPin(GPIOB, prawo_Pin); lewo...
partycja preload stm32 f103rb ssd1963 stm32
oporność głośnik kondensator trzeszcz instalacja elektryczna skoda felicja
bateria milwaukee metro smart 1000io
Autoryzowany serwis Peiying – lokalizacja, Lechpol Electronic, Tacho & CB Serwis, Lergis Hitachi 43HAK5450 Firmware: OTA Updates, Service USB, Vestel Chassis, Android TV Issues