RCC-> AHB2 ENR|=RCC_ APB2 ENR_TIM1EN; Popatrz tutaj _BARDZO_ dokładnie co do czego nie pasuje.
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;...
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)...
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.
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!!
Żeby włączyć nowy transfer trzeba wyłączyć poprzedni (nawet jeśli się już skończył), przez zapisanie zer do stosownych rejestrów. Synchronizacja kanałów polega właśnie na tym, że dany kanał jest "sprzęgnięty" np. z Timerem czy z UARTem. Niemniej jednak być może dałoby się ustawić timer tak żeby wyzwalał transmisję tylko jednego bajtu na raz, tylko ciężko...
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...
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...
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 <<...
Proponuje ściągnij sobie program Timer Calculator http://www.libstock.com/projects/view/39... bardzo pomocny w zabawie z timer-ami.
A po co chcesz łączyć nóżki? Nie wystarczy w przerwaniu od RX-a uruchomić sobie odliczanie na timerze?
Wyłącz watchdoga [; 4\/3!!
Czy: Kod C - Tak, chyba że wymusisz update "ręcznie". 4\/3!!
RM0090 Rev 5, str. 615/616
[syntax=c]TIM3->CR1 |= TIM_CR1_URS;[/syntax] Tym timera nie włączysz.
Wejście w procedurę obsługi przerwania, wykonanie paru instrukcji i powrót - to min. 50..60 cykli procesora. Przerwania zgłaszasz tak często, że procesor zajmuje się wyłączueni ich obsługą i obsługuje je wolniej, niż są one powtarzane. Proste? Nie spodziewałem się tak wolnego obsługiwania przerwania, bo jakoś miałem w głowie, że większość instrukcji...
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
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...
ktoś już chyba dziś o to pytał tylko nie wiem czy o F4 też mu chodziło
Że częstotliwość z zegara w przypadku tim2 jest to 86Mhz jest dzielona przez TIM_ClockDivision, następnie przez Prescaler, a potem dobiera się okres sygnału czyli TIM_Period Nie, nie i nie. Na podstawie datasheeta: Several prescalers allow the configuration of the three AHB buses, the high-speed APB (APB2) and the low-speed APB (APB1) domains. The...
Nie ma żadnego dodatkowego przerwania... Przecież to się opiera na zwyczajnym mechanizmie zdarzeń - żaden z obiektów synchronizacyjnych nie zmienia stanu "sam z siebie" i bez powodu, tylko to Ty go przestawiasz (zwalniając mutexa, wpisując coś do kolejki, ...). Tak więc po prostu wszystkie operacje na takich obiektach na koniec zawierają - w uproszczeniu...
To nie używaj przerwania do inkrementownia zmiennej tylko odczytaj Timer przed i po wywołaniu funkcji. Rożnica wartości to będzie czas wykonywania. Sprawdź to też na wolniej liczącym Timerze aby mieć pewność że nie następuje jego przepełnianie.
Po prostu w tym trybie taktujesz timer zewnętrznym sygnałem podawanym z układu em4095. I wtedy zamiast liczyć czas impulsu na podstawie jakiegoś traktowania timera, masz po prostu zawsze jednostki sygnału zegarowego rfid.
Z tego co zrozumiałem to ta funkcja była by wywoływana raz. Na początku, użytkownik nadrzędny przekazałby sobie do niej wskaźnik na tą swoją funkcję i cześć. Może go nie zrozumiałem do końca, o co mu chodziło. :) No ale jak by nie było to funkcja która konfiguruje odpowiedni timer do odpowiedniego zadania dla użytkownika mogłaby być dość przydatna,...
12 bajtów to 12 przerwań W 800Hz wywoływane jest przez timer przerwanie. W funkcji obsługi przerwania wywoływane są dwie funkcje ( co 8 przerwań - 3 funkcje ), które wysyłają łącznie 2*(33 bity) i odbierają 2*(51 bitów) ( co 8 przerwań odpowiednio 3*33 + 3*51). Wychodzi 168 bitów. Częstotliwość na linii SCL to 400kHz. 400 000 Hz / 168 = ~2380 Hz. 800...
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!!
Return w main? nigdzie nie ma wracać, przed nim jest nieskonczona pętla. ISR dla ADC - nie mam, muszę mieć? jedyne co chcę uzyskać, to to, żeby ADC mierzył raz za razem, i wartość zmierzoną wstawiał do zmiennej - co realizuje zdaje się DMA. Czy dobrze rozumiem, że timer służy do tego, żeby uruchamiać ADC? Wtedy żaden ISR nie jest chyba potrzebny......
Witam Napisalem działajacą aplikacje na mikrokontroler (STM32F4) Aplikacja odczytuje dane z czujnikow i zapisuje wyniki na kate SD. Zastanawia mnie dlaczego czas zapisu na karte SD jest mocno nieregularny. Zazwyczaj zapis jednego bloku pamięeci trwa 2ms ale sporadycznie trwa to 30ms, bardzo rzado (1 na 1000) nawet przekracza 100ms! Blok jest wielkosci...
Tych kroków jest trochę więcej, na przykład włączenia zegara dla domeny RTC. Poniżej daję kod do analizy (STM32G0xx) i czekam na krytykę. [syntax=c]/** * Brief This function configures RTC. * Param WakeUp period * Retval error code (0 = no errors) * PrereqSysTick serves as timebase for timeouts */ __INLINE uint8_t rtcInit(uint16_t timeToWake) {// set...
Gryzłem się z podobnym problemem. Znalazlem rozwiazanie w postaci przetwornika taktowanego otrzymywanym zegarem SPI (np. AD7683), a do machania CSem trigger DMA wykorzystałem timer w trybie PWM... PWM generowany przez timer to machanie CSa. Wypełnienie (stan wysoki) ustawilem na minimalny czas między konwersjami. Pelny cykl timera wyliczylem na mniej...
(...) 0,05us *7 =0,35us czyli najkrótszy potrzebny czas to 7 taktów zegara dla AVR z 20MHz zegarem czas bitu (1,05 do 1,4us) razy 24bit/led razy ilość diod plus 50us to czas odświeżania dla całego łańcucha Sporo pracy dla małego AVR'ka zdziwiła mnie więc Twoja propozycja rozwiązania problemu programowym UART'em: (...)a dla bardziej kapryśnych programowy...
Dlatego najlepiej napisać obsługę wyświetlacza w przerwaniu, a nie czekać aż się zmieni stan na jakimś pinie. Obsługa wyświetlacza na HD44780 w przerwaniu to jakaś masakra a nie rada dla początkującego. W przerwaniu (i to częściowo) można robić VGA albo composite ;) Inicjalizacja powinna być tam gdzie wszystkie inity w programie typu system_init, main_setup...
Witam, problem i zarazem pytanie jak w temacie. Napisałem funkcję obsługi 1-wire z wykorzystaniem bibliotek API STM32 do komunikacji z czujnikiem temperatury DS1820. Funkcja wywoływana jest w przerwaniu od timera. Nie było z nią problemów gdy rdzeń STM-a pracował częstotliwością 168 MHz, przy niższych wstępowały błędy komunikacji. Podejrzewałem, że...
Ile taktów zegara trwa 'while(nCount--)' ? chyba nie jeden? Dodano po 6 Jak na razie wydaje mi się że nie masz dobrego sposobu określenia rzeczywistej prędkości taktowania. Zapuść jakiś timer albo SysTick i na tym zrób delay, bo to łatwo policzyć. Dodano po 1 A czemu SystemInit(); masz przed main()? Dodano po 2 Wyłącz wszystkie PLL itp. i włącz tylko...
Faktycznie wygląda na to, że obsługa semaforów wpływa negatywnie na to. Musze przyznać, że jestem w lekkim szoku, ponieważ pomiędzy dwoma zboczami jest 400 us, procesor taktowany jest zegarem 180MHz, a w samych wątkach niewiele się dzieje. Moja opinia jest subiektywna i może zostać uznana za stronniczą (z racji tego że tworzę własny RTOS), jednak uważam...
Mnie właśnie przydałby się sam scheduler, bo koncepcja działania peryferiów często bardzo zależy od użytego układu i samego projektu. Może powinieneś rozdzielić ten projekt na dwa, jeden to czysty scheduler i drugi projekt to cały system który z kolei jest oparty o ten pierwszy projekt. Zauważ, że im bardziej rozbudowany będzie ten projekt, tym trudniej...
No chyba żartujesz. Brak Dead Time-a odparował mi niejeden tranzystor przy mocy rzędu 100...500W. Tzn. przy takiej zakładanej mocy układu, bo że przy odparowywaniu moc była większa to wiadomo. A co do samego ustawienia Dead Time-a, to może jest po prostu za mały: TIM_BDTRInitStructure.TIM_DeadTime = 1; To 1 to nawet nie śmiem się domyślać co może znaczyć...
Witam, Do STM32F4 mam podłączony enkoder inkrementalny o rozdzielczości 1024 imp/obr. Chciałbym wykorzystać pełne możliwości sprzętowego modułu obsługi takich enkoderów przez F4, czyli zmieniać wartość licznika na opadających oraz narastających zboczach sygnału. W tym celu skonfigurowałem Timer 3 w następujący sposób: TIM3->CR1 |= TIM_CR1_UDIS; Bez...
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...
Czytam sobie własnie o możliwościach rdzenia i... nie ma sie czym podniecać. Nadal brakuje SIMDów, FPU, i szybkiego dzielenia (CM4 max 12 cykli, ten PIC 35 cykli). Nie ma cudów. Również zauważyłem że Microchip ma poważną awersję do magistral zewnętrznych pamięci równoległych. "W koncu" pojawiają się PICe mające magistrale zgodne z 8080, ale SDRAM nadal...
Ja mam tak i działa [syntax=c] int ADC_On() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_AD... ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP... ENABLE); GPIO_InitTypeDef GPIO_S; GPIO_StructInit(&GPIO_S); GPIO_S.GPIO_Pin = GPIO_Pin_0; GPIO_S.GPIO_Mode = GPIO_Mode_AN; GPIO_S.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_S); ADC_CommonInitTypeDef...
Wiesz co ja dopiero zaczynam z programowaniem stm ale jedna sprawa rzuciła mnie się w oczy. twoja funkcja jest prawie funkcją z biblioteki której definicja i rozwinięcie znajduje się w pliku core_cm4.h [syntax=c] __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible...
Możliwe że napisałeś program optymalnie i kompilator nie miał już co optymalizować :) . Przy -O3 sprawa jest prosta, wszystko co się dało masz inline , kod musi być większy. U mnie taki kod na przykład (używam SPL i nie za bardzo znam asembler) z LTO i z -Os wszystko jest inline a bez LTO i z -Os każda funkcja jest wywoływana. Na asemblerze za bardzo...
Próbuję uruchomić komunikację pomiędzy uC a SD. Mam taką płytkę: http://arduinosolutions.com/pl/p/EVK407I... pobrałem kod z postu 6 z tego tematu: http://www.elektroda.pl/rtvforum/topic23... używam SPI2 na pinach PI1-PI3 a CS na pin PI4. Tutaj plik odnośnie komunikacji po SPI, zmieniłem tylko piny. [syntax=c]/*----------------------------...
Witam, mam taki problem. Walczę z obsługą karty SD na stm32f4 discovery. Niestety po wywołaniu funkcji f_open w najlepszym przypadku otrzymuję wynik FR_NOT_READY oczywiście bez względu na to czy karta jest czy jej nie ma. Załączam kod funkcji main oraz funkcje związane z spi. Kody są pobrane z forum, ja dopisałem jedynie obsługę SysTick do wywoływania...
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Witam, przejrzałem na forum podobne tematy, ale mimo wszystko nie umiem sobie poradzić z uruchomieniem zadania mającego na celu miganie diodą. FreeRTOSConfig.h - zapożyczony z przykładu z archiwum z FreeRTOS [syntax=c]#ifdef __ICCARM__ #include <stdint.h> extern uint32_t SystemCoreClock; #endif #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK...
Witam, Od jakiegoś czasu męczę się z biblioteką stemWin i mam z nią problem. Kod mojego programu działał z freeRTOS i obsługą wyświetlacza z sterownikiem SSD1963 po FSMC. Gdzie drzewo projektu wyglądało: http://obrazki.elektroda.pl/5131657900_1... A kod to: http://obrazki.elektroda.pl/9563310500_1... Niby nie mam żadnych...
Mowisz dalej o szybkosci ok trzeba bylo dac STM32F4 + PHY :), a moze lepiej pilo by zrobic karte na PCI-x ? Jest w tym sens ? Oczywiscie, ze jest sens - nauka,wiedza,rozwiazywanie problemow i nie widze nic smiesznego pytajac tu na forum o rzeczy, ktore innym wydaja sie oczywiste. Pije tu do tematu 1Mhz, bo ja potrzebuje wiedzy i chcialbym wiedziec...
sprawdź w dokumentacji czy aby po zresetowaniu flagi przerwania timera nie trzeba odczekać kilka instrukcji (2-3 NOP'y). Jeżeli tak jest, to w przeciwnym wypadku zaraz po wyjściu przerwanie otworzy się drugi raz i w tej sposób dioda mrugnie tak że tego nie zauważysz. Możesz to sprawdzić tak że diodę ustawisz na zapłoną (a nie stan przeciwny), to po...
timer stm32f4 stm32f4 timer compare wgrywanie stm32f4
pralka indesit plukanie pioneer programować astra odłączeniu
regulator obrót komutatorowy radio rockford fosgate
Pralki z rozbieralnym bębnem: Miele, Bosch, Siemens, AEG, Asko, Haier, Gorenje – lista modeli 2024 Citroën C3, Peugeot – kod błędu P1337, wypadanie zapłonów cylinder 1, diagnostyka