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)...
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]
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...
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...
Usart działa dobrze. To co otrzymujesz do wartość acsii pierwszej liczby. Innymi słowy - terminal nie wysyła liczby, którą wpiszesz, tylko znak. W kodzie ASCII '0' = 48, '1' = 49, itd. Otrzymujesz więc tylko pierwszy znak jaki wyślesz. jak wyślesz z terminala 'p' to powinieneś otrzymać 112
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...
Podłączasz i nic się nie pali :) W większych modelach FT są USART1, 3-5
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...
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,...
sprawdziłem w dokumentacji. FIFO ustawiane jest w trybie z DMA, którego nie używasz. Więc ten aspekt odpada. Dla uporządkowania tematu. PC-t wysyła do stm32f1.. ramkę z 8 bajtów z 1 bitem stopu bez parzystości. 8 bajtów wyjechało i masz je w buforze odbiorczym pc-ta jako echo. 1. czy arm widzi tylko wybrane bajty ? 2. czy arm widzi wszystko? 3. czy...
Cały czas jednak nie ogarniam tego, dlaczego jeżeli chce pobrać dane z IrQHandler z tablicy gpsread do tablicy RxBuffer w funkcji niżej, to wgl nie moge skopiować danych nawet zwykłym for'em? [syntax=c]void USART1_IRQHandler(void) { //odbiór danych if((USART1->ISR & USART_ISR_RXNE) != RESET) { uint8_t data = USART1->RDR; gpsread[wpp] = data; if(++wpp...
Czujnik jest w porządku ponieważ próbowałem go uruchomić wcześniej na innym kodzie zawierającym delay'e i wszystko działało. Schemat to standardowe podłączenie pinów UART do linii danych i podciagnięcie tego do linni zasilania na płytce stykowej. UART skonfigurowany w trybie half duplex. [syntax=c] void SendBit(uint16_t bit) { if (bit==0) { while(!(USART1->SR...
Działa, w końcu działa w main dałem main Tzn jeżeli coś wysyła mi dane, to automatycznie pojawia się informacje o tym w rejestrze ISR? jeśli tak to czy powinienem w main sprawdzać tę flagę i włączać przerwanie od odbioru czy nie ma to znaczenia i od razu bez żadnego sprawdzania włączam przerwanie na odbiór a potem przerwanie samo się skasuje? Dzięki...
BlueDraco, dzięki za odpowiedź Rozumiem, że Twoje pytanie jest pytaniem retorycznym? Jasne - wszystkie linijki: USART_ClearIT_pendingBit() są bezsensowne w przerwaniach. Czemu różnicuję? Myślałem, szczerze to próbowałem bardzo dużo, żeby doprowadzić mój projekt do używalności - nawet próbowałem zmieniać priorytety przerwań ustawiając dla sensorów wyższe...
Dzięki za pomoc. Dodano po 3 To teraz powinien być czas na odbiór danych w przerwaniu od RX z MAX485 ? [syntax=c] void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE)) { } } [/syntax] Jeśli maina mam takiego: [syntax=c] int main(void) { /*uruchomienie zegara*/ konf_zegary(); /*Initialize GPIOA PIN8*/ GPIOA_Init(); /*Initialize...
Witam. Od dwóch dni próbuję odebrać dane z komputera na procesor. Próbowałem wysłać liczbę np: "11" odebrać ją na procesorze, dodać do niej liczbę np:"1" i ponownie wysłać na terminal (używam Realterm). Problem w tym, że nie potrafię odebrać danych z komputera. Zepsuty kabel ani układ nie wchodzi w grę bo jest echo po zwarciu maxa232 na pinach 11 i...
Faktycznie, rozwiązanie kwestii działania SPI było dosyć proste i po sprawdzeniu - SPI działa. Odczytuję zapisany wcześniej rejestr poprawnie. Teraz mam inny problem. Poniżej zamieszczam program z pliku main.c, w którym są dodane miejsca wysyłania kolejnych numerów przez UART i program zatrzymuje mi się po wysłaniu numeru 88. Nic więcej się nie dzieje,...
Wiem, że HAL ma dużo błędów ale łatwo w min skonfigurować zegar, peryferia. Nie trzeba używać funkcji HAL do obsługi np USART gdzie odbiór ma niedociągnięcia. HAL SPI dadaje sie do transmisji dużych bloków danych i prościej napisac dwie linijki używając rejestrów. I2C działa całkiem dobrze. Ja nie walczę dwa dni z np konfigurowaniem EXTI, których używam...
Hey, Dzięki za wskazówkę. Wiem, że temat był założony prawie 3 tygodnie temu, ale wcześniej nie miałem czasu odpisać. Problem był ciut bardziej złożony: Nadajnik (STM32F4) nadawał w trybie 9bit, kiedy pisałem ten kod, znalazłem notkę, że te 9 bit to 8bit danych + bit parzystości, jednak w odbiorniku STM32F1 powodowało to błędy parzystości. Oczywiście...
A to przepraszam. W tym przypadku (w trybie "circular") jedyny problem to to, że ten, kto te dane interpretuje, nie będzie wiedział, kiedy dane będą gotowe albo nigdy się na nie nie doczeka po pierwszym rozsynchronizowaniu. Za to parsować je może rzeczywiście bez problemu. Przy czym z tym trybem DMA nie jest tak wesoło - nie w każdym mikrokontrolerze...
Witam :) od miesiąca próbuję uruchomić komunikację po RS-ie komputera z mikrokontrolerem. Do USB podłączam konwerter FT232 następnie przez max232 do mikrokontrolera. Dodam że płytka z prockiem to discovery stm32. Konwerter i max działają - próbowałem już echa. Po podłączeniu mikrokontrolera i próbie wysłania wiadomości nic się nie dzieje. Odbiór info...
Witam, Próbuje skomunikować się z modułem SIM800 przy pomocy STM32F100RBT6B. Mam skonfigurowane peryferia i wysyłam dane do modułu. Niestety problem pojawia się przy odbiorze, Odbieram tylko pierwszą literę i nie wiem dlaczego. Wykorzystuje przerwania do transmisji UART. Komunikacja z poziomu PC <-> SIM800 przebiega bez problemów, prosiłbym o...
Witam! Fragmenty kodu: USART_InitStructure.USART_BaudRate = 57600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowCo... = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx...
Mam ta samą płytkę. Może pobaw się tak jak ja: wysył przez DMA, odbiór w przerwaniu oto co starczy: [syntax=c]void SYSTEM_DMAConfig() { DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel4); DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR); DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SYSTEM_USART1BufferTx; DMA_InitStructure.DMA_DIR...
Dzień dobry, Napisałem sobie program (korzystam z: STM32CubeMX oraz Atolli TrueStudio, mam BluePill STM32F103C8, port szeregowy podłączony za pomocą UART2 oraz konwertera FT232RL (ustawionego na 3,3V - bo w dokumentacji wyczytałem że te wejścia nie tolerują 5V) do portu USB, gdzie łączę się za pomocą BrayTerminal). Na BluePill mam wbudowaną jedną diodę,...
Nie wszystkie procki od ST mają to sprzętowo zrobione. Z F0 to mają STM32F0x1/STM32F0x2/STM32F0x8, podobnie jak rodzina F303. W rejestrze USART_CR2 jest pole ADD: "This bit-field gives the address of the USART node or a character code to be recognized". Oczywiście należy włączyć przerwanie od znalezionego znaku: USART_CR1_CMIE// Character match interrupt...
Zmieniłem zapis if(USART3 -> SR |= ~USART_SR_TC){ na if(USART3 -> SR &= USART_SR_TC){ i nadzień dobry program zachowuje się tak jak wcześniej po gdy przestawał działać poprawnie, a po zatrzymaniu breakepointem w HAL_UART_IRQHandler(&huart3); ląduje w HAL_UART_ErrorCallback wywołanego z: https://obrazki.elektroda.pl/9585406700_... Tropem...
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...
Witajcie, dziękuję za wszystkie posty. Większość okazała się bardzo pomocna. Swoją modyfikację chciałam zacząć od najprostszej zmiany, tj. zmiany konfiguracji modułu bluetooth poprzez komendy AT. Najpierw jednak chciałam przetestować odbiór danych z terminala. Znalazłam program i nieco go zmodyfikowałam, którego celem jest odebranie wpisanej danej w...
Przyczyn szukaj w błędnym kodzie ew. braku połączenia mas. Ani sensownej części kodu, anie schematu nie pokazałeś. Kod źle sformatowany i przez to nieczytelny, inicjowanie UART dziwne, nadawanie błędne, odbiór przez krótką chwilę a potem w krzaki (chyba, bo końca kodu nie widać). Niby jaki odstęp pomiędzy bajtami ma dawać taka pętla? Potrzebujesz odstępu...
Witam, Od pewnego czasu piszę moduł do komunikacji przez usarty, które łączą ze sobą dwa procesory (103ret6 i 103rbt6, co jednak nie ma znaczenia), połączenie pełne (tx->rx, rts->cts). Ze względu na możliwość występowania wielu innych przerwań oraz przy wymogu dużej przepływności przez usart zmuszony byłem zastosować komunikację z użyciem DMA, ale jednocześnie...
Zasady uniwersalne w mikrokontrolerach są proste: Jeśli do odbioru i transmisji jest to samo przerwanie, trzeba rozdzielić te funkcje, na samym początku sprawdzając przyczynę przerwania. Jeśli jest możliwe ustanowienie oddzielnych wektorów, to jest jeszcze lepiej. Transmisja po opróżnieniu bufora samoczynnie ma siebie dezaktywować. W przypadku zabawy...
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...
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...
Aktualnie najważniejsze pliki programu wyglądają następująco: main.c: [syntax=c]#include "main.h" //definicje stalych #define LINENUM 0x15 #define FONTSIZE Font12x12 #define LED1 GPIO_Pin_13 #define LED2 GPIO_Pin_14 #define PRZYCISK GPIO_Pin_0 //zmienne - definicje void Delay(__IO uint32_t time); extern __IO uint32_t TimmingDelay; unsigned short regVal;...
http://obrazki.elektroda.pl/8659817100_1... WSTĘP Inercyjna jednostka pomiarowa o 9 stopniach swobody do określania orientacji w przestrzeni. To mały projekt czysto edukacyjny, a jego celami były: -przypomnienie sobie jak sie pisze aplikacje na PC w Qt Creator -zapoznanie się z FreeRTOS i jego implementacja na procesorze -zapoznanie...
Poprawiłem post wyżej :D. I jeszcze raz ponawiam pytanie czy konfiguracja DMA jest poprawna do Twoich założeń? Start: programujesz ADC na jednorazową konwersję wszystkich kanałów z wyzwalaniem przez timer, timer do wyzwalania ADC i DMA do odbioru danych z ADC do bufora 1.
Witam. Skonfigurowałem UARTA w trybie odbioru poprzez DMA i mam problem z danymi tzn. Wysyłam 0x31 , 0x32, 0x33, 0x34 . Odbieram 0xd, 0x32, 0x33, 0x34. Ewentualnie 0x34, 0x31, 0x32, 0x33 . [syntax=c]USART1->CR1 = USART_CR1_UE; USART1->CR3 |= USART_CR3_DMAR; USART1->BRR = (72000000/ 9600); USART1->CR1 |= USART_CR1_RE ; DMA1_Channel5->CPAR = (uint32_t)&(USART1->DR);...
Witam, Komunikuje się z pewnym układem po RS232 przez DMA w specyfikacji tego układu mam że jak nie ma transmisji od 2ms, do 2.5ms do dla niego jest to EOP czyli End Of Packet. Da się jakoś połączyć jedno wejście do rs232 i do Timera, RS to AF7 a timer AF3. Czy do nóżki gdzie jest odbiór (USART2_RX PA3) mam połączyć jeszcze jedną wejście z procesora...
Dać się da, ale jeżeli ma być sprawdzane CRC to i tak trzeba będzie to robić programowo (CRC można liczyć sprzętowym modułem ale i tak trzeba programowo wyszukiwać początek ramki i wstawiać to do modułu liczącego CRC). Więc DMA pomoże jedynie częściowo. Najprościej było dy dane puścić po CANie, Tam jest całkowicie sprzętowe nadawanie i odbiór wraz z...
Witaj, Jestem gotów się założyć, że ten warunek jest zawsze niespełniony. Oczywiści miałeś rację, powinno być Pozatym skoro masz funkcję do wysyłania jednego znaku, to czemu nie użyjesz jej w funkcji wysyłania łańcucha, tylko piszesz ten sam kod drugi raz? Tak zostało po różnych kombinacjach. Docelowo oczywiście będzie to wyglądało normalnie :) Ciekawą...
Dopiero się uczę, ale tu tak piszą: https://stm32.eu/2017/11/28/3-stm32cube-... PS: Gdy w powyższy sposób obsługuję USART to jest OK, ale dla UART mam właśnie powyższy problem. Czy to może mieć wpływ?
Przejście na DMA uprości Ci komunikację i program. masz bufor cykliczny. DMA używasz po to aby za Ciebie wpisywał lub wyczytywał dane z rejestru UART. Po co robić to ręcznie. Lepiej skupić się na analizie danych. Zakładam że odbiór masz w przerwaniu. Zrób prosty bufor cykliczny o wielkości 256 bytes. GSM_communication.counter_RX - będzie bajtowy. Drugi...
Obsługa UART'a przez DMA czy (tylko) przerwania to najniższa warstwa stosu - to co zrobimy z danymi dalej zależy już od konkretnego przypadku. Przerwania i FIFO (o odpowiednim rozmiarze) znacząco odciążają CPU ale korzystając z DMA zostają tylko przerwania przy zakończeniu nadawania/odbioru. Poza przypadkiem, kiedy trzeba analizować każdy nadchodzący...
Witam Od jakiegoś czasu próbuję przeprowadzić odbiór danych z UART z wykorzystaniem DMA. Jeśli chodzi o konfigurację UART to jest ona przeprowadzona prawidłowo, ponieważ mogę dane wysyłać jak i odbierać ręcznie. Problem pojawia się przy próbie zaprzęgnięcia do odbioru DMA. Dane w buforze odbiorczym nie są aktualizowane (po zainicjalizowaniu bufora wartościami...
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. Szkole się w programowaniu zacnych STM32 i od razu na poczatku mam problem z funkcja printf(); Po wywołaniu tej funkcji procesor się zawiesza. Mam zrobiony proste nadawanie i odbieranie danych przez UART. Używam Keila MDK ARM V5 biblioteki HAL wygenerowane w STM32CUBEMX. Korzystam z płytki Kamami Zl27ARM. Na razie chcę uzyskać następujące efekty:...
Witam, Przesiadam się z STM32F103 na F051, a raczej ćwiczę sobie na obu tych mikrokontrolerach. Napisałem program na F0, w celu poćwiczenia sobie z konfiguracją interfejsu SPI. Zadanie jest takie SPI1 posyła dane, a SPI2 odbiera je zgłaszając odbiór. Interfejsy podłączyłem ze sobą SPI1->MISO z SPI2->MISO SCLK - SCLK MOSI - MOSI Niestety komunikacja...
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...
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...
ogarnąłem to w taki sposób - wszelkie komentarze mile widziane ;) nie śmiać się jeśli to mocno dookoła proszę :) [syntax=c]void HAL_UART_RxCpltCallback(UART_HandleTypeD... *UartHandle) { if(UartHandle->Instance == USART1) //ensure that interrupt comes from USART1 { if(USART1->RDR == 0xA3 && !marker) //if 0xA3 received and no correct frame receive in...
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...
Nie trzeba go przekonywać. Dla DMA jest wszystko jedno pod jakie adresy mają się zapisać dane. Ale nie jest mu wszystko jedno, w jakich okolicznościach ma to robić. W przypadku UART TX, DMA request jest generowany za kazdym razem, gdy flaga TXE==1 (jesli UART ma włączony DMA oczywiscie). Wtedy DMA transferuje wartość spod adresu podanego w CMAR do...
Witam, Postanowiłem opanować DMA. Zacząłem od USART'a i chciałbym to zrealizować. Moje problemy: 1. wysyłanie w konkretnym momencie(np. po naciśnięciu przycisku) 2. odbieranie danych 3. odpowiedni dobór DMA_BufferSize - wskazówki Konfiguracja: RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Perip...
odbiór usart stm32 usart usart stm32
pompa wspomagać renault laguna urwany kabel cewki wałka laserowej
sterownik lodówki indesit maksymalna głębokość pralki
Defro Evopell 12 - Problemy z Rozpaleniem Kotła Schemat i charakterystyka tranzystora C1470 (2SC1470)