Czytając o rejestrach liczników, jedyną taką flagą (którą znalazłem), jest TIMx_SR_UIF, czyli UpdateInterruptFlag. Co prawda nie będę włączał przerwania, ale jest to chyba jedyna flaga którą mogę w tym celu wykorzystać, czy też jest jakaś inna lepsza do tego celu? To jest właśnie flaga która jest Ci potrzebna. 4\/3!!
Nie znam nowych avrów, ten kod przypomina mi STM32, natomiast w starych była globalna flaga uruchomienia przerwań, sprawdzałeś czy tutaj takiej nie potrzeba? I przez analogię do STM, czy po zmianach częstotliwości zegara, nie trzeba poczekać ileś cykli aż się ustabilizuje? Jak tam prosty przykład? No i przeniósłbym zliczanie minut do przerwania, u siebie...
Jeśli zajrzysz do definicji funkcji NVIC_SetPriority((), zobaczysz, że dla SysTick nie rusza ona wcale NVIC. Racja, wpisuje do innych rejestrów. Ale Manual pisze że SysTick też wchodzi o NVIC. Jeszcze kolejna sprawa. Skoro Aby mogło wystąpić przerwanie należy zarówno ustawić i to co generuje przerwanie np Timer jak i NVIC. Ale co np ze znacznikiem...
Czyli jednak czegoś nie rozumiem... Myślałem, że skoro w rej DIER wyłączone jest generowanie przerwań to nie będą ustawiane flagi wystąpienia tych przerwań... A jeśli wystąpi przerwanie globalne to jak mam je rozróżnić, czyli skąd mam wziąć informację czy to z przepełnienia licznika czy z porównania kanału CC? Zresztą według RM'a flaga powinna się ustawić...
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
Definicja tcp_timer_needed() jest w pliku tcp_impl.h, żródła w timers.c. Plik tcp_impl.h zaincludowany w tcp.c z resztą tu nic nie zmieniałem. Po dopisaniu #include "lwip/timers.c" program się kompiluje owszem i wszystko działa ale mam potem problem z kompilacją gdy chce dodać liczniki softowe pod freertos a to za sprawą includeowania pliku timers.h....
Korzystam z dev board STM3210B. Timer 2 konfiguruje następująco: [syntax=c] RCC_APB1ENR_TIM2EN_bb = 1; TIM2->PSC = 36000; TIM2 -> CNT = 0; TIM2 -> ARR = 0xFFFF; TIM2_CR1_CEN_bb = 1;[/syntax] po wykonaniu pewnej funkcji licznik zatrzymuje bitem CEN. i pobieram wartość CNT; Działa wyśmienicie. Teraz gdy zmienię licznik na TIM3 to: 1. otrzymuje inny czas...
Wpisując w licznik wartość JEDEN zostanie wysłany JEDEN element, po czym DMA się wyłączy. To co widzisz w debuggerze nie ma tu znaczenia, może bit faktycznie wciąż jest ustawiony - nieistotne, DMA nie działa po wysłaniu zadanej ilości danych. Nie wiem też absolutnie jakim cudem chcesz "ustawiać flagę nadawania" w rejestrze CR1, skoro ta flaga jest generowana...
Z tego co mi się wydaje przed odczytaniem wartości z licznika należałoby sprawdzić flagi które mówią o tym czy w liczniku cokolwiek sensownego się znajduje... 4\/3!!
Poza tym typowy błąd AVRowca - nieskasowana flaga przerwania. W tym przypadku akurat jest kasowana przez sprzęt sama. Jeżeli nie włączył przerwań od błędów to i tak nie będą wywoływane poza ORE, który i tak nie czyści się poprzez pisanie czegoś do SR. Zresztą ORE w tym przypadku się nie spodziewam :) Jak właczysz wywoływanie przerwań od błedów wtedy...
No tak: [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" #include "stdint.h" #include "misc.h" #define CLK_FREQ 36000000 /* User defined function prototypes */ void GPIOA_Init(void);...
Witam. Dla ćwiczebności napisałem sobie funkcję zwracającą ilość cykli zegara w celu pomiaru długości wykonywania funkcji itp. Aby to osiągnąć odczytuję "PENDSTSET" oraz stan licznika SysTick. Jednak pomiędzy tymi dwoma odczytami upływa trochę czasu i wartość licznika jestem w stanie skorygować znając czas jaki upłynął miedzy tymi dwoma instrukcjami...
Witam, mam problem z zawieszaniem się freeRTOSa. Program grzęźnie w funkcji vListInsert void vTaskUSART3(void * pvParameters) { portCHAR i; vSemaphoreCreateBinary( xSemaphore_US3_O ); xSemaphoreTake( xSemaphore_US3_O, 0); xQueue3_TX = xQueueCreate( 32, sizeof( portCHAR ) );//32 xQueue3_RX = xQueueCreate(...
Poniżej 1km/h już nie ma sensu dawać, ale fajnie że wspominałeś o tym przepełnieniu. Jeśli timer się przepełni to v=0 Jak się przepełni, to nie 0, Ale flaga. Raz jest OK, 2 razy jest źle. Chyba, że zrobisz sprzętowe zerowanie licznika.
Witam ,(mój pierwszy post na forum :) ) mam następujący problem , prawdopodobnie spowodowany brakiem mojej wiedzy. Otóż potrzebuję co 1 sekundę wyzwalać ADC za pomocą TImera 1 dokładnie Flagi Timera TIM1_SR_CC4IF. Wydaje mi się że ustawiłem wszystko zgodnie z datasheetem a mimo to Przetwornik mój cały czas wykonuje konwersję wchodzi w przerwanie void...
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...
Cieszę się, że mogłem pomóc. Fakt - ciężko się w tym odnaleźć, tym bardziej, że czasem są dziwne zależności. Jak np. żeby włączyć PWM dla TIM1 trzeba ustawić bit w rejestrze od break'a i dead-time: Dodano po 57 Pomogło dzięki. Ogólnie biorąc to w tych ARM'ach strasznie dużo rejestrów trzeba poustawiać, żeby coś działało ;) Mam jeszcze pytanie dotyczące...
Nie trzeba go przekonywać. Dla DMA jest wszystko jedno pod jakie adresy mają się zapisać dane. Ale nie jest mu wszystko jedno, w jakich okolicznościach ma to robić. W przypadku UART TX, DMA request jest generowany za kazdym razem, gdy flaga TXE==1 (jesli UART ma włączony DMA oczywiscie). Wtedy DMA transferuje wartość spod adresu podanego w CMAR do...
Witam, chciał bym prosić o rade szanownych kolegów mianowicie nie mogę uruchomić nadawania modułem nrf24l01 z pełną szybkością z użyciem przerwań od pinu "IRQ" już wyjaśniam, w trybie polingu nadawanie pakietu 32 Bajtów trwa 156us i wszystko ładnie śmiga odbieranie udało mi się uruchomić z wykorzystaniem przerwań oraz DMA, lecz gdy próbuje wysyłać za...
[syntax=c]TIM2->SR = (uint16_t)~TIM_SR_UIF; [/syntax] Tak ma być. I tak jest 100% poprawnie. Po co ci przerwanie które kasuje tylko swoją flagę? Bo nadal nie rozumiem sensu. To jest flaga przerwania, a co ona ma do pracy licznika? I zasada jest kolejna i bardzo prosta, w obsłudze przerwania zawsze powtarzam ZAWSZE najpierw kasujemy mu flagę, nigdy nie...
Co to niby ma być? USART1->BRR = (24+(0.9216/2))/0.9216; Zmieniłem na: Popatrz, jak zaprogramowałeś DMA - po 8 transferów, miały być 4 po 16 bitów z ADC do pamięci i 8 po 8 bitów z pamięci do USART. Poprawione, usunąłem również priorytety: Założę się na ślepo (a STM32F1 nie znam), że to nie jest potrzebne: ADC1->CR2 |= ADC_CR2_EXTTRIG; No więc sprawa...
Witajcie, siedzę i szukam błędu w bibliotekach do obsługi NRF24L01. Skopiowałem je z biblioteki, którą wykorzystuje w ATmega8. Działa nawet dobrze tam, niestety na STM32F0DISCOVERY już nie chce. Będę bardzo wdzięczny za pomoc. To najpierw kody, które wyrażają więcej niż tysiąc słów ;) : main.c http://obrazki.elektroda.pl/4732813300_1...
W zasadzie we wszystkich przykładach wykorzystania przerwania z UARTA nie było nigdzie czyszczenia flagi, więc założyłem, że jej nie potrzeba... gdzieś czytałem, że flaga jest automatycznie czyszczona, ale jestem laikiem więc mogę się mylić. Wdzięczny byłbym za wszelkie wskazówki jak do tego podejść. Zamiast zgadywać, zakładać i czekać na odpowiedzi...
Czesc, mam taki problem, wydawalo sie na poczatku ze banalny. STM32L4, UART pracuje w trybie circular, przy starcie wywoluje HAL_UART_Receive_DMA(), wszystko ladnie dziala do momentu kiedy wystapi blad transmisji. Gdy wystapi blad to w standardowym handlerze zwiekszany jest licznik bledow i w innym watku porownywany jest stan licznika i ponownie wywoloywane...
No tak... ;) Mam jeszcze takie pytanie, napisałem ostatnio funkcję opóźnienia (delayus/delayms). Generalnie działa poprawnie, ale dzieje się jedna dziwna rzecz, której przyczyny nie mogę znaleźć. Opóźnienie zrobiłem z wykorzystaniem timera TIM2. Działa to tak, że gdy jest wywoływana funkcja delayus to włączany jest TIM2, wpisywana jest wartość do rejestru...
(lub ewentualnie zignorować, tracąc minimalnie dokładność) utrata dokładności jest i tak mniejsza niż w przypadku podanym prze mnie. Jeżeli występuje prawdopodobieństwo wystąpienia wielokrotnych przepełnień bez przerwań i licznika przepełnień się nie obejdzie. Zresztą użycie flagi ma (może nie w tym przypadku jak jest to robione raz na godzinę) dodatkowe...
zostanie wysłana po i2c cała paczka danych, czy może się zdarzyć, że zostanie wysłany kawałek starej tablicy i kawałek nowej ? (w trakcie wysyłania zostaną już nadpisane dane) Czy jednak trzeba sobie jakoś samemu zapewnić to, żeby takie "zbiory" były wysyłane jako całość ? W czasie przesyłania przez DMA, możesz modyfikować zawartość, bo i tak DMA widzi...
Mimo wszystko nie działa. Jak linijke RCC->APB2ENR|= RCC_APB2ENR_TIM1EN dodam gdzieś poniżej pierwszego odwołania do rejestrów TIMERA1 to diody nie zapalają się w żadnej kombinacji, wtedy chyba nie wchodzi do przerwania w ogóle. edit: [syntax=c]#include "stm32f10x.h" void TIM1_UP_TIM16_IRQHandler(void) { GPIOC->ODR ^= 0x300; /*break point*/ } int main(void)...
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 po dłuższej przerwie. Problem polega na tym że uruchomiłem ADC z DMA na płytce STM32F469DISCO (wg różnych filmów z youtube - problem taki że u wszystkich działa a u mnie nie :D ), wynik wysyłam po USB CDC i zamiast ADC 12 bitowego otrzymuje 8 bitowy. Jest tak że kręcąc potencjometrem wartość po przekroczeniu 255 wraca do 0 i rośnie ( i tak kilka...
Napisałem więcej punktów więc może pomieszałem. W tej strukturze będą znajdować się bufory w formie tablicy 100 bajtów, oraz spora ilość flag pomiędzy wątkiem głównym a przerwaniami i różne zmienne pomocnicze. Taki sposób jak zaprezentowałem ma pewną zaletę: łatwo debagować, bo w dowolnym momencie mogę podejrzeć całą strukturę, wszystkie bufory itd....
oba przerwania wykonują się z taką samą częstotliwością, niezależnie od tego co wpiszę w Pulse Nic dziwnego :) Przecież oba mają tę samą podstawę czasu, czyli rejestr TIM1->CNT. Jedyna różnica jaką mógłbyś zobaczyć, to moment przełączenia wyjścia lub pojawienia się flagi przerwania. Ale nie zobaczysz, ponieważ niezbyt szczęśliwie dobrałeś czasy 0 i...
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);...
Napisałem delay oparty o timer konfiguracja TIM1: void TimerConfig() { RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_ClockDivision=... TIM_TimeBaseStructure.TIM_CounterMode=TI... TIM_TimeBaseStructure.TIM_Period=72; TIM_TimeBaseStructure.TIM_Prescaler=1;.....
No tak, zawsze mam przeznaczony dla takich zadań jeden timer, ładowany odpowiednią wartością na początku obsługi funkcji I2C, w każdej pętli while, poza sprawdzaniem danej flagi, sprzwdzany jest także stan licznika - jeżeli zostanie przekroczony, petla while zostaje opuszczona z ustawioną flagą błędu. Nie pisałem o tym, bo to chyba standard? Do tego...
Dzień Dobry Chciałem zapoznać się z konfiguracją przerwań zewnętrznych. I mam pewien problem. Wydaje mi się, że rejestry skonfigurowałem dobrze. Założenie jest takie, żeby wygenerować sygnał prostokątny na pinie następnie podać ten sygnał na pin który będzie odpowiedzialny za przerwanie zewnętrzne. W przerwaniu chciałbym zmieniać stan diody. Przykład...
Próbowałem już w opisany przez Ciebie sposób, zero reakcji, żeby program wyszedł z pętli while pomagało tylko zwarcie rezystorem 1k do GND, czyli ręcznie wymuszony pull low. Datasheet DS18x20 znam już na pamięć :( funkcja opóźniająca: [syntax=c] volatile int delayFlag; void delayTimerConfig(){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); TIM_TimeBaseInitTypeDef...
To kod, który u mnie na STMF107 działa - może znajdziesz jakieś róznice... W przerwaniu mam obsługę klawiatury 4x4 + kilka liczników, ale to tutaj nieistotne, więc nie zamieszczam. [syntax=c] //--------------------------------------... // Inicjalizacja TIM2 //--------------------------------------...
Zaczynam powoli pisać taką najprostszą obsługę ADC. Chciałbym dokonywać konwersji w pętli while w main. Generalnie jest może jakiś algorytm postępowania w trakcie inicjalizacji przetwornika? Widzę że są pewne różnice odnośnie AVR i nie jestem tego w stanie zrobić przez całkowitą analogię... Przedstawię to co zrobiłem: main: [syntax=c] #include <stdint.h>...
Dzień Dobry Udało mi się skonfigurować timer i wszystko działa poprawnie tylko mam problem ze świadomym ustawieniem czasu trwania okresu. Wynika to z faktu że nie jest dla mnie do końca jasne: 1. Jaka częstotliwość jest dzielona przez preskaler 2. Jak w rejestrze: [syntax=c] TIM2->ARR [/syntax] ustawić czas trwania okresu świadomie. Załączę mój program:...
Zrobiłem teraz oczekiwanie na timerze 6 tą przerwę (1 sek) ale nic nie pomaga: Dodano po 38 Porównałem rejestry CR przed wywołaniem kalibracji w moim i przykładowym programie. Różnica polega na tym, że u mnie włączony jest bit ADstart a w przykładzie jest wyłączony. Skąd się bierze ta różnica?
Miło mi poinformować, że po wpisaniu komendy o zerowaniu flagi przerwania całość działa pięknie. Dziękuje a ponizej zamieszczam listningi poprawne: Konfiguracje [syntax=c] void NVIC_conf(void) { NVIC_SetPriority(TIM7_IRQn,1); NVIC_EnableIRQ(TIM7_IRQn ); } void TIM7_conf(void) { TIM7->CR1 |= TIM_CR1_ARPE | TIM_CR1_URS; //włącz buforowanie rejestrów...
Witam mam problem z miganiem dwoma diodami, ale czysto sprzętowo, za pomocą timera 3 w trybie outpu compare. Pisząc program wzorowałem się na kodzie ze strony http://en.radzio.dxp.pl/stm32vldiscovery... . Mój kod różni się tylko tym, że nie wykonuje tutaj remmapu, ponieważ w moim uC (stm32f103vct6) TIM3_CH3 i TIM3_CH4...
-> BlueDraco Postraszyłeś tym DMA i teraz początkujący Kolega uczy się: "DMA jest trudne i złe, lepiej napisać to na przerwaniach". BŁĄD!! Po to jest DMA w prockach, zeby z niego korzystać, i odciążać rdzeń tu gdzie tylko się da. I tym sposobem moja konstrukcja mieli ciągły strumien z UARTa rzędu 230kB/s dekoduje, sprawdza poprawnosc, przetwarza,...
witam, mam podobny problem, nie wiem co robię źle, chcę zapalić diodę podłączoną do PB0 za pomocą przerwania od przycisku podłączonego do PC7 lub 8. po wgraniu kodu przerwanie od SYSTICK ładnie działa, zapala i gasi na zmianę diodę na PB1, natomiast dioda na PB0 swieci się cały czas i nie ma żadnej reakcji na naciskanie przycisku.... poniżej kod.
Dzień dobry, Sprawa wygląda tak, że chciałem zrobić zadanie 8.4 z poradnika na temat stm32. Wymodziłem sobie takie coś: Open On-Chip Debugger 0.9.0-dev-00186-g30203b3 (2014-11-09-22:49) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxyg... Info : The selected transport took over low-level target control....
Witam:) Od kilku dni próbuję uporać się z CAN. Po początkowych próbach z inicjalizacją funkcjami bibliotecznymi odpuściłem je sobie na rzecz inicjalizacji za pomocą rejestrami. Nie podobało mi się, gdy odkryłem, że funkcje ustawiały bit 16 w rejestrze CAN_MCR Odpowiednie zegary, GPIO (Rx-PD0, Tx-> PD1 oraz remap), kontroler NVIC ustawiłem wcześniej...
Witaj. Także mam falownik ESB 6kW-24V. Sprawa jest generalnie prosta, tylko trzeba rozpracować poszczególne polecenia, a i to niekoniecznie, by pobrać dane z falownika o statusie i bieżącej konfiguracji. Ot wystarczy wysłać sekwencję bajtów i potem obrabiać odpowiedź. Na potrzeby pobierania statystyk - to wystarczy na dowolnej platformie (AVR/STM32/ARM/Android/PC...
Witam! Posiadam moduł wyświetlacza LCD 3.2", prawdopodobnie na sterowniku SSD1289 (sprzedawca twierdził, że na HX8347-A, jednak dopiero metoda inicjalizacji do SSD1289 zadziałała). Próbuję nim sterować przy pomocy mikrokontrolera STM32F103RBT6. Wszystko zdaje się działać dobrze, do czasu gdy chcę wyświetlić jasny kolor, np. RGB(240,240,240). Wtedy sterownik...
Witam, Od pewnego czasu przestawiłem się z AVR na STM32, zbudowałem sobie proste ramię robota na 5 serv + sterownik Maestro od pololu, wszystko ładnie śmiga. Tydzień temu kupiłem sobie takie Gamepad: http://botland.com.pl/joystick/2560-game... . Chciałem za pomocą tego pada sterować ramieniem. I już na 1 kroku...
Witam, Realizuję pracę inżynierską na zestawie uruchomieniowym ZL27ARM z mikrokontrolerem STM32. Praca jest w zasadzie gotowa, ale niestety nie działa do końca poprawnie. Praca jest tworzona głównie w oparciu o książkę STM32 Aplikacje i ćwiczenia w języku C. Środowiskiem programistycznym wykorzystywanym w pracy jest Keil uVision 5. W pracy wykorzystane...
Mam nastepujacy problem, probuje wywolac przerwanie zewnetrzne od przycisku ktore uruchomi mi licznik w celu eliminacji drgan stykow. Wszystko dziala dla przycisku podpietego do wyprowadzenia A0 ale dla przycisku podpietego do wyprowadzenia C13 juz nie dziala. Przy debagowaniu widze ze ciagle wchodzi mi w obsluge tego przerwania mimo ze przycisk nie...
stm32 flaga stm32 flaga przerwać stm32 flaga przerwania
wariuje pokrętło linksys wszystkie diody migają separacja transformator pomiar
panel solarny pompka panel solarny pompka
Deco Color lakier akrylowy 1K spray – czy nadaje się na zaprawkę łuszczącego lakieru samochodowego? Schemat elektryczny pralki Bosch WLM24440PL/01 – dostępność, exploded view, serwis