Mnie tam brakuje ustawienia przerwania: [syntax=c]TIM1->DIER = 0x00000001;// enable update interrupt[/syntax] Ogólnie takie coś powinno działać: [syntax=c]TIM1->CR1 = 0x00000000;// default TIM1->PSC = 0x000000FF;// set max prescaler TIM1->ARR = 0x00000FFF;// set max reload count TIM1->CCMR1= 0x00000068;// set PWM mode 1 TIM1->CCR1= 0x000000FF;// set...
konstrukcja na pojedynczych licznikach TTL + bramkowanie z GPS. Całość odczytywana i obrabiana przez procesor. Bez sensu. Liczniki sa w mikrokontrolerze, jak licznik jest za krótki, to albo przerwanie od przepełnienia i część licznika programowa, albo lepiej kaskadowe połączenie liczników. W STM32 kaskadowo można łączyc liczniki programowo, w AVR sprzętowo....
Ok. Na razie priorytetów nie ustawiam, puki innych przerwań nie będę potrzebował. Jest tego wszystkiego trochę, ale ogólnie praca z STM32 jest bardzo przyjemna, no i z C:) Robienie tego wszystkiego w asm od zera, to byłoby dość karkołomne. Dodano po 11 W sumie muszą być dwie funkcje inicjalizacji RTC, np. RTC_Init(); i RTC_Init_Full(); Pierwsza do inicjalizacji...
Sądzę, że jak to określiłeś ćwierkanie spowodowane jest błędem w programie, ponieważ na LPC1114 na znacznie wolniejszym zegarze 48 MHz odgrywana muzyka i to ze znacznie wolniejszego medium czyli karty SD poprzez interfejs SPI brzmiała przyzwoicie. Sugeruj się tym kodem: [syntax=c] LPC_TMR32B1->MR3 = 256 - 1;// podstawa czasu dla PWM LPC_TMR32B1->PWMC...
Kol. Kaczor dziękuję za pomoc choć brak w książecce pełnych listingów nie był aż tak wielką preszkodą. Na początek interesują mnie pola struktury inicjującej licznik, dla przykładu : TIM_TimeBaseStructure.TIM_Period = 65535; TIM_OCInitStructure.TIM_Pulse = 10000; Takie zainicjowanie licznka i kanału w jaki sposob będzie skutkowało dla generowania przerwania...
Witam ponownie tym razem próbuję uruchomić przerwanie od TIM7 w mikro STM32 F303VC6 na płytce Discovery F3. Napisałem konfiguracje NVIC i TIM7 po czym uruchomiłem całość i owszem to co jest w funkcji obsługi przerwania jest wykonywane ale mam wrażenie, że pełną częstotliwością a nie co 1 sekundę tj ustawiłem. Prosiłbym o jakieś wskazówki bo pierwszy...
Dzień dobry Koledzy. Piszę kod w C#.NETMF dla STM32F429I-DISC1. Próbuję zrealizować takie działanie w którym wykorzystuję metody klasy UIElement. Jedna z metod obsługuje zdarzenie dotknięcia panelu dotykowego. Druga z metod ("Invalidate();") pozwala aktualizować treść wyświetlacza. Do tego mam timer który co sekundę generuje przerwanie inkrementujące...
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?
(at)BlueDraco hmm przerwania owszem i ich wielopoziomowosc jest przydatna ale tez nalezy pamietac ze rdzen ARM7TDMI ma niestety tez sporo gorzej rozwiazane niz Cortex-y... a male procesory to tez nie sa ;) Jednak nie o tym mialo byc... W sumie nie zawsze petla glowna jest zlym rozwiazaniem, czasami mozna w niej przeciez zbudowac maszyne stanow ktora...
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.
Witam, Mam problem z konfiguracją licznika do pomiaru czasu trwania sygnału na wejściu PA1. Generalnie chcę to rozwiązać w następujący sposób: w momencie wykrycia zbocza narastającego lub opadającego wywołuję przerwanie EXTI1. W obsłudze przerwania EXTI1_IRQHandler, sprawdzam stan portu PA1 jeśli jest stan wysoki to chcę uruchamiam licznik, który zmierzy...
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 //--------------------------------------...
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};)...
pomiędzy włączeniem licznika a kasowaniem flagi przerwań miałem opóźnienie, które powinno spowodować to że zdążą sie wpisać nowe wartości do rejestrów. Mógłbyś pokazać ten kod z opóźnieniem o którym piszesz?
Będzie tak jak piszesz. Przerwanie po doliczeniu do 999 po czym zerowanie licznika i liczy od nowa
Wg. dokumentacji uC w takiej konfiguracji powinno nastąpić przy stanie licznika 0, czyli wszystko się zgadza. Co to znaczy "zablokowanie przeładowania licznika" oraz że licznik "ma się zatrzymać, ale nie wyłączyć"?
OK, dzieki użyłem gotowca Nie używaj gotowców w takiej banalnej sytuacji. Doczytaj co to jest ten Systick. W dużym skrócie to licznik 24 bitowy - to ważna informacja, może zliczyć maksymalnie do ok. 16 mln (2 do 24). Po doliczeniu do zaprogramowanej wartości zgłasza przerwanie. Do ustawiania wartości można użyć funkcji Systick_Config(), ale najlepiej...
Hej, czy wie ktoś dlaczego tak się może dziać? Do licznika TIM2 podłączony jest zewnętrzny zegar. Liczy do ustawionego przepełnienia, potem liczy od zera i to jest ok, ale zaraz po tym jak chce go zresetować - w rejestrze CCR1 jest 0 i licznik przestaje liczyć. Do resetowania ustawiam na RCC_APB1RSTR na pierwszym bicie (to jest właśnie reset TIM2) czekam...
Witam, próbuję skonfigurować licznik TIM2 w STM32L152RE, aby zliczał impulsy z pinu w trybie alternatywnym AF1 na PA0 i generował przerwanie po zliczeniu 10. Stan wysoki na linii w przerwaniu od SysTick. Niestety, TIM2 po zliczeniu impulsów nie generuje przerwania i nie ma żadnej reakcji od niego. Czy ktoś spotkał się z takim problemem? Funkcje do obsługi...
Witam, chcę zrobić prosty stoper zliczający 655.4sekundy aktywowany wciśnięciem 20H ( w symulatorze na razie), jednak nie działa mi przerwanie i nie wiem czemu, program zapętla się i inkrementuje tylko R1 i gdy licznik T2 się przeładuje to następuje zresetowanie i dalej zlicza, nie obsługuje przerwań PRZE_INT0 i PRZE_T2. Prosiłbym o pomoc :) [syntax=avrasm]LJMP...
Z pomocą manuala od St do mikroprocesora z rodziny stm8l15x napisałem taki program, który miał zapalać diodę po przekręceniu się licznika. Jednak do przerwania w ogóle nie wchodzę. Co mam nie tak, bo nie potrafię znaleźć. stm8/ #include "mapping.inc" #include "stm8l152c6.inc" segment 'rom' main.l rim ld A,#%11111111 port_init ld PE_DDR,A ld PE_CR1,A...
witam, Mam następujący problem: Do Pinu 3 portu GPIOC mam podłączony sygnał 1kHz i chcę generować przerwanie od zbocza opadającego. moja konfiguracja: [syntax=c] GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SY...
Witam po skonfigurowaniu encoder interface mode zauwazylem ze po przepelnieniu , licznik nie resetuje sie przykladowo jezeli ustawie wartosc, do ktorej ma zliczac na 100 to po dojsciu do tej wartosci licznik nie resetuje sie (chyba powinien zliczac znowu od 0 do 100) inicjalizacja: [syntax=c]void initEncoder() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;...
Proszę mnie nie odsyłać do dokumentacji, bo siedzę z nią już kilka godzin. Normalnie mi wstyd, ale nie potrafię uruchomić timera jako licznika zewnętrznych impulsów - w najprostszej konfiguracji. Nie wiem np. jak ustawić pin GPIO - jako AF dla np. TIM1_CH1??? Na razie mam coś takiego - pewnie powrzucałem masę zbędnych rzeczy a nie ma czegoś podstawowego,...
Witam, Mam problem z realizacją przerwania z USART3 na STM32L152RBxx. W momencie wywołania przerwania debugger zatrzymuje się na funkcji default_handler(). Poniżej umieszczam kod: main: #include "stm32l1xx.h" #include "stm32l1xx_conf.h" #include <string.h> void GPIO_Conf(void); void RCC_Conf(void); void NVIC_Conf(void);...
Witam! Problem polega na tym że chociaż użyłem zmiennej volatile nie nastepuje jej zwiększenie w przerwaniu a przez to wykonanie pętli if. w czym może być problem? Dodano po 46 rozwiązałem to poprostu trzeba było wsadzic petle if w nieskończoną pętle while
Witam, przy ustawionym preskalerze np na 80 przerwanie zostaje wywołane, ale gdy zmniejsze preskaler to przerwanie się nie wykonuje. #include "stm32f10x.h" void RCC_Conf(void); void Show(int); void GPIO_Conf(void); void NVIC_Conf(void); void TIM_Conf(void); . . . int main(void) { #ifdef...
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)...
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...
Witam. Mam standardowy enkoder dwa kanały A,B przesunięte o 90st. Próbuje skonfigurować timer 2 do pracy z tym enkoderem jednak licznik ani drgnie. Próbowałem skonfigurować na różne sposoby i w końcu nie wiem czy coś jest fizycznie uszkodzone czy po prostu źle skonfigurowałem rejestry. Oto mój program: [syntax=c] RCC->APB1RSTR|=RCC_APB1RSTR_TIM2RST;....
Mam skonfigurowany I2C wraz z DMA do odbierania danych z sensorów. Inicjalizacja odbioru następuję z częstotliwością 100Hz i jest załączana przez timer, następnie standardowo w przerwaniach od I2C i DMA dane są odbierane. Konfiguracja jest prawidłowa, ponieważ gdy testuje odbiór danych podczas nieskończonej pustej pętli while w głównej funkcji main():...
Witam Idea działania programu jest taka, że po starcie na wyświetlaczu pojawia się komunikat "napis testowy", a po naciśnięciu przycisku wyświetlany jest napis "STANDBY MODE" i układ przechodzi w tryb standby. Po naciśnięciu przycisku napis wyświetla się, ale mikrokontroler nie pracuje w trybie standby (podłączony miernik na pinie IDD). Niestety nie...
Witam mam lekki problem, mianowicie staram się oprogramować zewnętrzne przerwanie, standardowo wywoływane po wciśnięciu przycisku, reagujące na zbocze opadające. Okej, wszystko elegancko ale po wejściu w przerwanie nie jest kasowana flaga przerwania. Przeglądając RM, nie odnalazłem żadnego rejestru w EXTI, który by za to odpowiadał. Pytanie brzmi zatem:...
Witam kolegów! Dorwał się człowiek do STM32 i teraz będzie spamował. Ale w tym wypadku i działa i nie. Chcę zrobić najbanalniejszego delaya na liczniku TIM17. uC taktowany 16MHz. I jest mały problem: void bios_delayMs(uint32_t ms){ RCC->APB2ENR|= RCC_APB2ENR_TIM17EN; TIM17->CNT=0; TIM17->ARR=0xffff; TIM17->PSC=30000; TIM17->CR1=...
Witam serdecznie mam mały kłopot z zatrzymaniem pętli licznika, używam do tego 2 styków Sw1 i sw2, czyli start stop jednak, gdy przyciskam styk odpowiadający za zatrzymanie pętli Ona po chwili jest uruchamiana ponownie Poprawiono tytuł na zgodny z regulaminem p. 3.1.15. oraz zasadami korzystania z działu mikrokontrolery . LordBlick
Do pasma EKG układ w zupełności wystarczy. W kwestii punktu 4, chodziło mi o taką konfigurację licznika: - licznik zlicza w jednym kierunku, np. w górę. - Czas pełnego okresu (PSC i ARR) to trochę więcej niż czas transmisji + impuls LDAC (=210ns). - Do jednego z rejestrów porównujących ładujesz wartość, która odpowiada impulsowi LDAC, a wyjście konfigurujesz...
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,...
Cześć, Od jakiegoś czasu borykam się z takim problemem: chciałbym odbierać po CANie ramki, wpisywać je w gotowy szablon i dalej wysyłać po USARCie na kompa w kodzie ASCII. Czegoś mi brakuje w tym kodzie i za każdą wskazówkę będę wdzięczny. Z góry dzięki:) To mój main: [syntax=c] unsigned char tx_uart[]=" ID: DL: F: T: DATA: ";//54 char ramka[55]; unsigned...
Czy dobrze rozumiem że ustawiając Update DMA i Update interrupt to po każdym przekręceniu się licznika zostanie wywołane przerwanie i DMA? W przypadku Trigger określam co bedzie powodowało start Timer'a?
Witam, Ostatnio zacząłem przechodzić na mikrokontrolery STM32 i testowałem program zawarty poniżej. Licznik TIM2 zlicza w górę, drugi licznik generuje żądanie DMA od przepełnienia się licznika, wysyłając wartość licznika CNT TIM2 do tablicy, która jest inkrementowana. Powinienem otrzymać w tablicy wartości zwiększające się cyklicznie co tą samą wartość,...
Zrób sobie jakaś sygnalizacje na pinie zgłoszeniowym, ledka czy coś będziesz wiedzial czy przerwanie przyszło czy nie. Albo jakiś licznik wejść w przerwanie. od czegoś trzeba zacząć zobaczyć po czyjej stronie jest wina.
Witam. Kupiłem płytkę uruchomieniową STM32vldiscovery z kontrolerem STM32F100RB. W przykładowym programie użyto licznika SysTick do wywoływania przerwania co 1ms. W programie użyto funkcji włączającej podział zegara systemowego (ustawionego na 24MHz) przez 8. "SysTick_CLKSourceConfig(SysTick_CLKSour... Jednak aby przerwanie było wywoływane...
Nawet jeżeli nie generuje jednego tylko więcej, to po jakimś czasie licznik powinien zliczyć do 5, w moim przypadku nic się nie dzieje, przerwanie się nie wywołuje.
Przerwanie powinno być w porządku, ale co do inicjacji samego Timera to nie jestem pewny. Po prostu nie mam zaufania do funkcji API dla Timerów. Czy udało Ci się uruchomić cokolwiek związanego z licznikami na tych funkcjach?
Już wyjaśniam. Pojawia się przerwanie globalne licznika TIM2. Przeskakuję do ISR przerwania. Które flagi mam tam sprawdzić żeby dowiedzieć się czy przerwanie wystąpiło z powodu przepełnienia licznika czy z porównania kanału CC1? Według poradnika szczywronka i RM'a sprawdzałbym flagi UIF oraz CC1IF w rejestrze SR. Jednak mimo, że nie występuje porównanie...
Masz to zupełnie źle rozwiązane. Oczekiwanie w przerwaniu to jest kardynalny błąd! Jeśli chcesz to tak zrobić, to powinieneś mieć bufor z możliwością sprawdzenia ile jeszcze zostało do wysłania - np licznik pozostalych znaków. W przerwaniu sprawdzasz licznik - jeśli większy od zera, to zmniejszasz, wysyłasz, przesuwasz index tablicy (czy jak to tam...
Może być:) Ale rzeczywiscie niektóre informacje mogły by być nie tak ukrywane. W RM0008 przy opisie TIM2 to TIM5 - Prescaler description - ani słowa, przy opisie rejestrów TIMx_PSC - też ani słowa, jeżeli chodzi o obrazek Clock Tree to chyba nie ma go w RM0008, jest w manualach konkretnych procesorów, ale dla STM32F103VC nic takiego pod tym obrazkiem...
Wydaje mi się, że najłatwiej będzie rozwiązać to w obsłudze przerwania jednego z timerów. I przychodzą mi do głowy dwie możliwości: 1. Zmienianie parametrów pracy timera po każdym "trybie" przebiegu jaki ma być wygenerowany na wyjściu. Tj. przeładowywanie liczby do jakiej licznik powinien odliczyć zanim wygeneruje przerwanie. 2. Ustawienie licznika...
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...
To RM w łapę i czytać o timerach i ADC. Jak czegoś nie zrozumiesz pytać. Ciekawe jak generujesz to PWM jak nie wiesz jak to działa. ... Wyczuwam ... Czuję ... Jakiegoś gotowca. Piotr - na Ciebie zawsze można liczyć... :) Na drugie powinieneś mieć REFERENCE :) OK, doczytam sobie na temat przerwań od bloku porównującego COMPARE - bo chyba to sugerujesz?...
Przerwanie od input capture wskazuje, że stan licznika został zapamiętany w odpowiednim rejestrze... Jeśli dodatkowo można IC sprzęgnąć z DMA to problem akwizycji danych jest rozwiązany - DMA może wtedy wywoływać przerwanie po zebraniu dwóch (lub więcej) wartości - początku i końca impulsu. W niektórych co sprytniejszych ARMach (np STM32) można tak...
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...
A jak się ma do tego sscanf()? Ok, to sporo pomogło, teraz jednak mam kolejny problem. To obsługuje mi przerwanie: [syntax=c]void USART1_IRQHandler(void) { //odbiór danych if((USART1->ISR & USART_ISR_RXNE) != RESET) { uint8_t data = USART1->RDR; gpsread[wpp] = data; if(wpp++ >= 128) wp = 0; } }[/syntax] A tu jest funkcja, która wczytuje...
Miałeś zrobić przerwanie na opadającym i rosnącym zboczu, a nie jakieś liczniki wewnątrz przerwania... "Zbocze" sprawdza się czytając choćby rejestr IDR, a nie zakłada że zawsze będzie na przemian, bo jak widzisz jednak tak nie jest. 4\/3!!
Zapytam tu o inną jeszcze sprawę, bo nie chcę dla tego drobiazgu zakładać nowego tematu. Muszę ustawić timeout ramki, jezeli po odpowiednim czasie odbiornik nie odpowie, to transmisja zostaje przerwana z flagą błędu. Chcę do tego użyć timera, np.TIM4. Uruchomiony bedzie w najprostszej konfiguracji zwykłego licznika, ładowanego przed rozpoczeciem transmisji....
Napisałem program liczący wariancję z obu tablic, dodatkowo skonfigurowałem Timer2 do pracy w trubie PWM o częstotliwości 1Hz z wypełnieniem 10%. Podałem ten sygnał na mój przetwornik A/C. Przetwornik próbkuje sygnał i liczy wariancję z obu tablic. Po wykryciu że wariancja jest bardzo duża zmienia stan diody LED PC9. Druga dioda jest połączona do wyjścia...
(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...
Witam Opracowałem prosty program, żeby nauczyć się eliminować programowo drgania styków. Idea jest taka, że po starcie wyświetla się napis „Test0 „ po naciśnięciu przycisku „Test1” i „Test2”. Wykorzystałem rozwiązanie z przykładu 9.6 z książki K. Paprockiego, sam przykład po uruchomieniu działa prawidłowo, czyli zlicza...
Mogę się mylić, ale w tym przykładzie kolega miga diodką wykorzystując GPIO a nie podpinając do wyjścia timera, więc gpio out pp może chyba być. Czy kol. qczek przypadkiem na koniec nie konfigurujesz ch1 w tim2 jako capture, czyli "łapiącego" i liczącego impulsy z zewnątrz? TIM_SetCompare1(TIM2, TIM_GetCapture1(TIM1) + CH1_PULSE ); Poza tym nie zauważyłem...
A co to jest ? [syntax=c] SysTick_Config(SysTick_FREQ/1); [/syntax] SysTick to 24 bitowy licznik, SysTick_Config służy do zaprogramowania wartości od której odlicza on w dół, po przejściu zero generowane jest przerwanie i SysTick odlicza znowu od wartości wcześniej zaprogramowanej u ciebie jest to (SysTick_FREQ/1).
He, dziękuję za sprostowanie - jednak dwa miesiące przerwy w programowaniu i mi się myli :). Tak - wkleiłem te niepotrzebne linie gdyż są one z komentarzem który przynajmniej mi pomaga zrozumieć co tam się dzieje w tych komórkach rejestrów, ale zgadzam się, że również może zaciemniać ogół - i to bardzo :). Freddie napisał dokładnie i krótko, to co chcę...
Widzisz gdzieś w kodzie wyłączanie HSION? Bo ja nie... A boli cię że HSION jest włączony? Jeśli tak, to go wyłącz ;] Czymże jest "jakiś licznik"? Co ty z nim masz zmiar robić i do czego go używać? Od pomiaru czasów wykonywania kodu jest timer w procesorze. Poza tym, co ci po liczniku, skoro pierwsze lepsze przerwanie rozwala ci cały pomiar... W lewym...
Robię program składający się głównie z przerwań. Program steruje 6 silnikami krokowymi. Uruchomiłem więc 6 timerów dla kazdego silnika w trybie PWM, wypełnienie zawsze 50%, sterowanie częstotliwością. Żeby każdy silnik mógł wykonać zadaną ilość kroków (a zalezności miedzy silnikami są skomplikowane i nieprzewidywalne), każdy timer po wykonaniu impulsu...
Witam! Mam kilka prawdopodobnie błahych spraw, ale nie rozumiem dlaczego tak, a nie inaczej. Ponieżej program wykorzystujący timer do migotania diod. [syntax=c]#include "stm32f10x.h" void TIM1_UP_TIM16_IRQHandler(void) { TIM1->SR&=~TIM_SR_UIF; // zerowanie flagi przerwania if(GPIOC->ODR!=0x300) { GPIOC->ODR=0x300; } else { GPIOC->ODR=0x000; } } int...
Dzięki zatem. To oczywiście zrozumiałe że 10 razy częściej będzie wywoływane przerwanie więc 10 razy większe obciążenie. Ale jak rozumiem, sama różnica w dzieleniu pomiędzy 32768/32768 a 1000k/100k nie jest większym obciążeniem dla procka? Nie wiem jak to zostało zrobione, ale szczerze mówiąc to ja nie wiem po co tam dzielenie jest, powinien być raczej...
Więc, doszedłem do tego, że mam źle skonfigurowany Timer. Jak wrzuciłem kod z użyciem bibliotek to ruszyło, zaczął przesyłać w nieskończoność jakieś losowe wartości. Po pierwsze w NVICu muszę odblokować przerwanie od Timera: Tak na początek - rejestr danych USART ma 8 bitów, nie 16. Zaprogramuj transfer DMA 8 bajtów, a nie czterech słów. Liczby transmitowanych...
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...
Gdzie ustawiasz TIM_Clock_Division_CKD? Powinno być na TIM_CKD_DIV1 (0) - to są bity CKD w TIM1->CR1. Być może tutaj masz ustawione dzielenie przez dwa. Co do bitów CKD, to są domyślnie ustawione na 0x00 i takie pozostają, nie zmieniam ich. Natomiast Jeśli chodzi o CKD, czy to przypadkiem nie odnosi się do zewnętrznego wyzwalania timera? 1/ nadużywanie...
stm32 przerwanie przerwanie stm32 przerwanie licznika
wężownica zbiornik poziomy schemat nawiewu peugeot ch341a pobierz
Ustawienie pompy paliwa VW LT 2.5 TDI AHD: kąt i kierunek regulacji Ogrzewanie postojowe do VW Caddy MK2 1.9 SDI 2002 – Webasto, Eberspächer, Autoterm – wybór i montaż