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...
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...
-> 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,...
Jechałem debugerem i nie wchodziło w SysTick_Handler... Kod poniżej: [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 72000000...
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) ??
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...
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);...
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, 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);...
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...
Spróbuje zrobić to na przerwaniach, chcę to zrobić jak najprościej bez zbędnej zabawy. Potrzebuję to do własnego użytku (automatyka domowa - on/off/jasnosc_led itp), nie jest system przemysłowy.
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...
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....
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...
Dostaje ramkę analizuje ją i odpowiadam na nią dopiero potem oczekuję następnej ramki Chyba, że jestem w błędzie i to robi się inaczej? Dostajesz dane wtedy kiedy nadchodzą a czy ich wówczas oczekujesz czy nie to już inna sprawa. Jak wygląda ramka którą posyłasz z PC?
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(...
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...
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...
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...
Zmodyfikowałem do takiej postaci i dalej sypie błędami, przy okazji gubi też ramki powrotne http://obrazki.elektroda.pl/7514503300_1...
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...
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, 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 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 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ć...
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...
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...
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...
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...
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:...
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...
Witam. Zmagam się z konfiguracją USART na rejestrach. Widziałem dużo rozwiązań na rejestrach - ale dotyczyły one odczytu pojedynczych znaków - ja chciałbym odczytywać łańcuch znaków. Inne rozwiązania bazowały na funkcjach bibliotecznych. Do tej pory efektem było odczytywanie pierwszej litery bądź ostatniej i wypełnianie nią buffora. Jak to zrobić żeby...
usart ramka stm32 usart usart stm32
volvo silnika ustawi jezyk polski canon eprom
urmet cyfral subwofer wzmacniacz
Renault Fenix 5.2 "Klepaczka" - Usterki i Diagnostyka Demontaż oczka inspekcji oleju w Suzuki GN125