Wywaliłem całe biblioteki stma a makro TXE i RXNE mam już wcześniej zajęte dla Usart A ta funkcja to dobrze jest napisana?
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ą...
To nie rozwiązuje problemu. Jeśli masz do skonfigurowania kilkadziesiąt pinów to dalej stoisz w tym samym miejscu - tracisz dużo czasu na klepanie konfiguracji dla GPIO. To rób konfigurację CubeMX a dostęp do GPIUO na rejestrach. Często używam tej metody nie tylko dla GPIO ale i dla USART, SPI. Transmisję realizuję swoimi funkcjami a init robię przez...
Chyba trzeba przestawić funkcję wybranych wyjść GPIO na linie interfejsu USART. Dla mnie mało czytelne są te gotowe biblioteki STM32. Sam wszystko robię na rejestrach.
Nie, no niewątpliwie masz rację, że jeśli chodzi o wydajność to szybciej jest bezpośrednio pisać po rejestrach ;) Tyle że tu chodzi zarówno o szybkość pojmowaną jako prędkość wykonywania kodu, jak i o prędkość pisania go - i tak musisz przeczytać manuala, a do tego jeszcze dokumentację biblioteki [; 4\/3!!
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ść...
W Twoim działającym przykładzie do rejestru wpisujesz adres tablicy ("&" może być albo może go też nie być - również zadziała wg mnie), natomiast w przykładzie niedziałającym najpierw do funkcji podajesz adres tej tablicy, a potem jeszcze raz wyciągasz adres tego adresu - żeby zaspokoić Twoje potrzeby kompilator zmienną tab umieszcza gdzieś na stosie...
Prawdopodobnie nie włączyłeś przerwania odbioru danych w USART - bit RXNEIE w rejestrze CR1. A poza tym . oczekiwanie w procedurze obsługi przerwania to nie jest dobry pomysł, a właśnie to robisz. Masz poniżej tablicę do zainicjowania USART z przerwaniem odbioru w STM32F0 - adresy rejestrów i ich zawartości - wychodzi to sporo krócej niż przy użyciu...
Może zbyt namieszałem. Zasadniczo chodzi po prostu o to jak stworzyć projekt w SW4STM, który nie zawierałby tych wszystkich śmieci z SPL i HAL i dało się pisać na rejestrach. Taki czysty podstawowy projekt pod rejestry z tylko niezbędnymi rzeczami jak w przypadku pisania na AVRy.
Spróbuj tak https://forbot.pl/forum/topic/20000-kurs...
(1 << 27) Tego nie będę rozszyfrowywał. I przy okazji nie mieszaj kodu HAL-a z rejestrami - w tch samych funkcjach - no chyba że dokładnie wiesz co te halowe robią na poziomie rejestrów (ja np poza kilkoma nie wiem i nie chce mi się grzebać) Procedurę masz opisaną w RM Reception using DMA DMA mode can be enabled for reception by setting the DMAR...
Przy okazji - w jakim dokumencie szukać tego typu informacji? Dodano po 1 No właśnie wszystko powłączałem - w rejestrach USART, w pliku stm32f10x_it.c itd. Tylko sama ta linia nie jest przyjmowana, coś jest nie tak. Dodano po 4 Chodzi mi o to, że wszystkie włączenia przerwań w NVIC, jeżeli są prawidłowe, to to co w nawiasie jest wyświetlane niebieską...
Olej te ich dziwaczne wywody na temat obliczania wartości do rejestru odpowiedzialnego za baudrate i po prostu wpisz do tego rejestru wartość równą PRĘDKOŚĆ_ZEGARA_UART / BAUDRATE. Te całe zabawy w część stałą i ułamkową właśnie do tego się sprowadzają, chyba ktoś kto pisał dokumentację miał nadmiar fantazji. Wg tegoż BRR powinien być równy 6666 czyli...
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,...
a czy da się to zrobić w bibliotece SPL? Zadam złośliwe pytanie - a czy da się sprawdzić w dokumentacji tej biblioteki albo w jej kodzie źródłowym? Przecież na pewno będzie szybciej niż pytać o to na forum, zwłaszcza że SPL jest już martwe i teraz ludzie albo używają HALa albo rejestrów. Zresztą - wystarczyłoby pewnie otworzyć odpowiedni plik nagłówkowy,...
No fakt, w kodzie powyżej jest tyle skomplikowanych odwołań do rejestrów, że zrozumienie ich zajmie na pewno więcej czasu, niż zrozumienie 10 parametrów konfiguracji HAL i z 5 potrzebnych do tego samego funkcji HAL oraz ich argumentów. ;) Dodajmy do tego niezwykle długi i skomplikowany kod inicjowania UART na rejestrach: RS485_UART->BRR = (SYSCLK_FREQ...
Niestety nie działa dałem tak jak opisałeś [syntax=c] volatile unsigned int ISR; // na poczatku programu void USART1_IRQHandler (void) { ISR = USART1->ISR; // 29.8.8 Interrupt & status register (USARTx_ISR) if (ISR & USART_ISR_TXE) // wysylanie danych jesli TDR jest puste { SendChar(10); USART1->ISR &= USART_ISR_TXE; // wyczyszczenie przerwania } }...
To jakiś cud, biorąc pod uwagę, że pokazany program nic przez UART nie wysyła. Czy zweryfikowałeś częstotliwość zegara procesora (np. miganie diodą w przerwaniu timera)? Na rejestrach BSRR i BRR nie wykonuje się operacji logicznych, bo nie ma to żadnego sensu.
Witam, Potrzebuję odebrać dane, które wysyłam za pomocą aplikacji bez bluetooth do uC STM32F4. Dane chcę odbierać przy pomocy przerwania usart. Dane z aplikacji wysyłane są w następującej postaci: Lx , x - liczba całkowita z zakresu <0;100>, np. L25, L100. Nie do końca wiem jak pobrać tą wartość chodzi mi w tym przykładzie o liczbę 25 , chcę ją...
Tak, jest wszystko włączone, pytanie czy wszystko w rejestrach timera jest jak trzeba. Chciałbym wykorzystać funkcje API dostarczone przez STMa, sprawdziły się dla innych peryferii (SPI, USART, GPIO, DMA...) jednak nie ma nigdzie przykładu konfiguracji timera w trybie compare.
1. Najpierw włączasz transmisję UART, a potem programujesz jej parametry - to niezbyt sensowne. 2. (Nieaktualne, racja, to jest na przerwaniach.) 3. Jeśli będziesz używał nazw symbolicznych bitów w rejestrach, być może ktoś sprawdzi, czy dobrze ustawiłeś te bity i znajdzie jakiś błąd. 4. Nie używaj operatorów |= i &= przy początkowym programowaniu peryferiali...
A do AVRlibc jakoś nikt nie zgłasza pretensji- dlaczego? Przecież też biblioteka. Z takich "kłótni" to się czasem można czegoś dowiedzieć. Np. gdy w końcu zacznę mysleć nad ARM- ostatecznie głupoty w C można pisać na dowolny procesor- to będę wiedział czego unikać. Mimo że jest książka oparta na tej bibliotece, jest jakiś kurs- też oparty na bibliotece-...
Witam. Pozdrawiam szanownych forumowiczów! Potrzebuję odebrać przez moduł btm222 do procesora konkretne dane. Dane zapisane są do pliku w postaci ciągu cyfr np. 345675534999888432 ( tu może być ich więcej ale będzie to wielokrotność. 3*6*X ). Teraz wysyłam ten plik programem realterm. Nie umiem ich odebrać uP w pożądany sposób: Aby rozdzielił te dane...
14.7456 MHz * 5 = 73,728 MHz, a nie 72 MHz. Jeśli zdefiniowałeś częstotliwość niezgodną z rzeczywistą to prędkość USARTA jest źle wyliczona przez funkcje, która to robi. W tym przypadku nie ma znaczenia czy korzystasz z biblioteki czy wpisujesz bezpośrednio do rejestru. Przetaktowanie mikrokontrolera to inna sprawa. Nie przekraczaj 72MHz.
jeszcze nie zapomnij o samym USARC-ie, który może byc w stanie błedu - bo obsluga DMA była właczona, ale DMA nić nie zabierało. A jeśli UART jest w stanie błędu to jak go usunąć? Zmodyfikowałem funkcję do takiej postaci jak poniżej. Czyli wyłączałem również UART i konfigurowałem ponownie, ale nic to nie pomogło. Dodano po 1 W HALu jest taka funkcja...
Dokumentacja: (lub wykorzystywać inną funkcję alternatywną z ową nóżką związaną) Tak, za wyłączenie tych bajerów odpowiada rejestr USART_CRx. Domyślne są wyłączone, więc nie ma się co przejmować. Można odpalić samo RxTx.
Panuje nawet pogląd, że LPC się programuje tak jak AVR bo się używa zapisów z rejestrami. Wiele ludzi twierdzi, że są prostsze niż STM. ST upakowało naprawdę wypaśne peryferia, ale też je się da programować jak AVR:) Najbardziej śmieszy opinia o tych "mega-wypaśnych" ustawień, jak to musi być skomplikowane, 32-bitowiec, ARM, 1000-stron manual i strasznie...
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.
Wiem , że stary temat, ale czemu koledzy nie używają mechanizmu wyszukiwania znaku w transmisji, która jest sprzętowa....opis w DS dotyczy Modbus, ale działa w normalnym trybie USART. Wpisuje się w miejsce rejestru ADD znacznik np. końca linii - 0x0D, a potem uruchamiamy przerwanie od Character Match. Druga możliwość to przerwanie po np.100 bitach na...
Próbuje napisać coś w stylu klasy ale stanąłem w miejscu. Klasa ma obsługiwać usart. W pliku H zadeklarowałem strukturę która przechowuje m.in. wskaźniki na funkcje, a w konstruktorze do tych wskaźników przypisuje funkcje. Plik h // usart type powinien być różny w zależności od obiektu który wywołał funkcję! //while (!(module->usart_type->SR & USART_SR_TXE));...
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...
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...
odnośnie wyłączenia i ponownego włączenia przerwania funkcjami: NVIC_EnableIRQ(IRQn_Type IRQn), NVIC_DisableIRQ(IRQn_Type IRQn) czy podczas ponownego włączenia nie trzeba znów wpisać odpowiednich wartości do rejestrów konfiguracyjnych? Ponieważ ostatnio próba wyłączenia i ponownego włączenia przerwania bez ponownego wpisu do rejestrów konfiguracyjnych...
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...
Witam, Mam mały problem z ustawieniem niestandardowej prędkości na STM32 powyżej 115200. Problem pojawia się zarówno przy użyciu funkcji niesocjalizującej jak i ręcznego skonfigurowania ( ręczne wyliczenie wartości dla rejestru BRR ). Nie ma problemu z różnymi transmisjami 9600, 28800 aż do 115200. Po tej wartości terminal milczy. Jedynie przy użyciu...
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, Mam pytanie do znawców środowiska ECLIPSE. Czy jest możliwość aby podczas debugowania mieć podgląd rejestrów peryferiów (np. USART) w innej formie niż wartość HEX? Dokładniej mam na myśli rozpisanie każdego z bitów i interpretację go na poziomie pełnionej funkcji, coś na kształt tego co można spotkać w środowisku Keil. Z góry dziękuję za pomoc....
Teraz część DMA wygląda tak CNDTR
Dzień dobry, Zacząłem naukę STM32 i mam problem z USART2. Chciałem się połączyć z hyperterminalem. Od strony terminala wszystko działa poprawnie (sprawdzone przez zwarcie tx i rx). Od strony stm-a wygląda to tak, że kiedy chcę odebrać jakiś znak, to program wisi na fladze oczekującej na odebranie znaku. Natomiast kiedy chcę wysyłać, to nic się nie dzieje...
Vcc? Zasilanie mam tylko od strony RS485 konwertera. A nowsze wtyczki kabli szeregowych nie przewidują specjalnie ich rozbierania (no i na mojej rozpisce PINów komunikacji szeregowej nie ma nic takiego). W kwestiach sprzętowo technicznych trzeba mi łopatologicznie napisać bo do niedawna jedyny mój kontakt sprzętowy to było włożenie wtyczki gdzie trzeba...
Po kolei: Faktycznie najnowsyz dwie BluePill, jakie mam (w tym jedna czarna), mają rezystor 10k do 3.3 V - znaczy "poprawione" przez Chińczyka. Stary oryginalny chiński schemat pokazuje 10k do 5V, na nowym jest 10k do 3.3V. Wtopa. Ciekawe, że obie działają poprawnie z USB. W seriach nowszych niż F1 problem nie występuje, bo układ podciągający jest w...
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()...
Nie wiem czy to ma znaczenie ale masz trochę inną sekwencję niż w dokumentacji 6. When using the DMA mode - Configure the DMA using DMA_Init() function - Active the needed channel Request using USART_DMACmd() function 7. Enable the USART using the USART_Cmd() function. 8. Enable the DMA using the DMA_Cmd() function, when using DMA mode. Poza tym czemu...
Cześć, Na inżyniera robię robota kroczącego na 12 serwomechanizmach, 4 nogi, taki pająk. Aby to ładnie zakodować chcę zrobić klasę serwo, klasę noga, klasę robot z odpowiednimi metodami aby kod był przejrzysty i jasny. Problem jest następujący: Klasa serwo ogółem działa, kompiluje się idealnie, aczkolwiek przy próbie użycia jakiejkolwiek zmiennej procek...
0. Z jakiego źródła jest taktowany UART2? Czy zmieniasz wartość BRR dla UART2 po zmianie taktowania? 1. Sprawdź profil zasilania ustawiony w rejestrach PWR. Domyślny to Scale 1, ale jeżeli projekt wygenerowałeś w CubeMX z zegarem HSE lub HSI, to możliwe jest inne ustawienie, które uniemożliwia pracę rdzenia z zegarem 180 MHz. 2. Zmiana Wait State wymaga...
Niebardzo - STM32 jest bardzo bezproblemowy w debuggowaniu, więc nie tutaj szukałbym problemu. Może podczas debuggowania (ze względu na nieco inne "okoliczności") nie wyskakują Ci errory, które w normalnych warunkach się pojawiają i blokują transmisję? Sprawdź, czy nie są poustawiane flagi od błędów w rejestrach SR. 4\/3!!
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...
(at)Piotr - teraz zrozumiałem co masz na myśli. A na jakiej częstotliwości powinien pracować i jak sprawdzić z jakiego korzysta? Próbowałem ustawić go przez wstawienie na początku maina następującą linijkę, ale nie pomogło. Bo zegara nie określamy przez #define, tylko przez wpisywanie odpowiednich wartości do rejestrów procesora. Jeśli masz oscyloskop,...
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....
Postanowiłem krok po kroku zobaczyć jak ta biblioteka wyznacza sobie zawartość rejestru BRR. Okazało się, że z poziomu pliku stm32f10x_rcc.c widać niepoprawną wartość stałej HSE_VALUE - zamiast 10 MHz była widoczna wartość zdefiniowana w pliku stm32f10x.h czyli 25 MHz, pomimo zdefiniowania 10 MHz w mainie. To jest o tyle dziwne, że preprocesor nie widzi...
stm32 rejestrach stm32 usart usart stm32
siedzeniem megane samsung kleić bęben fujitsu siemens wyłącznik
winols pobierz siemens tk76k573
Zmiana kolejności ulubionych stacji w Kia Sportage 5 Wymiana łożyska bębna w pralce Indesit WISL 65