Z tą długością i negacją to nie mój pomysł, ale niezły. Właśnie tak to można traktować. Jeżeli kolejny bajt nie jest negacją poprzedniego, to przyjmujemy, że to nowa długość i czekamy, aż następny będzie negacją. Dodatkowo można narzucić ograniczenia na dozwolony zakres długości.
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) ??
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...
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...
W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz to wykluczyć, przed wysłaniem ramki do komputera wyślij cokolwiek do STM32, żeby ten zarejestrował adres IP i MAC w swojej...
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...
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);...
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++)...
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...
Witam, W taki sposób konfiguruje USART: aaaaa=100,bbbbb=2000 I chcę uzyskać: [syntax=c]int a = 100; int b = 200;[/syntax] Próbowałem się bawić z tą funkcją: [syntax=c]void USART1_IRQHandler (void) { u16 c; if (SET == USART_GetFlagStatus (USART1, USART_FLAG_RXNE)) { c = USART_ReceiveData (USART1); USART_SendData (USART1, c); while (RESET == USART_GetFlagStatus...
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ść...
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...
Ciężko będzie wybrać odpowiedni rozmiar tablicy. Trzeba będzie zwiększać / zmniejszać ją dynamicznie... Tylko to raczej nie problem bo miejsce gdzie używam ramkaodbierz jest właśnie w przerwaniu: USART1_IRQHandler(void) a robiłem próbę gdzie ciało tego przerwania za komentowałem, tym bardziej że gdy linia RX jest rozpięta to po jakimś czasie transmisja...
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,...
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ż...
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 Jak w temacie chcę połączyć dwa stm32 przez Ethernet ale bez PC, ustawić adresy statycznie, i wymieniać między nimi dane. W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz...
(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...
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);...
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...
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, 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...
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...
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...
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"...
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...
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...
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, 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...
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...
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...
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...
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;...
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(...
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 */...
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...
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ć...
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...
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. 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...
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...
Witam, Zrobiłem urządzenie w którym dwa procesory stm32f103 komunikują się między sobą poprzez USART na zasadzie Master - Slave. Urządzenie sobie pracuje poprawnie i po pewnym czasie (losowo raz po czasie np 1min, drugi raz po np 10min) w procesorze master zmieniają się stany bitów PEIE i RXNIE w rejestrze CR1 od USART3, więc wysyła on zapytania, slave...
https://obrazki.elektroda.pl/9580024500_... Poniżej opis i prezentacja , zaprojektowanego i wykonanego przeze mnie, zegara opartego na lampach VFD IV-17 . Impuls do wykonania zegara w dużym stopniu zainspirowany jest prezentacją wideo działania zegara Wiktor: https://www.elektroda.pl/rtvforum/topic3... Konstrukcja wykorzystuje...
Witam, od dłuższego czasu zmagam się z problemem. Mam pewną funkcję działającą na przerwaniu od USART'a która otrzymując pewną ramkę danych przechodzi przez switch i wykonuje odpowiednie komendy dla każdego z bajtów, z ów ramki. Czasami połączenie z urządzeniem się zrywa i ramka nie dochodzi w całości powodując, że procesor wisi mi na przerwaniu czekając...
usart ramka stm32 usart usart stm32
haier inverter twarde lutowanie technics potencjometr balans
Peugeot 5008 QUADLOCK, ISO, Mini-Quadlock – opis pinów wtyczki radia RD4, RD45, SMEG, NAC EARU Electric EAWCBT-J 16A – schemat podłączenia, konfiguracja Tuya, ochrona 16A