z tego co rozumiem żeby dokonać jakiejkolwiek zmiany w rejestrze AIRCR należy tam również wpisywać 0x5FA po to by zapis nie został odrzucony. Chyba że źle kombinuje:P Dobrze kombinujesz, wcięło mi ten zapis :P SCB->AIRCR = AIRCR_VECTKEY_MASK | (3<<8); gdzie: #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) Chociaż...
Ten temat może pomóc w rozwiązaniu tej zakręconej kwestii http://www.elektroda.pl/rtvforum/topic14... pozdr.
Spróbuj tak: [syntax=c]//GPIO_EXTILineConfig(GPIO_Por... GPIO_PinSource13|GPIO_PinSource15); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC... GPIO_PinSource13); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC... GPIO_PinSource15);[/syntax]
Tablicami NVIC się nie przejmuj. Korzystaj z funkcji dostarczonych przez CMSIS, w tym przypadku nie warto stosować rejestrów wprost. Konfiguracja Timera OK, choć kolejność nie należy do poprawnych. Przyjrzyj się jeszcze rejestrowi EGR. Przerwanie? Brak kasowania flagi skutkuje ciągłym jego wywoływaniem. Flagę kasuje się na początku przerwania. I taka...
Ściągnij z mojej strony przykład dla STM32 (którykolwiek), to zobaczysz jak to jest zrobione i jak powinno być zrobione... http://www.freddiechopin.info/pl/downloa... 4\/3!!
Problem mam w zrozumieniu jak liczą się linie EXTI_Linex, która odpowiada danemu portowi. Przykładowo przerwania obsługiwane przez void EXTI0_IRQHandler(void) obsługują piny PA0, PB0, PC0, PD0, PE0 z tym że nie jest chyba tak iż przerwania na tych pinach obsługuje linia EXTI_Line0 bo jak rozróżnić który pin wywołał przerwanie. Piny "0" ze wszystkich...
Skoro nie masz problemu z timerem, to po co w ogóle o nim pisać i po co testować program który ma też przerwania od timera? Niemniej jednak na początek brawa za to, że NIE używasz słynnego i popularnego badziewia (; Wg mnie (skoro chodzi o pin zerowy), powinieneś konfigurować rejestr AFIO->EXTICR[0], a nie 1. Problemem jest manual niezgrany z plikiem...
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
SysTick to przerwanie systemowe (rdzenia). RTC to przerwanie mikrokontrolera. Te pierwsze są zawsze włączone. Te drugie trzeba włączyć w kontrolerze NVIC. Jest do tego funkcja NVIC_EnableIRQ() czy jakoś tak, a do niej definicje z numerami przerwań. 4\/3!!
Jeśli faktycznie TIM2 jest taktowany z częstotliwością 42MHz to Twoje przerwanie powinno być wywoływane co 10ms (konfiguracja RCC). Niemniej jednak kasowanie flagi przerwania powinno być pierwszą czynnością jaką przerwanie wykonuje a Ty kasujesz flagę raz na 100 wywołań. Poza tym umieszczanie funkcji USART_putint i USART_SendData wewnątrz przerwania...
Podłączenie przez kondensator faktycznie pomaga, jednak jest to sygnał który zmienia się ~200 razy na sekundę, dlatego niestety odpada. 200Hz? Przecież to prąd stały... Kondensator 100n z rezystorem 10k mają stałą czasową odpowiadającą częstotliwości 1kHz, z rezystorem 100R już jest 100kHz, więc gdzie tutaj jakiś problem? Tak jak już rb401 napisał...
AFIO->EXTICR Druga linijka nadpisuje to co zrobiłeś w pierwszej. Dalej nie patrzyłem.
No bo wciąż ustawiasz rejestr IMR "odwrotnie" - zajrzyj do manuala co oznacza 0, a co oznacza 1. I w ramach testów zrezygnuj z ustawiania jakichkolwiek priorytetów przerwań czy czegokolwiek z nimi związanego. 4\/3!!
W tym projekcie w którym Ci to nie działa pewnie nie masz prawidłowych wektorów przerwań, bo w pliku startup_stm32f030xc.s nic ciekawego nie ma (tylko same zera).
Witam Od niedawna bawię się uC STM32 i krok po kroku próbuję nauczyć się ich obsługi. Słowem wstępu: Mam płytkę ZL31ARM, pewne doświadczenie z programowaniem w C/C++ i zupełny brak doświadczenia z mikrokontrolerami. Mam już za sobą mruganie diodami i proste pętle opóźniające; obecnie chcę nauczyć się obsługi przerwać przy wykorzystaniu EXTI i IO. Korzystam...
Ile razy kolego mam ci pisać o przykładach zawartych w bibliotece? Z każdą "pierdołą" będziesz pisał nowy temat? Jak nie masz nic konstruktywnego do powiedzenia to poprostu nie pisz i ignoruj moje posty. Dzięki kilku życzliwym i wyrozumiałym user'ą z tego forum zrobiłem spory postęp
Złą flagę czyścisz w przerwaniu (13 ≠ 1) ;)
TIM1 jest tu specjalny, bo ma kilka wektorów przerwań (TIM1_BRK_IRQHandler, TIM1_UP_IRQHandler, TIM1_TRG_COM_IRQHandler, TIM1_CC_IRQHandler). Reszta timerów ma jeden. TIMx_IRQHandler, przeglądnij sobie -> 10.1.2 Interrupt and exception vectors
while(DMA1 -> LISR && DMA_LIS... Przyjrzyj się temu dobrze... Już nawet pomijam to, że jest odwrotnie logicznie. UART4 -> CR1 |= (1<<5); // RXNE I po co komu to przerwanie?
A ja zapytam : czy w tablicy wektorów przerwań znajduje się pod właściwym adresem handler obsługi przerwania od UART4? Bo zapewne nie i dlatego ląduje w DefaultHandlerze. Podejrzewam, że tablicę wektorów masz od STM32 z trzema uartami.
Zacznij od określenia protokołu transmisji - w jaki sposób będziesz przesyłał te dane (znakowo/binarnie), jaka jest ich długość, po czym program może je rozpoznać, czy i jak sprawdzać poprawność transmisji. Zastanów się nad strukturą oprogramowania - same przerwania, RTOS, czy (w ostateczności) jakaś pętla zdarzeń? Potem dopiero planuj programową obsługę...
Taka konfiguracja jest poprawna i stosowana przez większość RTOS-ów.
Witam. Mój problem dotyczy jak widać w nazwie tematu konfliktu między przerwaniami. Poniższa konfiguracja spełnia swoje zadanie i wszystko działa jak powinno. TIM2 [syntax=c] RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->PSC = 47999; // Set prescaler TIM2->ARR = 600; // Auto reload value TIM2->DIER = TIM_DIER_UIE; // Enable update interrupt...
Dzięki. Możliwe że bingo. Kanały Timer'a1 są akurat dzielone z interfejsem SPI2. Jeszcze dzisiaj to sprawdzę. [Edit] Miałeś rację. Kanał OC1 Timera1 kolidował z spi2. Skorzystałem z OC4 i fatfs ładnie działa we wszystkich konfiguracjach. dzięki Pozdrawiam
Aby włączyć NVIC, czy nie wystarczy tylko polecenie NVIC_EnableIRQ( ... )? __enable_irq() jest zbędne? Bo bez tego drugiego polecenia przerwania działają tak samo.
Czy ustawienie priorytetów załatwi problem czy może jest jakiś inny powód że przestało to działać? Definitywnie to drugie. Na 99% Twoje przerwania trwają zbyt długo lub użyłeś w nich (pośrednio lub bezpośrednio) funkcji blokujących/oczekujących/pollingu. Jeśli zaczniesz kombinowac z priorytetami bez zrozumienia przyczyny, to tylko wpędzisz się w więcej...
No ubaw jest pierwszej klasy... Wrzucisz w końcu tyle kodu, żeby była w nim KOMPLETNA inicjalizacja wszystkiego? Przecież nikt tutaj nie wie, co jest w Twojej funkcji HW_Init_GPIO(), ani w pozostałych (System_Init()?), które mogą coś jednak zmieniać w SPI2 czy istotnych GPIO. A jeśli uważasz, że nic nie zmieniają, to zakomentuj je i potem wywal z tego...
Witam, Chcę obsłużyć kilka kanałów ADC w STM32 z kodem utworzonym w CubeMX. Obsługa polega aby w przerwaniu zmienić konfiguracje kanałów. https://obrazki.elektroda.pl/5406599600_... Zrobiłem teraz obsługę przerwania od ADC, ale nie wiem jak w tym przerwaniu uruchomić sekwencję DMA do odczytu wielu kanałów, które zapisze mi dane odczytane...
Mała przestroga - w CrossWorks są szopki z przerwaniami ... Używam tego środowiska i nigdy nie miałem żadnych problemów z przerwaniami.
Moim zdaniem konfiguracja DMA jest trochę niepełna, a ponadto brakuje obsługi przerwania od DMA. Przynajmniej w jednym miejscu wpisz jawnie wartość do rejestru sterującego (CR = ...). Na razie wszędzie masz |= lub &=. Zakładając, że pierwszy transfer poleci i przerzucisz 19200 słów, to później DMA się zatrzyma i nic więcej nie prześle. I jak to ma coś...
Jak to zrobić: 1. włączasz przerwanie od timera w NVIC 2. Konfigurujesz timer, żeby generował jakieśtam przerwanie Odpowiedzi na pytania: 1. No bez timera raczej nie zrobisz przerwań co jakiś czas [; 2. Funkcja przerwania po prostu musi nazywać się DOKŁADNIE TAK SAMO jak jest wpisana w tablicy przerwań (zwykle CośtamCośtam_IRQHandler() ) 3. Hę? Przykłady...
Witam, Jestem poczatkujacy jesli chodzi o programowanie pod architekture Cortex. Posiadam zestaw ewaluacyjny STM32 Butterfly. Probuje skonfigurowac przerwanie, aby wykonało się po naciśnięciu przycisku. Debugujac program widac, ze po nacisnieciu przycisku flagi sa ustawiane, ale funkcja obslugujaca przerwanie nie jest wywolywana. tak wyglada moj kod...
Zaczynam zabawę z stm32. Chciałbym obsłużyć USART przez przerwania. Większość przykładów opiera się na stdperiph lib, chciałbym uniknąć stosowania tej biblioteki. Używam tylko nagłówka stm32f10x. Wydaje się że włączyłem przerwanie przez NVIC_EnableIRQ(USART1_IRQn) bit w rejestrze USART1->CR1 również został ustawiony i w zasadzie na tym utknąłem. Prosiłbym...
Cześć Chciałem odpalić timer i podłączyć do niego przerwanie ale napotkałem na pewien problem, a mianowicie konfiguruję sam Timer a następnie NVIC i po włączeniu zezwolenia na przerwanie procek skacze od razu do obsługi przerwania i już z tamtąd nie wraca. Umieściłem w obsłudze przerwania zmianę stanu pinu i wstawiłem breakpointa w main-ie zaraz po...
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
A jak wygląda obsługa przerwania (kod) i konfiguracja USARTa? Wyczyść całkowicie USARTx->SR na końcu.
Czyli w domyślnej podstawowej konfiguracji nie muszę inicjować stosu w inny sposób niż ustawienie odpowiedniej wartości w tablicy przerwań?
Tylko nigdy problemem nie był soft który ma tylko liczyć i sprawdzać warunki. Ograniczeniem przenośności były funkcje hardware-specific, czyli konfiguracja np. timerów, przerwań, adc, dma etc. Nawet między rodzinami STM32 przy identycznej konfiguracji GPIO bywa, że w jednym układzie jest AHB1, w innym APB2 ... więc przenoszenie nawet w ramach tego samego...
konfiguruje A0 na wejście z podciąganiem. Nie są potrzebne dalsze udziwnienia, aby po prostu chodziło... Wytłumacz mi w takim razie dlaczego konfiguracja od STM'a działa poprawnie bez odwoływania się do rejestru ODR ?
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
Coocox bardzo dobry na początek. Łatwy w konfiguracji, współpracuje z programatorami JTAG, ST_Link, nie ma ograniczeń, ma sporo ułatwień (automatyczne dołączanie potrzebnych plików, automatyczna konfiguracja stosu, zegara, przerwań (startup). A co do płytek z STM32 to najlepsze są serii discovery - tanie i posiadają wbudowany programator z ST_Link,...
Nawet dla takiego małego Miki jak ja już na pierwszy rzut oka jest jasne że te kody to potężne źródło problemów. Co widać bez wgłębienia się w szczegóły: * Funkcja main() jako rozbiegówka to słaby pomysł. Kolega stmx napisał coś na ten temat (nawet podaje link w promowanych tematach), warto to przeczytać. * Stos musi mieć odpowiednie wyrównanie, zwykle...
1. W jaki sposób piszecie kod do obsługi peryferiów występujących pojedyńczo w mikrokontrolerze? Np RTC, LCD, RNG, czy CRC. Najzupełniej normalnie, czyli jako zwyczajną klasę. Jeśli jest tylko jeden taki układ peryferyjny, to w projekcie po prostu mam jeden taki obiekt. Z pewnością nie bawię się w żadne singletony czy klasę w której wszystko jest statyczne....
Trzeba pewnie włączyć jeszcze globalne zezwolenie na przerwania, tylko nie mogę się tego doszukać w RM. Domyślnie przerwania są globalnie "odblokowane". W przeciwieństwie do poszczególnych przerwań, więc jest taka funkcja NVIC_EnableIRQ() czy jakoś tak. P.S.1. Nie musisz deklarować przerwania na górze, przed main(), bo i po co? P.S.2. W obsłudze przerwania...
NVIC->ISER U mnie przerzuciłem się na funkcję CMSIS, bo faktycznie sprawdzanie dwóch plików pdf w czterech miejscach w poszukiwaniu gdzie znajduje się dane przerwanie jest trochę utrudnionę. W tzw międzyczasie znalazłem sobie coś takiego: http://www.keil.com/download/docs/363.as... (STM32 Timer Example) i przyglądam się jak to jest tam zrobione
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...
Może ja do tego źle podchodzę. Czy Wy nie korzystacie ze standardowej biblioteki STM? Przynajmniej z modułów do inicjalizacji. Nie, nie korzystamy, ale skoro chcesz brać odpowiedzialność za kod dostarczony w podstać "as is" twoja sprawa. A konfiguracja Cortexa M, to żadna wielka tajemnica czy trudność, którą opisano w wielu miejscach.
Jeżeli nie jestes uparty na Atolic'a, to zapraszam na http://tutro.net, tam jest opisana konfiguracja Eclipse, tworzenie projektu z podpietymi bibliotekami od STM, oraz kompilacja OpenOCD.
Napisz co ile ma być zgłoszone przerwanie i jak masz skonfigurowany zegar. A poza tym po wejściu do przerwania musisz skasować bit zgłoszenia przerwania TIMx->SR &= ~(1<<0); Spróbuj może takiej konfiguracji: TIM6->PSC=0xFA00;//1ms,64MHz TIM6->ARR=10;// int co 10ms TIM6->DIER=1; TIM6->CR1=0x1;
SYSCFG włączyłeś? Debugger masz nawet nie sprawdziłeś czy konfiguracja się zapisała. [syntax=c]__attribute__((interrupt));[/s... Zbyteczne całkowicie.
Nie piszę z biblioteką, ale spróbuj wrzucić konfigurację przerwań po timerze, a najlepiej zamiast ładować tam tę beznadziejną strukturę, użyj NVIC_EnableIRQ(TIM1_CCIRQn) czy jakoś tak, bezp. z CMSIS.
A poza wszystkim - zapewne wisisz ciągle w obsłudze przerwania ADC, którego przyczyn nie kasujesz. Na początek wyrzuć to przerwanie całkiem i nie włączaj go. W praktyce w ogóle przerwanie od ADC ma bardzo ograniczone zastosowanie, zwłaszcza w STM32.
Generalnie korzystam z dwóch książek: "STM32 Aplikacje i ćwiczenia w języku C" M. Galewski "Mikrokontrolery STM32 w praktyce" K. Paprocki Tam wszystko jest opisane za pomocą tych właśnie bibliotek, rozumiem, że korzystania z tych bibliotek jest "nieoptymalne". Zużywamy więcej pamięci i realizacja procedur jest dłuższa bo są tu funkcje które odwołują...
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...
To ja pisałem o pętli for, ale walnąłem innego "babola" i poszedł wpis do kosza :) Czy pętla for się wykonuje należy podejrzeć w pliku .list. Pisałem też o tym, czy jesteś pewien, że startup w okrojonej wersji masz poprawny, że w ogóle procesor startuje, system_init() wektory przerwań itd. Ja standardowo "golę" HALa, wygenerowanego przez CubeIDE, gdy...
Musisz w swojej aplikacji dodać gdzieś swoją własną funkcje HAL_Delay(), która po prostu będzie wywoływała task-delay z FreeRTOSa.
STM32 NUCLEO-F303K8 z Cortex M4? Na przykład. Co do timerów - to fakt, ale nie powinno się ustawiać ich na ślepo. Są pewne zasady, jesli się ich przestrzega, nie będzie większego problemu. Niestety należy tej wiedzy szukać głównie w anglojęzycznym Internecie. Trzeba też czytać noty katalogowe dość dokładnie. Ważna też jest odpowiednia konfiguracja...
Nie widzę obsługi przerwania USART, które jest aktywne. Zgaduję, że procesor grzęźnie w pętli domyślnej pustej obsługi przerwania. Zamiast bezsensowynch wygibasów z wypełnianiem struktury danych i wołaniem NVIC_Init() ten sam efekt osiągniesz prostym wywołaniem NVIC_EnableIRQ(USART2_IRQn);
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?
Spróbuj mojego kodu do konfiguracji rcc na 72 MHz (u mnie działa na stm32f107 bez żadnych problemów), w przypadku wykorzystania kwarca 25 MHz [syntax=c] void rcc_conf(void) { RCC->CR |= RCC_CR_HSEON; while ((RCC->CR & RCC_CR_HSERDY) == 0); FLASH->ACR |= FLASH_ACR_PRFTBE; FLASH->ACR |= FLASH_ACR_LATENCY_2; RCC->CFGR2 = RCC_CFGR2_PREDIV1_DIV5 | RCC_CFGR2_PREDIV2_DIV5...
Witam, Próbowałem na podstawie książki "Mikokontrolery stm32 w praktyce" uruchomić na STM32F107 transmisję z wykorzystaniem USART-a. Połączyłem Rx i Tx ze sobą i próbuję wysyłać a następnie odczytywać wysłane dane. Poniżej jest mój kod: int main(void) { SetSysClockTo72(); EnablePerypherialClocks(); ConfigureNVIC();...
A tak przy okazji to zapytam to dla somoumęczenia nie używasz czegoś bardziej ludzkobrzmiącego zamiast samych cyferek? 411 nie mam ale na F446 i F303 F429 kolejność konfiguracji pinów nie ma zadnego znaczenia, Sądzę że błąd jest gdzieś indziej i tylko przypadkiem coś zadziałało.
Rzeczy, które zaznaczyłeś - to stałe zdefiniowane na podstawie lektury manuala - wartości bitów włączających odpowiednie tryby pracy peryferiali. MODER. A to nie powinno być zdefiniowane w pliku "stm32f0xx.h" aby wykorzystać w kodzie programu? Opis, który wkleiłeś plus opis bitów w rejestrach daje komplet informacji potrzebnych do zaprogramowania timera....
I2C jest rygorystyczne czasowo. Inne przerwania mogą powodować błędy. Zrobić I2C na przerwaniach o najwyższym priorytecie. Uchronić przed błędami powstałymi z HOR-PLUG. Np cykliczne pytanie i resetowanie I2C po konfiguracji sprawdzenie flag oraz stanu pinów.
NA 99.666% funkcje przerwań nazywają się zupełnie inaczej w tablicy wektorów, a więc nie ma możliwości ich wywołania przez przerwanie. 4\/3!! Funkcja przerwania zewnętrznego działa. (at)edit Konfiguracja NVIC (kod z biblioteki STM): [syntax=c] static void RC5_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Enable the EXTIx global...
Nowa wersja Poradnika gotowa do pobierania. Najważniejsze zmiany: - poprawiony rysunek pokazujący wyjścia w konfiguracji push-pull/open-drain - natchniony Reference Manualach ST zmieniło nazwy "prędkości" wyjść GPIO (zrobili High Speed i Very High Speed zamiast Fast Speed i High Speed ) - nowe nazwy zostały uwzględnione w Poradniku - w przykładowych...
Główne różnice to obecność "zanegowanych" sygnałów wyjściowych (OCxN) z opcjonalnym deadtime oraz wejście "hamulca" (BKIN). Właśnie dlatego go szkoda. Timery w STM32 są niesamowicie rozbudowane Tym bardziej szkoda takiego całego timera jako dzielnika /2. Ale udało się-wykombinowałem. Wymagało zewnętrznego połączenia wyjścia np ch3 na który mam wyprowadzony...
Witam serdecznie, Przerobiłem chyba najbardziej popularny przykład ze strony Freddie'go aby obsługiwać STM32F100RB na płytce STM32VL Discovery wraz z odpalaniem z RAMu i właściwie podstawowa funkcja - czyli nieśmiertelne mruganie diodą - działa wyśmienicie. Jeśli ktoś chce szybko uruchomić swój pierwszy program na STM32 VL Discovery przy użyciu Eclipse...
Witam Zaczynam się bawić z moim stm32 discovery i mam problem z konfiguracją przerwania. [syntax=c] #include "stm32f0xx.h" #define zapal GPIOC->BSRR|=(1<<9);//zapal diode #define zgas GPIOC->BSRR|=(1<<25);//zgas diode int main(void) { RCC->AHBENR |=(1<<19);//wlacz port C RCC->AHBENR |=(1<<17);//wlacz port A GPIOC->MODER...
To nie jest konfiguracja tylko funkcja obsługi przerwania. Ta pętla while czekająca na koniec odbioru wygląda nie najlepiej w funkcji przerwania. Na początek spróbuj bez przerwań czy w ogóle działa.
Datasheet podaje, że wytrzymałość pamięci flash to minimum 10000 cykli. Przemyśl, czy naprawdę warto kombinować, bo - uwierz - niepoprawne uruchomienie programu z RAM potrafi czasem sporo namieszać (szukasz błędu który nie istnieje). Co do komend, to po pierwsze musisz mieć inny skrypt linkera (bo nie używasz już flash), musisz wiec inaczej linkować...
A miałeś zmienić operację logiczną na BSRR na podstawienie... Znów prosisz się o błędy, nie wykonuj operacji logicznych na ODR, bo kiedy zaczniesz używać przerwań, odbije się to czkawką. Ja podejrzewam coś trywialnego, np. brak sterowania linii SS.
Witam wszystkich Tak jak w temacie, skonfigurowałem eclipse pod stm32. Używam makefile i linkera od Frediego. Wszystko pięknie działało(miganie diodą, obsługa klawiszy etc) do mementu, gdy postanowiłem przetestować przerwanie zewnętrzne. W tym momencie podczas odpalania program trafia do funkcji _Default_Handler w pliku vectors.c gdzie się zapętla (chyba...
Witam serdecznie wszystkich użytkowników. Zwracam się do Was z prośbą o pomoc w zrozumieniu i napisaniu krótkiego loopbacka na STM32. Ostatnio postanowiłem się przesiąść ze starych AVRków (na których wszystko było jakby prostsze ... :) ) i zakupiłem zestaw STM32F7 Disco. Być może dość ambitnie jak na początek ale postawiłem sobie za cel okiełznać te...
Bez DMA odczyt wartosci z ADC i wrzucenie do tablicy zajmuje 5us. Przy najszybszej konfiguracji ADC, próbki lecą co 0,5us więc tylko DMA daje rade się wyrobić.
static volatile DWORD Timer1, Timer2; z kolei DWORD to: typedef unsigned longDWORD; probowalem tez wpisywac dokladnie takie same wartosci ja Ty w Twojej funkcji i nic nie pomogło pozatym do obslugi przerwania ustawilem migajaca diodke, jesli sie nie myle od razu po wywolaniu funkcji: SysTick_Conf(); powinno to przerwanie sie generowac co 10ms a wogole...
Czyli jednak Bascom jest 10 razy lepszy ;) W Bascomie odczyt dowolnego kanału zajmuje jedną linijkę i nie trzeba kombinować z DaMAmi W STM32 też nie trzeba kombinować z DMA, których AVR i 8051 nie ma. Wszystkie przydatne funkcje znajdziesz w "stm32l0xx_hal_adc_ex.c". Bez problemu bez DMA a nawet przerwań możesz wyzwolić konwersję, czekać na jej koniec...
Tak skok jest wykonywany z podprogramu obsługi przerwania CAN. Nie mam aktywnych w tym czasie żadnych innych przerwań. Jedynym przerwaniem jakiego używam w bootloaderze jest przerwanie od odebrania danych po CAN-ie. Dodano po 3 Z tego co pamiętam, parametrem funkcji NVIC_SetVectorTable() jest offset a nie konkretny adres, więc podaje dobrą wartość....
Nie mogę rozwiązać problemu maksymalnej częstotliwości wyzwalania przerwania od timera (Update). Timer nie wyzwala przerwania z częstotliwością większą niż ok. 400kHz. Testuje zwykłą funkcjonalność wyzwalania przerwania w momencie zakończenia zliczania do góry lub na dół (update), bez PWM. Wszystkie próby prowadzę na jednej płycie (oryginalnej). Testowałem...
Wg. mnie jeśli ustawiasz SWSTART to nie potrzebujesz tego EXTSEL, a tak na marginesie to EXTEN odpowiada za zbocza. A teraz wiem, nie masz ustawionej flagi EOCIE w CR1 i nie generuje ci przerwania. PS. Nie musisz włączać i wyłaczać ADC wystarczy że po konwersji skasujesz flagi STRS i EOC, i przed następną konwersją robisz SWSTART.
Zacznij od zrobienia tego na pollingu, czyli w pętli while(1), bez przerwań, ale z poprawnym odczytywaniem flag TXE i RXNE przed zrobieniem czegokolwiek. Proponuje więc wrzucić do tej pętli coś takiego: [syntax=c]if ((USART3->SR & USART_SR_RXNE) != 0) { uint16_t x = USART3->DR; while((USART3->SR & USART_SR_TXE) == 0); USART3->DR = x; }[/syntax] Tym...
Wiem, że ogarnięcie ARM i jednocześnie C może być trudne, ale ja chciałbym na początek zrozumieć chociaż miganie diodą, a tu się okazuje, że to nie takie proste;-) To jest bardzo proste. Po prostu w AVR by migać diodą robisz 1 include io.h (no dobra, 2, bo jeszcze util/delay.h), ustawiasz 1 flagę kompilatora (np. -mmcu=mega8) i definiujesz jedną wartość...
Obsługa UARTa z przerwaniami jest dużo bardziej skomplikowana niż to co pokazałeś. Szczególnie nadawanie jest problematyczne, ponieważ nie można mieć non-stop włączonego przerwania, chyba że naprawdę chcesz NON-STOP wysyłać znaki. Zwykle trzeba to zrobić tak, że jak masz do wysłania paczkę, to pierwszy bajt wysyłasz "ręcznie" i dopiero wtedy włączasz...
Witam, spotkała mnie sytuacja z której nie mogę wybrnąć. Tzn do transmisji używam I2C, które w kontrolerze przerwań ma priorytet 1 dla obsługi zdarzen oraz 0 dla błędów. Kiedy uruchamiam Timer 17 skonfigurowany jako PWM(to co odczytane zostanie z I2C ma trafić do PWM'a), to transmisja stoi. Od Timera 17 nie generuje przerwań , wiec nic nie powinno zwieszać...
Jasne, że można trzymać dane we flashu. Sam tak nawet robię. Ale o wiele lepiej jest trzymać dane w górnej połowie flasha. W dolnej masz wektory przerwań.... Co prawda można je przenieść do RAM-u, ale to dodatkowa operacja. Więc po co komplikować sobie życie.
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
Witam, Napisałem program, w którym do odliczania czasu używam SysTick'a i przerwania od niego. Gdy skompiluję i zapiszę program do pamięci Flash, program ten działa jak należy i możliwe jest jego debugowanie. Jeśli skompiluję i wpiszę program do pamięci RAM, to program nie działa poprawnie, a debugować go można jedynie do momentu wystąpienia przerwania...
Dla CM3 interrupt latency wynosi 12 cykli i może być zaimplementowane do 256 priorytetów przerwań. Stellarisy mają zaimplementowane 8, STM32 ma ich 16, a LPC17xx ma ich 32. I nie ważne z kiedy ten dokument jest, jest nieaktualny. [url=http://ep.com.pl/files/2085.pdf]Lin... Wtedy był jeszcze na papierze, ale dokumentacja do rdzenia była dostępna. w tym...
No dokładnie tak robię. Tylko że najszybszy i najłatwiejszy sposób na to to wyłączenie przerwania i ponowne jego załączone po czasie przez timer. Mylisz się co do tego, że bardzo szybka obsługa przerwań nie będzie miała na nic wpływu. Problem z Twoimi radami jest taki, że podajesz dużo ogólników i żadnych konkretów. Nie oczekuję gotowego rozwiązania,...
Witaj Kasiu. Miałaś tyle różnych przerwań USARTA do wydoru, a wybrałaś przerwanie USART_IT_RXNE, które informuje o tym, że rejestr odbiornika nie jest pusty. Nie do końca rozumiem dlaczego. Tak sobie myślę, że jak wysyłasz znaki USART-em, to lepiej byłoby wiedzieć, że znak został wysłany i można wysyłać kolejny. To chyba przerwanie USART_IT_TXE. Do...
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, Konfiguracja projektu oparta o stm32_blink_led autorstwa Freddie Chopin. Układ STM32F103. Uruchomiłem proste przerwanie z UARTa żeby sterować przepływem programu podczas testów. Problemem jest to wywołanie funkcji z przerwania: typedef struct { u8 print_test_1; u8 print_test_2; u8 print_test_3; } sys_flag_t; volatile sys_flag_t sys_flag;...
Jeżeli nie potrzebujesz dokładnych opóźnień a takich Π•oko, to IMHO delay na pętlach w zupełności wystarczy. Timerów w stm32 niby wiele...ale prawie zawsze, w większych aplikacjach znajdzie się szczytniejsze dla nich zastosowanie. Z drugiej strony stosowanie pętli opóźniających na ARM-ach trąci profanacją :) Jeżeli nie interesuje Cie korzystanie...
Co do propozycji timera to masz na myśli, żeby uruchomić timer, który jak widzę jest na schemacie niżej(a dokładnie parę multipleksowanych): https://obrazki.elektroda.pl/6873035400_... On zaczyna liczyć z częstotliwością powiedzmy 100 cykli na sekundę, po doliczeniu generuje przerwanie i robi pomiar przetwornikiem ADC? Tylko właśnie...
Jest to panel 32x16 z multiplexem 1 z 4 Wg mnie powinieneś spokojnie to zrobić całkowicie sprzętowo pod warunkiem, że masz swobodę w użyciu pinów oraz do dyspozycji odp. ilość kanałów DMA. 1. Podstawa to sygnał OE powinien być generowany jako np. fast PWM. Użyć któryś z kanałów licznika i uruchamiać licznik w trybie master. Sterując wypełnieniem tego...
Witam, Napotkałem problem, którego nie mogę przeskoczyć podczas używania CubeMX. Chcę za pomocą przerwań lub za pomocą DMA mierzyć napięcie na ADCku. Niestety procesor wykonuje pomiar tylko raz. Mierzy początkową wartość potencjometru, nie reaguje na jego kręcenie. Sterowanie ADCkiem za pomocą "HAL_ADC_PollForConversion" działa, przy próbie użycia przerwań...
Dzięki za sugestie. Próbowałem i jako full i jako partial, niestety nie zmienia to zachowania programu... Próbowałem konfiguracji takiej uproszczonej jak podałeś, jak i bardziej skomplikowanej, próbowałem bezpośrednio na rejestrach ustawiać bity - niestety za każdym razem timer nie zliczał, mimo że reszta wydawała się być ok.
Ludzie co wy z tymi kombinacjami?... Aby zrestartować transfer DMA w trybie M2M na F1xx wystarczy: - zapisać do CCR zero - wpisać 0xF przesunięte o ((nr_kanału-1)*4) do DMA->ICFR - zapisać do CNDTR ilosc transakcji - zapisać do CCR konfigurację jednocześnie ustawiając DMAEN ...i leci. Jak DMA skonczy, znajduje się w następującym stanie: - CCR !=0,...
Zgadza się flagi poszczególnych zdarzeń są, chciałem powiedzieć że nie ma osobnych przerwań dla poszczególnych flag tak jak to jest w przypadku Timera1, i nie wiem co powoduje że pierwsze 3 przerwania w przypadki Timera3 i 2 przerwania w przypadku Timera2 nie generują przebiegu na wyjściu. Poniżej konfiguracja Timera2 http://obrazki.elektroda.pl/9351651600_1...
Korzystam z: Układ STM32 P103 (procesor STM32 F103 RBT6) Programator ARM-USB-OCD-H Środowisko CrossWorks v2.1.1 Problem: Pisząc własną obsługę USB wzorowałem się na przykładzie dla Keila (USB HID) i paczce z przykładowymi programami do USB ze strony Olimexa dla układu STM32 P103. Pierwszy (dla Keila) nie działał (operował na innych PINach itp.) ale...
stm32 przerwań stm32 wyłączenie przerwań stm32 obsługa przerwań
indukcyjność łuku odklejenie szybki dioda selenowa
renault mascott renault mascott
Drukarka HP MFP178 - cienie na wydrukach, powielanie treści Radio we wieży gra cicho na maksymalnym podgłośnieniu