Czy kiedykolwiek zdarzyło Ci się użyć terminu UART tylko po to, by zostać poprawionym przez innego inżyniera, że nie jest to UART, ale USART? W pewnych przypadkach oba te terminy są zamienne, ale w wielu innych używanie ich wymiennie jest niepoprawne. Przyjrzyjmy się, czym dokładnie są USART i UART, a także jakie są pomiędzy nimi główne różnice. Większość...
Witajcie, moją przygodę z STM32 zacząłem stosunkowo niedawno, praktycznie od samego początku staram się stworzyć "protokół" do bezawaryjnej komunikacji po USARcie, który wykorzystany będzie do transmisji danych z małego robota typu LineFollower. Nie mam większej wiedzy, ani doświadczenia z tej dziedziny. Stworzyłem trochę kodu na podstawie własnych...
Witam ponownie. Uruchomiłem USART na stm32f4 chodzi pięknie . Teraz testowo chce wysłać ciąg 1,2,3 z wykorzystaniem DMA i niestety pomimo moich starań ramka przesyłana jest tylko raz. W czym leży problem. [syntax=c] void usartSetup (void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // enable clock for GPIOD RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // enable...
-> BlueDraco Postraszyłeś tym DMA i teraz początkujący Kolega uczy się: "DMA jest trudne i złe, lepiej napisać to na przerwaniach". BŁĄD!! Po to jest DMA w prockach, zeby z niego korzystać, i odciążać rdzeń tu gdzie tylko się da. I tym sposobem moja konstrukcja mieli ciągły strumien z UARTa rzędu 230kB/s dekoduje, sprawdza poprawnosc, przetwarza,...
Według mnie, aby mieć inicjalizację danego peryferium w postaci pary osobnych plików, należy ustawić : Zakładka Project Manager -> Podzakładka Code Generator -> Ramka Generated files -> Oczko Generate peripherial initialization as a pair of '.c/.h' files . To jedna z tych opcji, które ja zawsze przestawiam właśnie w ten sposób i zawsze mam oddzielne...
Witam Skonfigurowałem UART-a w STM32 do współpracy z DMA i teraz mam pytanko czy jest jakiś łatwy sposób na generację przerwania nie po skompletowaniu określonej liczby znaków tylko po nadejściu konkretnego znaku (znacznik końca ramki) ??
Kod: [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" #include "stdint.h" #include "misc.h" #define CLK_FREQ 36000000 /* User defined function prototypes */ void GPIOA_Init(void);...
A więc działa. Gratulacje :) Docelowo chcę zrobić co innego: Muszę próbkować 4 kanały ADC1 w przemiataniu i wysyłać wartości po USART do komputera. Tylko, że kanał 4 DMA zajmuje się USART1 TX a kanał 1 ADC więc jeszcze nie mam pomysłu jak to połączyć. Kolizja DMA nie występuje, bo są różne kanały. Po prostu jeden poczeka na drugi. Jak najbardziej sensowne...
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...
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,...
Witam, Pytanie odnośnie komunikacji modbus RTU po RS232. Z Stm32f103 wysyłam zapytania na MAX485. Do urządzenia dochodzi pytanie bo sygnalizuje to diodą, oraz urządzenie sygnalizuje odpowiedź. Sprawdzałem po stronie TX (przed MAX485) za pomocą "SimpleTerm Gold" i ramka się zgadza, natomiast na RX jest cisza. Co może być przyczyną ? Tak wygląda mój main:...
Witam, Napisałem obsługę UARTA z odbiorem przez DMA. Dane odbieram z ESP8266, tutaj też odbiór działa, pierwsza ramka odbierana jest prawidłowo, ale następna już nie, ponieważ bufor przepełnia się i kawałek ramki jest na początku bufora i na końcu bufora i tutaj pojawia się problem w tym, że nie wiem jak poradzić sobie z tym aby ramka zawsze trafiała...
USART może zgłaszać koniec ramki. Warunek to odstęp pomiędzy bajtami nie dłuższy niż bajt https://msalamon.pl/odbieranie-uart-po-d...
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...
Teraz mam: [syntax=cpp] void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1,USART_IT_RXN... sie gdy bufor odbiorczy nie jest pusty { RxBuf[i++] = USART_ReceiveData(USART1); if(i>7){ USART1->CR1&=~(1<<2);// Odbiornik wylaczony USART1->CR1&=~(1<<5);//blok... przerwania odbioru i=0; j=0; for(l=0;l<=7;l++)...
Bufor cykliczny, inaczej też nazywany kołowym, to najlepsze rozwiązanie do tego co chcesz zrobić. Tym bardziej, że jak zaznaczyłeś danych będzie sporo. Każdy odebrany znak wpisujesz do bufora i przesuwasz wskaźnik zapisu o 1. Możesz to robić przez obsługę przerwania od portu szeregowego, albo możesz do tego wykorzystać DMA. Dlaczego bufor? Ponieważ...
(at)gaskoin Da się. To jest system pakietów z podziałem czasu. Ramka w urządzeniu jest co 1ms. Tak że się spokojnie da. Po za tym Composite Device do tego jest obsługiwany inaczej i nieaktywne w danym momencie praktycznie nie zabierają czasu. Zresztą nigdy się nie zastanawiałem ile można max ale w deskryptorze binterfaces jest 1 bajt więc teoretycznie...
Tak sie zastanawiam, po co dywagacje nad szybkością działania algorytmu liczącego CRC, skoro dane są wysyłane dość wolno po USART? Mowa o RS485 i komunikacji z PC. Nie sądzę, aby przekroczony został 1Mb/s (921600). Jak często będzie wysyłana ramka? Przypuśćmy, zed 10 razy na sekundę. Jaka różnica, przy 100ms, czy CRC jest liczone 10 czy 100us?
Witam W budowanym urządzeniu zapragnąłem wysyłać informacje diagnostyczne przez USART. Nie znalazłem żadnej informacji o kolejce FIFO znanej mi z AVR-ów - szkoda :cry:. Zmuszony zostałem do wykorzystania DMA. Konfigurując DMA musiałem podać rozmiar bloku pamięci do wysłania więc skorzystałem z operatora sizeof() dla struktury: [syntax=c]struct ramka_t...
Zmodyfikowałem do takiej postaci i dalej sypie błędami, przy okazji gubi też ramki powrotne http://obrazki.elektroda.pl/7514503300_1...
Jakieś dziwne zjawisko. Wszystko działało tz. w pętli pytałem urządzenie po modbusie a teraz jakieś dziwnie zachowanie . Tak jakby zawieszony procesor nic się nie wykonuje w pętli . Co może być przyczyną ? Całość poniżej : [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h"...
(at)Marek_Skalski Rzeczywiście w konfiguracji USART1 jest USART_WordLength_8b, USART_StopBits_1, USART_Parity_Even. Ale z tego co wiem to tylko w ten sposób można uzyskać komunikację z parametrami 7E1 (bo w urządzeniu odczytowym nie mogę zmienić parametrów transmisji) gdyż ten bit parzystości jest wliczany w ramkę stąd 8 bitów w konfiguracji . Dodano...
Witam. Chciałem zrobić ekstremalnie uproszczonego modbusa RTU Slave na STM32. Tz w przerwaniu od RX jeśli pojawi się adres mojego urządzenia (Slave) to odrazu wyślij ramkę w postaci: adres,funkcja,ilosc_danych,dane,CRC16. Czy z punktu widzenia modbusa stanowi jakiś problem to uproszczenie ? Dodano po 24 Działa :) Dodano po 33 Tylko pytanie dlaczego...
Witam, Zacząłem zabawę z STM32, kupiłem najtańszy moduł z procesorem STM32F103C8T6, programuje z użyciem STLink v2 w środowisku AC6 STM32 (eclipse) biblioteka StdPeriph. Prosta obsługa portów działa, kompiluje i debugguje poprawnie. Jednak jest problem z UARTem, ciągle łapie śmieci (realTherm pokazuje błąd ramki). Konfiguracja baudrate itd na PC i uC...
Witam, mam problem z zawieszaniem się freeRTOSa. Program grzęźnie w funkcji vListInsert void vTaskUSART3(void * pvParameters) { portCHAR i; vSemaphoreCreateBinary( xSemaphore_US3_O ); xSemaphoreTake( xSemaphore_US3_O, 0); xQueue3_TX = xQueueCreate( 32, sizeof( portCHAR ) );//32 xQueue3_RX = xQueueCreate(...
Witam, Mam taki banalny problem, a mianowicie używam do wysyłania danych przez USART DMA w trybie normal [syntax=c]// data transfer mode DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; [/syntax] No i chciałbym po złożeniu ramki kolejny raz wystartować transfer z buffora Czy muszę robić DMA_DeInit a potem DMA_Init czy jest jakieś lepsze podejście. No i jeszcze...
Chciałem odbierać dane o rożnej wielkości za pomocą USART'a. Robiłem to za pomocą funkcji [syntax=c] HAL_USART_Receive_TI(); [/syntax] oraz [syntax=c] void HAL_UART_RxCpltCallback(UART_HandleTypeD... *huart); [/syntax] próbowałem rożnych sposobów jak odbieranie pojedynczych znaków, zapisywanie ich do buffora i sprawdzaniu czy otrzymano ramkę, a następnie...
Witam. Próbuję odpalić komunikacje USART z PC na płytce nucleo STM32F302R8, z dokumentacji wynika, że USART2 jest podłączony z programatorem przez który można się komunikować z PC. Chyba wszystko dobrze ustawiłem a przynajmniej podobnie jak w poradniku właśnie z elektrody. Po wciśnięciu przycisku reset na RealTermie pojawia się "nul" czyli pusta ramka...
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...
Witam Zmagam się z problemem obliczania CRC na STM32F4. Problem polega na tym że mam ramkę danych 100 bajtową złożoną z 96 bajtów danych a na 4 ostatnich obliczona suma CRC za pomocą wbudowanego modułu. Dane wysyłane są poprzez DMA+USART. Również do obsługi CRC używane jest DMA. Chodzi o to że dane są wysyłane poprawnie i poprawne odbierane. Problem...
Mam następujące zadanie; stworzyć projekt na laboratoria z mikroprocesorów. Męczę się z tym już od początku semestru i szczerze nie mam pojęcia gdzie robię błędy. Liczę na moc internetu i oczywiście odpłatnie na pomoc. Pełna specyfikacja projektu: 1. Komunikacja z komputerem za pomocą interfejsu USART z buforem kołowym. 2. Zaprojektowanie i implementacja...
Witam, Gdy próbuje skonfigurować dwa USART i przerwania do nich powstaje konflikt. Wystarczy, że odłącze kabel od USART1 i wtedy wysłanie komendy do komputera wraca do normy. Definiowanie: [syntax=c]RCC_AHBPeriphClockCmd(RCC_AHBP... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_US... ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE);...
Ustaw AF dla obydwóch pinów i obydwa ustaw na push-pull. Wiem że to brzmi dziwnie dla pinu RX, ale tak właśnie ma być. USART3_GPIO->AFR[0] |= GPIO_AFRL_AFRL7; To jest źle skoro używasz pinów 8 i 9. DMA1_Stream3->M0AR = (uint32_t)&ramka_tx; DMA1_Stream3->M1AR = (uint32_t)&USART3->TDR; Adres &USART3->TDR powinieneś wpisać do rejestru PAR, a nie M1AR....
Problem polega na zaimplementowaniu łącza podczerwieni ZGODNEGO ze standardem IRDA między PC a mikrokontrolerem ze sprzętowym USART z en/dekoderem. Jako że trudno o coś gotowego i darmowego rozwiązanie od strony software oparłem o starą bibliotekę Pico-IRDA. http://web.archive.org/web/2005020413321... Sprzętowo - identycznie...
Podłączam się pod temat ponieważ tematyka ta sama i wcześniej korzystałem z wyżej zamieszczonych ustawień filtrów.... moje pytanie brzmi czy łącząc ze sobą linie canrx i cantx wychodzące z stm'a (przed połączeniem wiszą - wypięty transceiver) można w ten sposób zdiagnozować czy interfejs działa? W czym problem... otóż: Napisałem pełną inizjalizację...
Cześć, Od kilku dni próbuję uruchomić obsługę pewnego modułu samochodowego, sterowanego poprzez magistralę CAN. Obsługa tego modułu wymaga wysłania pewnego zapytania, a następnie odebrania 4 ramek CAN odpowiedzi modułu - łącznie trzeba odebrać 32 bity danych. Udało mi się uruchomić nadawanie zapytania oraz odbieranie odpowiedzi, jednakże trzecia ramka...
https://obrazki.elektroda.pl/2759406900_... 8-bitowe mikrokontrolery nadal można znaleźć w wielu projektach, ale dzięki nowemu, niedrogiemu 32-bitowemu z rdzeniem AMR Cortex-M0+ taktowanym 48 MHz — STM32C0 — firma STMicroelectronics dąży do wyparcia 8-bitowych jednostek. Co może się odbyć wskutek: „ograniczonego wpływu...
W STM32 bit parzystości wliczany jest do długości ramki. Jeśli więc ustawisz w STM32 długość 8 bitów i brak parzystości, to masz 8 bitów danych. Jeśli jednak ustawisz 8 bitów i jakąkolwiek parzystość, to w efekcie masz 7 bitów danych i bit parzystości. Jeśli więc chcesz uzyskać 8 bitów danych oraz bit parzystości, to musisz ustawić w STM32 długość ramki...
Witam, Programuje STM32F407 przy pomocy HAL ( STM32CubeMX ) i Keil uVision 5 . Stworzyłem komunikacje przez UART HAL_UART_RxCpltCallback wykona mi się dopiero po przyjściu 6 znaków Komunikacja UART potrzebna jest mi do implementacji interfejsu MODBUS. W interfejsie MODBUS jak czytam z pdfa "http://modbus.org/docs/Modbus_Applicati...
A jeżeli przy okazji same układy są tańsze, to po co przepłacać? No właśnie niekoniecznie. Jak kol. Albertb zauważył, jako argument na taniość ARM pokazuje się ARMy CM0, które głowy nie urywają. A już wspomniany powyżej STM kosztuje netto 33 zł, czyli jeśli ktoś naprawdę nie ma potrzeby go użyć, to taniej wyjdzie coś innego, chociażby CM0. Z kolei...
hmmm chyba sie nie myle bo co to jest jak nie fragment parsowania linii NMEA: header[0] = header[1]; header[1] = header[2]; header[2] = znak; if ((header[0] == 'G') && (header[1] == 'G') && (header[2] == 'A')) { new_ggaHeader_flag = 1;...
Działająca wersja ale z F1 i bez bibliotek: [syntax=c] void send_to_UART() { UART4->CR1 |= USART_CR1_TE; DMA2_Channel5->CCR &= 0xffffffff-1; // DMA_CCR3_EN; // disable (trochę wstyd) DMA2_Channel5->CNDTR = 20; // number of data to transfer DMA2_Channel5->CCR |= DMA_CCR3_EN; // enable } void UART4_init() { RCC->AHBENR |= RCC_AHBENR_DMA2EN; RCC->APB1ENR...
Całość kodu wygenerowałem za pomocą STM32Cube. Część odpowiedzialna za GPIO: [syntax=c]void HAL_ETH_MspInit(ETH_HandleTypeDef* heth) { GPIO_InitTypeDef GPIO_InitStruct; if(heth->Instance==ETH) { /*włączenie zegarów lini sygnałowych*/ __GPIOA_CLK_ENABLE(); __GPIOB_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); __GPIOE_CLK_ENABLE(); /* Peripheral clock enable */...
Druga sprawa dotyczy tego, że ramka dla zastosowanego wyświetlacza jest zawsze 9-bitowa. Natomiast jednemu pikselowi może odpowiadać 8, 12 lub 16 (jak dobrze pamiętam) bitów. Oczywistym jest, że praca w trybie 8 bitów na piksel zwiększa wydajność. Nie wiem jak to jest w przypadku AVRów, ale na STM32 użyłem USARTa, który ma właśnie 9 bitów (dwie linie:...
Witam ponownie, mam teraz niezwykłą zagadkę, tak więc posklejałem kawałek kodu który obsługuje USART + Ethernet - program polega jedynie na tym że jak odbierze jakąkolwiek ramkę Ethernetową to powiadomi o niej i wyśle przez RS-232 MAC address nadawcy i odbiorycy (przy czym tutaj kwestia estetyczna jest niedopracowana) - tak czy inaczej kod ten przetestowałem...
Witam Zastanawiam się jak można oszacować wydajność systemu DMA. Chcę użyć trzech kanałów DMA a nie chce mi się kontrolować i prawidłowo reagować gdy transmisja DMA się nie wykona. Chcę: - odbierać dane przez USART 20 bajtów co 20 [ms] (ramka z wykrywacza) - wysyłać dane przez SPI 2*504 bajtów co 50 [ms] (obsługa dwu wyświetlaczy z nokii 3310) - generować...
Chyba nie czytałeś moich wypocin. Gotowca Ci nie damy :) Czyli nie są to jednak 3 znaki a liczba trzyznakowa :) Tobie pewnie chodzi o to, żeby wpisać 8944784378437834 i odebrać to jako trzycyfrowe liczby w uC. Tak się nie da, bo ramka uart ma tylko 8 bitów danych więc maksymalną liczbę jaką możesz wysłać to 255. Musisz tą liczbę albo skleić sobie do...
Podpiąłem się oscyloskopem pod linię UARTU - mikrokontroler <-> modem i na TX (z punktu widzenia mikrokontrolera) mam w ramce dokładnie AT+\n\r czyli poprawnie wysłaną komendę AT, natomiast na lini RX mam w ramce "OK". Czyli mikrokontroler wysyłA poprawnie ale nie "odbija" w dalszym ciągu tego "OK" na uart6. HAL_GPIO_TogglePin jet wywoływana...
http://obrazki.elektroda.pl/3796073600_1... I Opis ogólny urządzenia: Chciałbym przedstawić mój projekt bazujący na mikrokontrolerze STM32 dokładnie na modelu STM32F11RET6 http://www.st.com/content/st_com/en/prod... Jest to sterownik dla urządzenia...
http://obrazki.elektroda.pl/4511398700_1... Choć na chwilę obecną to w zasadzie inteligentne oświetlenie + zestawy różnej maści czujników, acz pełznie we właściwą stronę. 1. Wstęp i motywacja Jakiś czas temu stworzyłem dwa projekty. Pierwszy - stacja meteo -> http://www.elektroda.pl/rtvforum/topic31... który w ciągu miesiąca...
usart ramka stm32 usart usart stm32
manta ładowanie głośnika corsa świece lexia interfejsu
przecinarka plazmowa sherman przecinarka plazmowa sherman
Sony CDX-5F611 Ford Focus Mondeo – schemat podłączenia, pinout ISO/Quadlock LG FFH-3030AD – dane techniczne, typowe usterki, naprawa, modernizacja Bluetooth