kardynalny błąd -> oczekiwanie na co, na TC==1 ? Oczekiwanie na cokolwiek w przerwaniu jest kardynalnym błędem. Przeciez w notce katalogowej zalecają poczekać po zakonczeniu transmisji na TC. Czy aby napewno piszą to w kontexcie przerwań, czy może poczekania przez wyłączeniem danego modułu peryferyjnego? Poza tym nie odpowiedziałeś na moje pytanie,...
Bit RXNEIE włącza przerwanie od dwóch flag: RXNE i ORE (overrun) - patrz tabelka USART interrupt requests . Odczyt z DR kasuje RXNE. ORE jest kasowane przez (cytat z opisu bitu ORE): "an read to the USART_SR register followed by a read to the USART_DR register".
No to masz 4-bajtowy znacznik początku ramki, w dodatku niejednoznaczny, tylko po co? Przy automacie masz zmienną - stan automatu, którą elegancko robi się jaku enum, a dalej switch zapewniający obsługę kolejnego bajtu i przejścia pomiędzy stanami. Do obsługi tego początku, jaki masz, potrzebujesz czterech stanów automatu (piąty stan to odbiór danych)...
Domyślnie są wyłączone, a co robi z nimi SPL - to już tajemnica jej twórców. Rozsądni ludzie nie korzystają z bibliotek typu SPL, a jeśli korzystają - to nie używają nadmiarowych wywołań, które mają za zadanie wpisać do rejestru to samo, co już tam jest. Poprawne zainicjowanie UART bez SPL - to jakieś 4..5 linijek kodu. ClearITpendingBit jest bez sensu...
Jak widzisz na załaczonym obrazku nie masz ustawionych wektorów. Ale akurat mam coś takiego gotowego i Ci podeślę :) Zainstaluj Cube. Plik z wektorami weź stamtąd. Możesz też zaimportować projekt i wyrzucić HAL - będziesz miał przy okazji najświeższy CMSIS
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Zacznij od opisania formatu danych. Po czym odbiorca ma poznać, że zakończono przesyłanie liczby? Tego ne napisałeś powyżej. Odbiór łatwo zrobisz w przerwaniu, pisząc obsługę przerwania w konwencji automatu. Najpierw poczytaj, co oznacza poprzednie zdanie. Potem możesz zacząć pisać automat. Potrzebne tylko dwa stany: - oczekiwanie na 'L' - skanowanie...
Najwięcej szukaj w manualu. Ja też nie wiedziałem o tych funkcjach i z manualem sam do tego doszedłem jak się wyłącza przerwania (doszedłem to dość sporo powiedziane - tam to poprostu jest napisane).
Dzięki za odpowiedzi i uwagi ! Na pewno nastepnym razem zwrócę na nie uwagę, ale szczerze mówiąc teraz zależy mi bardzo na czasie, żeby to jakoś posklejać, jak to się mówi jakoś na ślinę i żebym mógł trochę danych zebrać. (at)BlueDraco: Tu jest aktualny kod odbioru danych GPS: void USART1_IRQHandler() { if (USART_GetITStatus(USART_GPS,...
Na 99% nie. Można kombinować z auto-reload i transmisją jednego bajtu, o ile uda się przekonać DMA, że docelowy UART jest pamięcią, a nie peryferialem i o ile będziesz miał pewność, że nigdy dane nie będą równocześnie nadchodziły w takim tempie, żeby zapchać nadajnik. Czyli: nawet gdyby się udało, to jest to rozwiązanie wysoce niepewne i zawodne. Co...
Problemem było chyba to, że nie włączyłem globalnych przerwań.
Pokaż cały kod związany z DMA i przerwaniami. Włączyłeś to przerwanie?
W przerwaniu od DMA oczekujesz na ustawienie flagi oznaczającej zakończenie transmisji (TC). Jeśli chcesz super elegancko, ale niekoniecznie lepiej, to w momencie rozpoczęcia transmisji DMA włącz przerwanie od tej flagi w module UART - nadajnik będziesz wyłączał dopiero w tym przerwaniu. 4\/3!!
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ę...
Zastanawiam się tylko po co sprawdzać to: [syntax=c]USART3 -> CR1 & USART_CR1_TCIE[/syntax] nie rozumiem powodu. Przecież to jest "This bit is set and cleared by software." Programista nie wie czy ustawił to przerwanie czy nie? Dodatkowo ten zapis: [syntax=c]if(( USART3 -> CR1 & USART_CR1_TCIE) && (USART3 -> SR & USART_SR_TC ))[/syntax] wygląda dość...
No to szukaj błędu w ustawieniach zegara - skąd bierzesz przebieg wejściowy, częstotliwość (sprawdź czy dobrze ustawiona w module startowym), wywołanie SystemCoreClockUpdate itp... Prosty test: zaprogramuj timer i procedurę przerwania od niego an miganie diodą z częstotliwością 1Hz i zmierz sekundnikiem czas np. 60 mignięć.
Rozważajmy tu moment gdzie przerwanie zawiesi się w wykonaniu i jednak nie opuszcza przerwania.
No to znaczy że masz problem jeszcze gdzieś, volatile jest OBOWIĄZKOWE przy zmiennych współdzielonych przez wątek główny i przerwania. 4\/3!!
Przerwanie bym raczej właczył przed odpaleniem DMA. Odbiór przez DMA to raczej tylko w przypadku kiedy masz zawsze tę samą ilość danych. nie wiem jak w Twoim przypadku bo nic o tej "ramce" nie piszesz. Rozmiem że ma dokładnie 30 bajtów. Jezeli ma więcej lub mniej o choćby jeden bajt to Twój algorytm nie zadziała. - jezeli mniej np o 5 bajtów to odbierze...
Przerwania, w odróżnieniu od starych ARMów są w całości zarządzane przez ARM'a czyli CortexMx. W dokumentacji ARM znajdziesz opisy rejestrów i jako to działa. Każdy producent, taki jak ST zmienia znaczenie linii przerwań, definiując je po swojemu za wyjątkiem kilku pierwszych zarezerwowanych przez ARM. Ponadto, Cortex'y mają możliwość nadania przerwaniom...
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...
Po 5 latach chyba kolega sobie poradził:) Temat do zamknięcia. PS.Do sterowania nadajnikiem MAX3485 w STM32 kluczem jest poszukanie w RMie informacji o fladze TC a następnie programowe sterowanie odpowiedniego GPIO w przerwaniu od UARTu.
Nie uważasz przecież chyba, że da się zrobić wydajny i szybki kod realizujący kilka skomplikowanych funkcji przy użyciu 10-ciu linijek kodu, no nie? Poza tym wg mnie taka idea ("nadganianie" DMA w buforze cyklicznym) nie kosztuje nic więcej kodu niż normalna obsługa przerwania, za to ile mniej czasu... 4\/3!!
Ok. Ostatnio badałem dla STM32L czas wyjscia ze STOP mode. Mierzyłem oscylskopem i sekwencja: - wyjscie ze STOP mode - przełaczenie zegara procka z MSI na HSI zajmuje 150us. Jak masz system w którym możesz sobie na to pozwolić to nie ma problemu ze "zgubionymi" zdarzeniami. Nie wiem tak naprawde o co Ci chodzi. Naprawdę zdaje sobie sprawe że przerwanie...
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...
Czy pamiętałeś o włączeniu portów w ODPOWIEDNIM rejestrze APBENR? volatile nie ma nic wspólnego z AVR. Tego atrybutu używa się np. wtedy, kiedy zmienna modyfikowana przez obsługę przerwania jest testowana przez inny fragment kodu. Pokaż kod procedury przerwania, bo coś tam narozrabiałeś.
Z problemem poradziłem sobie w 90% stosując sztuczki z wpisami hook w pliku ".gdbinit" oraz dodatkowym wpisem do pliku konfiguracyjnego openocd dla eventu "old-pre_resume". Chodzi o użycie "cortex_m3 maskisr on/off". Dopiero najnowsza poprawka do OpenOCD 0.5.0 z 28 czerwca dodała automatyczne włączanie/wyłączanie bitu C_MASKINTS w Debug Halting Control...
A gdyby tak... [syntax=c]void USART1_IRQHandler(void) { u8 data; if(USART_GetITStatus(USART1,USART_IT_RXN... { USART_ClearITPendingBit(USART1,USART_IT_... data = (USART_ReceiveData(USART1) & 0x7F); USART1_Putc(data); } }[/syntax]
Funkcja USART_ITConfig(USART1,); zapewne służy do włączenia przerwania RXNE i TXE, co nie jest Ci do niczego potrzebne. Po skonfigurowaniu UART znacznik TXE jest w stanie 1. Jak wołasz funkcję USART1_TxBuf i jak jest zadeklarowana zmienna TxIndex? Próbowałeś debugować funkcję USART1_TxBuf? Jak wygląda praca krokowa? Wisisz w którejś pętli?
Kanał akurat był już ustawiony dobrze. Kierunek rzeczywiście źle - zmieniłem: ( DMA1_Stream6->CR |= DMA_SxCR_DIR_0 ). Oczywiście błąd był też w pierwszej linijce przerwania, powinno być: (if(DMA1->HISR & DMA_HISR_TCIF6)) i co najważniejsze - zapomniałem o włączeniu przerwania DMA w NVIC. Teraz wszystko hula, dzięki za pomoc tadzik!
Owszem CooCox pozwala szybko rozpocząć zabawę z ARM-ami, ale ma też swoje wady. Niedawno postanowiłem przetestować to środowisko i szybko zraziła mnie wada serwera GDB, którą openOCD miało w wersjach starszych niż 0.5.0 (ponad 2 lata temu). Brak automatycznego maskowania przerwań podczas debugowania skutecznie utrudnia śledzenie krokowe programu - nadejście...
Chciałem w ten sposób poczekać aż skończy nadawać linia TX i żeby zaraz po skończeniu nadawania odebrać z RX W sumie po to się wykorzystuje przerwania aby nie czekać.
Zmienne globalne zajmują...... Pewnie ram dla led jest rezerwowany w chwili uruchomienia biblioteki przez memalloc. Gdybyś sam pisał obsługę led to użyłbyś tablicy o określonym rozmiarze dzięki czemu wiedziałbyś ile ram zajmuje program. Poszukaj jak wyświetlić ilość wolnej pamięci ram w czasie działania programu. Jakiś freemem jest. Trochę oszuka ale...
Chodzi o wyświetlanie Stringów przez USART? To na czas testów tylko. Jakiś pomysł?
Ja ostatnio rozwiązałem to tak do transmisji danych z 3 osiowego akcelerometru: [syntax=c] sprintf((char *)buforTx,"X%03iY%03iZ%03iE%1c%1c",Buffe... USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //Przerwanie-transmisja [/syntax] Potem w programiku napisanym w C# wyłuskuję z ciągu interesujące mnie dane: http://www.youtube.com/watch?v=d-q6DuQH-...
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);
Coś takiego na STM32 popełniłem ponad 2 lata temu. Na choince mam 576 szt. (4 metry) WS2812B z czterema spokojnymi animacjami do wyboru, pędzone po SPI. Sterownik co roku improwizowany od nowa z jakiegoś Nucleo lub Discovery z F4 lub L4. Dodatkowo druga taśma 60 LED w oknie z innym sterownikiem z F030 Discovery.
W HAL odbiór po USART jest napisany źle. Problem pojawia się, gdy w czasie nadawania (na przerwaniach) pojawią się dane do odbioru. Nie miałem siły aby HAL poprawiać. Najlepiej zrobić na rejestrach. HAL to działa jak Arduino. Jak uruchamia się jedną funkcję jest ok, jak kila to porażka. Na razie w I2C nie znalazłem błędów (niedomagań) a w USART, RTC,...
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...
Powiem tylko, żebyś nie czuł się nie wiadomo jak lepszy, bo znasz ARMy, bo to nie wiedza tajemna No chyba sobie żartujesz:) Nie problem w tym ze trochę znam, ale w tym że dość niedawno się ich uczyłem i doskonale pamiętam co gdzie i dlaczego sprawiło mi trudności. I nie zgodzę się absolutnie że nie ma znaczenia dla kogoś rozpoczynającego naukę ARM,...
Ja na samym początku przerzucam wektory przerwań na początek pamięci RAM. A później wstrzykuję swoją funkcję w miejsce oryginalnego wektora. Po rozmyślaniu na ten temat doszedłem do następujących wniosków. 1. Możliwość dynamicznej rejestracji przerwań (najlepiej w wysoce abstrakcyjny sposób, tak aby funkcje nie musiały być publiczne) byłaby z pewnością...
Nie, nie możesz (przynajmniej nie powinieneś). Nie blokuj przerwania od odbioru w ten sposób. Użyj flagi i wykonaj ten kod w mainie. Pokaż inicjalizację USART2. Zrobiłem z flaga i wysyłanie w mainie. W ten sposób że w przerwnaiu odbioru od usart2 ustawiam: flagaS=1; Natomiast w mainie: if(flagaS==1) { //test usart2 flagaS=0; send_frame_USART2(); }...
plik .h [syntax=c]/* * uart.h * * Created on: 27.09.2017 * Author: Pawel */ #ifndef UART_UART_H_ #define UART_UART_H_ //void USART1_IRQHandler (void); #define UART_BUFOR 32 // definiujemy bufor o rozmiarze 32 bajtów // definiujemy maskę dla naszego bufora #define UART_MASKA_BUFORA ( UART_BUFOR - 1) #endif /* UART_UART_H_ */ [/syntax]
Witam. Na początku się przywitam, gdyż jest to mój pierwszy post tutaj. Więc witam Was :) Aktualnie piszę oprogramowanie na płytkę PCB z mikrokontrolerem STM32F103RBT6 - docelowo układ pomiarowy. Wszystko działa: ADC, DMA, USART, NVIC, SPI... No właśnie z tym ostatnim jest problem. Jaki? Korzystam dokładnie z SPI2 i trybu "receive only". Wszystko działa...
Temat można potraktować jako zamknięty. Problem polegał na tym, ze flagi od przerwania odbioru USART co prawda były kasowane automatycznie, ale zanim zostały skasowane przychodziło już nowe przerwanie... Dodatkowo CLK na USART2 był uruchamiany dwa razy i jak się okazało ma to duży wpływ na pracę tego ukłądu. Dlaczego? nie wiem ...
Na pewno z tego powodu przerwania nie mogły przestać działać. Przebudowałeś cały projekt?
Może rozwiążę Twój problem nieco inaczej. Obsłużenie dowolnej bardziej skomplikowanej rzeczy w przerwaniu polega zwykle na sprawdzeniu flag statusowych (np. rejestru TIMx->SR) _ORAZ_ tego jakie przerwania są włączone (np. rejestru TIMx->DIER). Inaczej jest to po prostu niemożliwe. Dopiero mając te dwie informacje można dojść do tego jakie źródło faktycznie...
A czy mógłbyś napisać coś więcej w jaki sposób można by to lepiej wykonać? 1. Praktycznie cała twoja aplikacja funkcjonuje w USART2_IRQHandler(); 2. Przerwania w miarę możliwości powinny być jak najprostsze, więc wywoływanie w nich funkcji atoi/itoa jest słabym pomysłem; 3. USART powinien wysyłać ciąg znaków, ich serializacja powinna być w wyższej...
Masz wewnątrz procka kontroler USB oraz Usart. Kod ich wirtualnego coma według mnie pozwala na konwersje od wejścia USART do wyjścia USB bo Przerwania: [syntax=c_loadrunner]void USB_LP_CAN1_RX0_IRQHandler(void) { USB_Istr(); } void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { /* Send the received data to the PC...
Czyli z taktowaniem mam problem. Próbuję zrobić tak jak tutaj http://stm32f4-discovery.com/2014/04/lib... U mnie jest: Core Clock = ((HSE_VALUE / PLL_M) * PLL_N) / PLL_P Niestety po takiej konfiguracji STM wariuje, nawet USART wysyła śmiecie. Jak prawidłowo skonfigurować...
Próbowałem dać w przerwaniu: [syntax=cpp] if(USART_GetITStatus(USART1,USART_IT_TC)... { if(j>7) { USART1->CR1 &= ~(1<<7);//blokowanie przerwania od nadawania i=0; j=0; GPIO_ResetBits(GPIOA, GPIO_Pin_8);//odbior USART1->CR1|=(1<<5);// odblokowanie przerwania do odbverania } } [/syntax] A w konfiguracji USART USART1->CR1|=(1<<6);...
W tym momencie wypłynęło mi coś zupełnie innego. Sprawa dotyka USART i modułu BTM222 (kamodBTM222). Nie mam pojęcia, dlaczego nie mogę wykonać tak prostej czynności, jak zmiana nazwy komendą ATN. Korzystam z przykładu zamieszczonego na http://www.mikrokontroler.pl/content/blu... W tym momencie zrezygnowałem z przerwań...
Witam, cały dzień męczę się z obsługą przerwania od odbioru danych w STM32103RB. Korzystam z biblioteki HAL. Po całym dniu dalej nie wiem jak to ma wyglądać, dostępne example robione są w STM32CubeMX, a ja z tego nie korzystam. W dokumentacji chyba nie potrafię się poruszać bo nie wyiskałem z niej co po kolei trzeba wywoływać aby obsłużyć to przerwanie....
Witam ponownie Troche czasu minelo i zdazylem bardziej doglebnie poznac ten zestaw ref. jak i sam procesor STM32. Niestety wraz z rozrastaniem sie projektu powracaja stare bledy i tak: W trybie SC USART nie generuje mi przerwan dla kazdego znaku, tzn.: Przy wysylaniu przez karte ATR w stanie RSTIN LOW moj soft dostaje tylko jeden bajt (pierwszy z ATR)...
Jeśli opierałeś się na moim przykładzie, to proponuję zajrzeć do dokładnie 35 linijki skryptu linkera i dobrze zrozumieć to co jest napisane w jej okolicy.
mam ustawione przerwanie zewnętrzne ustawione na wyzwalanie zboczem opadającym i narastającym w funkcji obsługi przewania zapisuję sobie do bufora: void EXTI0_IRQHandler(void) { //Check if EXTI_Line0 is asserted if(EXTI_GetITStatus(EXTI_Line0... != RESET) { Buffer[iWriteIdx] = 'I'; GoToNextElement(&iWriteIdx);...
Proponuję Ci zerknąć na ten kod - https://github.com/DISTORTEC/distortos/b... - robi dokładnie to co chcesz osiągnąć i w dokładnie ten sam sposób. Tutaj kod przerwania - https://github.com/DISTORTEC/distortos/b...
Samo to nie jest może powodem błędu, który obserwujesz, Pewnie jest. Przerwanie -> skasowanie flagi -> prinf po uarcie W trakcie tego kolejne przerwanie -> skasowanie flagi -> prinf po uarcie ..... stos się przeełnia i sterta kończy (o ile ta implementacja go używa) natychmiast. i do tego dodatkowo - printf - nie reentrant Cała filozofia. Sory, jeżeli...
A STM32 niema przerwania że wysłał dane i czeka na następne. rozumiem ze to jest pytanie a nie stwierdzenie. Jeżeli pytanie to oczywiście zależy to od peryferiów użytych. Np wszelakie interfejsy komunikacyjne typu I2C, SPI, USART - oczywiście mają. Jeżeli to ma być równolegle to o ile nie zrobisz tego na DMA, to takiego przerwania nie ma (no bo jak...
Dziękuje za informacje, tamte kody z strony też są fajne, nie wszystko rozumiem z nich jeszcze ale wyjaśniło mi kilka rzeczy. Problem pojawił się teraz z przerwaniami dla uarta To jest mój tok myślenia po pierwsze włączyłem przerwania od wysyłki, odbioru a CMIE nie jestem pewien dokładnie [syntax=c] USART1->CR1 |= USART_CR1_RXNEIE; USART1->CR1 |= USART_CR1_TXEIE;...
Hej, Od kilku dni borykam się z dziwnym problemem. Napisałem sobie obsługę UART4 na mikrokontrolerze STM32F103RET6. Wycinek z kodu: https://obrazki.elektroda.pl/7181097200_... Napisałem sobie aplikację w C# (VS Community 2017) do odbioru ramek: (wycinek) https://obrazki.elektroda.pl/4415666900_... dostaję tylko jedną...
Na moje oko to nie ma prawa działać poprawnie. W tym kodzie praktycznie wszystko jest źle. Funkcja callback jest wołana po odebraniu danych do bufora, wcześniej przekazanego przy wywołaniu Receive. Ty nie bierzesz danych z bufora, do którego zapisała je obsługa przerwania z HAL, za to kolejno wielokrotnie odczytujesz RDR, nie wiedząc, co właściwie z...
Witam Postanowiłem zapytać tutaj, ponieważ wydaje mi się że to odpowiedni temat. Uczę się programowania na bazie STM32. Teraz poznaje porty USART i pojawił się problem: Temat wydzieliłem, ponieważ nie ma nic wspólnego z poprzednim.
Cześć! Posiadam od wielu lat (co najmniej 4) płytkę uruchomieniową Open107V od Waveshare. Nigdy nie miałem z nią problemów, i każdy projekt robiłem na niej, bo ma wszystko ładnie wyprowadzone i szybko mogłem sobie debugować instalację. Obecnie robię układ w którym 2 układy (drugi to STM32F407) komunikują się ze sobą przez RS485, korzystając z gotowego...
Lecz nie potrafię wymodzić alternatywy dla odbioru danych i kożystam z przerwania RXNE: W przerwaniu masz odbieranie 3 bajtów i 3 pętle oczekiwania? ale on na odczycie wartości ze status register po prostu się zatrzymuje Jakbyś warunek pętli i jej ciało rozpisał w dwóch linijkach to byś się przekonał, że nic się nie zatrzymuje (zakładam, że używasz...
1. Masz odpowiednie definicje rejestrów i wartości do wpisania w nagłówkach CMSIS. 2. Nie. Wpisujesz bit PENDSVSET i przerwanie jest pending ;) 3. Nie ma najniższego priorytetu. Trzeba ustawić. Jeżeli pytanie pierwsze jest przeczące to czy dobrze rozumiem, że wystarczy wpisać 1 w PENDSVSET a wychodząc 1 w PENDSVCLR ? Clear sie sam robi po wykonaniu...
Oczywiscie tak. Dodam ze uzywam programu System Workbench [syntax=c] /** ****************************************... * (at)file startup_stm32.s dedicated to STM32F103C8Tx device * (at)author Ac6 * (at)version V1.0.0 * (at)date 2018-04-06 ****************************************...
Chciałbym pomóc, ale... 1) Jak skonfigurowales DMA? Czy co koniec transmisji alokujesz nowy bufor i stawiasz tam wskaznik DMA? Czy może masz dwa bufory (ping-pong) i jeden przetwarzasz gdy w drugi DMA ładuje dane...? Ja na twoim miejscu wykorzystałbym właśnie ping-pong. W przerwaniu od DMA[TCIF] przelaczałbym tylko wskaznik na bufor i rekonfigurował...
Problem mam chyba typowy. Oprogramowuje interfejs komunikacyjny. Jednym z poleceń tego interfejsu jest reset. Sprawa ma się oczywiscie odbywać tak, ze przychodzi ramka z poleceniem resetu, odsyłana jest ramka z ACK i następuje zerowanie. USART działa na przerwaniach. Jak wykryć kiedy ostatni bajt ramki opuścił bufor nadawczy? Teraz mam taki kod: USART_ITConfig(USART1,...
W sumie to co napisałeś Freddie Chopin dużo wyjaśnia to co się działo z STM. Musisz mieć rację. Napisz mi tylko jeszcze czy jest możliwe zrobić czegoś takiego: W USAR'cie gdy chciałem wysłać 1 bajt np. co 1sek to wówczas ustawiałem flagę nadawania program przechodził do procedury obsługi przerwania i kopiował zawartość zmienne do rejestru nadawczego...
Witam, Próbuje uruchomić komunikacje uart w przerwaniu, no i oczywiście mam problem z tym, że nie działa :o Wygląda na to, że przerwanie wogóle nie jest wołane. Czy ktoś z szanownych forumowiczów mógłby zerknąc w kod i podzielić się informacją dlaczego ten program nie ma szansy działać? USART_SendData(USART1, 'X') do main'a działa ok. Jak również użycie...
(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...
Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
Witam, Uruchomiłem komunikacje po porcie szeregowym za pomocą USART1. Wszystko niby działa, ale przy deklaracji BaudRate w programie np 57600, na terminalu (program REALTERM) komunikacja działa przy ustawieniu Baud: 115200. Ta sama sytuacja ma miejsce przy ustawieniach innych prędkości. Prędkość na terminalu musi być 2x większa niż ustawiona w programie...
Witajcie, Potrzebuję pomocy przy STM32F429. Moje pierwsze podejście do rozwiązania docelowego zadania było oparte o biblioteki HAL i była to moja pierwsza styczność z STM. Pomysł fajnie się spisywał, ale później miałem jakąś totalną masakrę, żeby zaimplementować jakiekolwiek klasy. Wyszło tak, że przerzuciłem się na rejestry i nie wygląda to najgorzej....
Sporo się namęczyłem, zanim ruszył mi slave transmitter w STM32F103. W 107 będzie tak samo. Po pierwsze zobacz do errat - tam między innymi napisali, że przerwanie i2c musi mieć najwyższy priorytet, bo inaczej się wiesza. Poza tym przykłady nie zadziałały mi od razu, a problemy mają też inni, o czym możesz poczytać na main.c // main.c main()...
Czy to oznacza, że trzeba pracować na rejestrach i nie używać bibliotek? Nic nie "trzeba". Tylko po prostu jak chcesz zrobić coś choć trochę bardziej dziwnego niż to przewidzieli twórcy HALa, to zaczyna się temat na 50 postów o tym "jakie magiczne funkcje i jakie magiczne argumenty przekazać", gdy tymczasem rozwiązanie problemu bez tego HALa zajmuje...
Witam, Od paru dni piszę soft dla STM32F415 Bazę projektu generuję w Cube MX. Nie mogę sensownie skonfigurować DMA, jedynie prawidłowo działa tryb CIRCURAL oraz pojedyncze skorzystanie z DMA w trybie NORMAL. Pozosatałe kombinacje DMA działają różnie, czasem dziwnie czasem wogóle. Celem jest aby dwa przetworniki ADC2 i ADC3 zapisywały w przerwaniu (zrezygnowałem...
Witam, Mam problem z uruchomieniem USARTa na mikrokontrolerze STM32L100RC. Kod pisałem w oparciu do Reference Manual, oraz poradnik dostępny na tym forum. Czy jest w stanie wskazać mi błąd, bo mi już brakuje pomysłów. Kod: [syntax=c] //Konfiguracja komunikacji po USART1 void USART_Conf() { uint16_t divider; //Odblokowanie zegara dla USART1 RCC->APB2ENR...
Mieszanie do tej dyskusji bitbandingu nie ma sensu. Operacja "tylko-zapis" jest atomowa jeśli tylko zmienna którą zapisujesz ma "rozmiar natywny" (lub mniejszy), czyli na ARMach generalnie 32 bity lub mniej. Wszelkie operacje zdradzające cechy "read-modify-write" (a więc "a^= b", "++a", "a += b", "a |= b" itd) NIE są atomowe. To czy akurat "celem" danej...
Witam ponownie. Teraz rozumiem zasadę działania. Podłączyłem mój moduł do UART7 teraz w poprawny sposób: HC-05 Tx <-----> STM32F7Disco Rx (PF_6) HC-05 Rx <-----> STM32F7Disco Tx (PF_7) Jednak komunikacja nadal nie działa ani z telefonem ani z terminalem komputera ... Oczywiście skonfigurowałem UART7 w STM32Cube. Dodam, że USART1 w pętli...
Witam, Chcę zrobić coś takiego: strumień danych z RX kanałów USART1 oraz USART2 ma być połączony w jeden strumień i przesyłany na bierząco kanałem USART3. Chciałem to zrobić na przerwaniach i czymś w rodzaju DIY bufora cyklicznego - USARTY w przerwaniach ładują do jednego bufora i inkrementują wskaźnik, natomiast w nieskończonej pętli w main.c jest...
Witam ponownie, zacząłem niedawno zabawę z CANem, a raczej powinienem napisać, że chciałem zacząć. Jako, że ostatnio nie mam dostępu do auta postanowiłem pogadac z interfejsem ELM327. Tak więc podłączyłem CANL z CANL i CANH z CANH między płytką a interfejsem. Idea jest taka: wysyłam komendy do interfejsu przez usart1 a on wysyła do mnie odpowiedzi po...
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};)...
Masz rację, że szkoda całego tygodnia na taki problem:). Oto cały kod: Main: http://obrazki.elektroda.pl/2257364500_1... podłączenie do STM'a wygląda nastepująco: RxD do PA10, TxD do PA9. Więc nadal stoję w miejscu, ale nie poddaje się;).
Dzień dobry, To mój pierwszy post tutaj (jeśli jest w złej kategorii to proszę powiedzieć). Z góry mówię że w elektronice jestem BARDZO początkujący więc jeśli ktoś zdecyduję się odpowiedzieć to poproszę BARDZO prostymi słowami. Mam następujący problem. Mam zrealizować następujące zadanie -> za pomocą płytki STM32 NUCLEO-F401RE mam dokonać pomiaru temperatury...
Witam. Jestem zupełnie nowy w programowaniu STM32, korzystam z zestawu http://kamami.pl/index.php?ukey=product&... i uczę się według książki weń zawartej. Próbuję nawiązać komunikację między zestawem i komputerem z użyciem flag oraz wymienić przykładowe dane, lecz na razie brak sukcesu. Terminal (korzystam z aplikacji Terminal autorstwa...
Witam, Używam Timera 3 w celu generowania sygnału PWM na kanale 1 i 2 tegoż timera. Sam PWM działa jak ta lala, ale wygląda na to, że udostępnienie przerwania z tego Timera powoduje, że kontroler nie wykonuje instrukcji z pętli głównej. Czy ktokolwiek wie o co co może chodzić i jak to naprawić? Z góry bardzo dziękuję. Poniżej wklejam istotne fragmenty...
Zazwyczaj najwygodniej uczyć się języka C na desktopie, czyli swoim PC-cie. Programując STM32 lub AVR-ki używa się języka w ten sam sposób, ale zwykle nie mamy dostępu do pewnych bibliotek standardowych, które na desktopie są od razu, bo komputer ma monitor, klawiaturę, dysk twardy itp.. W mikrokontrolerach tego nie mamy, więc użycie printf(), getch()...
Sprytnie używając timera można napisać całkowicie nieblokującą obsługę OneWire z rozsądnym wspomaganiem sprzętowym - jeden kanał timera w trybie compare ze sterowaniem wyjściem w trybie OD, sąsiedni kanał w trybie capture z chwytaniem zboczy narastających. żadnych delay, żadnych problemów z przerwaniami. Można też obniżyć priorytety wszystkich innych...
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>...
przez te kilka dni udało się odpalić lcd tryb tekstowy Lcd zdjęcia z plik nagłówkowego Lcd zdjęcia z karty karte z obsługą fat USART co prawda nie na przerwaniu ale też działa usb (oszukane bo rtos nie panuje nad przerwaniami) oczywiście IO led niestety nie poradziłem sobie z tym sam (nawiasem mówiąc dziękuje za poświęcony czas) jeden z problemów dotyczył...
Witam. Mam za zadanie zaprojektowanie i oprogramowanie protokołu komunikacyjnego pozwalającego na odczyt/zapis zadanych parametrów. Komunikacja z PC ma się odbywać po USART z użyciem przerwań i bufora kołowego. Jeżeli chodzi o bufor to będę opierał się na tej stronie: http://www.embeddeddev.pl/bufor... wiem od czego mam zacząć....
Problem mam następujący. Ustawiłem, żeby procesor odbierał ramki przez USARTA na przerwaniu i w tym przerwaniu sprawdzał czy z nią wszystko ok. Kod całęgo przerwania wygląda tak: void USART1_IRQHandler(void) { u8 ReceivedByte; extern ReceivingFrame; extern ReceivingHeader; extern MultinetRun BufStruct; extern RxIndex; extern TxIndex; extern...
W amatorskich aplikacjach nigdy nie bawiłem się w liczenie sum kontrolnych, ani tworzenie jakiś super wymyślnych formatów ramki. Twój uK ma sprzętową obsługę USART i może być widziany jako wirtualny port COM, to najprostszy sposób komunikacji z PC. Możesz sobie przesyłać bajt po bajcie, albo zdefiniować jakiś bufor, który po wypełnieniu wywołuje przerwanie...
Zacznij od echa w pętli bez przerwań. Jak to zadziała - zacznij walkę z przerwaniami, najpierw nadwania, potem odbioru. Kod z użyciem bibliotek jest tak obrzydliwie długi, że nie chce się go analizować. Na moje oko coś za dużo machasz bitami konfiguracji przerwań w przerwanaich i poza nimi.
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;...
Witam! Wrzucilem FreeRTOS v6.0.2 z ST Firmware v3.1.2 na te plytke. Uzywam IDE CrossWorks z ich standardowymi bibliotekami na ARMv7M w trybie THUMB little-endian. Kompilator pochodzi z IDE i jest to GCC v4.4.2. Nie dziala mi poprawnie komunikacja z karta inteligentnej. Karta pracuje w trybie T0, wiec Half-Duplex. Skonfigurowalem przerwania do USART3...
W AVR, USART ma także bit informujący o fizycznym wysłaniu bajtu, a nie tylko o wolnym buforze nadawczym. Zdaje się to TCX. Pamiętam, że może generować przerwanie. Dodano po 47 procesor przerzuca go do niewidocznego bufora nadawczego opisanego w dokumentacji i zaczyna go transmitowac Zgadza się, AVR mają 2 bajty FIFO nadawczego i odbiorczego. STM32...
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...
usart przerwania przerwania usart stm32 usart
sprężyna siłownika krups nokia trybie offline excel hiperłącze arkusza
Objawy wypadania zapłonu w Skoda Octavia 2 1.6 MPI 2004 Jak podłączyć głośniki do wzmacniacza Marantz 1050?