Ten return w środku while(1) jest dosyć niezły... Dalej nawet nie patrzałem. Nie dziwne, że "Żadne rozwiązanie z innych tematów nie działa" jak się nie wie co się robi... 4\/3!!
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)...
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...
Kanal nadal nie ustawiony, zły kierunek transmisji.
Na wypadek, gdybyś nie zauważył: przy takich deklaracjach i treści procedury konfiguracji DMA, jakie masz obecnie, do rejestru adresu pamięci DMA wpisujesz wartość bajtową odczytaną z pamięci ze zmiennej TxBuf, rozszerzoną zerami do 32 bitów, czyli wysyłasz przez UART zawartość tablicy wektorów wyjątków.
Jeśli transmisja buforTx do PC idzie bez problemu to najłatwiej do tego ciągu "wrzucić" dane w postaci szesnastkowej. Z postu to nie wynika, ale domyślam się, że dla każdej zmiennej X, Y i Z są dane 16 bitowe - wyjdą po 4 cyfry dla każdej zmiennej.Sposobów istnieje wiele, przykładowy 1. wyłuskać cyfrę ze zmiennej 16 bitowej 2. przekształcić ją z zakresu...
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...
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!!
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...
Rozwiązanie jest zupełnie gdzie indziej... Wystarczy sprawdzać bit TC, a nie TXE. Te (i inne) sekrety są w stosownym manualu. 4\/3!!
He, he, he... Patrz na to: while (1); Nic, co jest dalej, nie ma szans się wykonać, więc kompilator eliminuje zbędny kod. ...A ponadto masz błąd w inkrementacji wskaźnika. idx = (idx + 1) % BUFSIZE; - to najprostszy poprawny zapis tego, co masz zrobić, chociaż nie zawsze daje optymalny kod.
To co wpisujesz do rejestru MOAR to jest "adres adresu" (wskaźnik na wskaźnik) a raczej nie o to Ci chodzi... Tym bardziej że w tym kontekście tab to zmienna lokalna, więc i tak nie zadziała jak trzeba. DMA1_Stream6->M0AR = (uint32_t)&tab; 4\/3!!
kardynalny błąd -> oczekiwanie na co, na TC==1 ? Oczekiwanie na cokolwiek w przerwaniu jest kardynalnym błędem. Przeciez w notce katalogowej zalecają poczekać po zakonczeniu transmisji na TC. Czy aby napewno piszą to w kontexcie przerwań, czy może poczekania przez wyłączeniem danego modułu peryferyjnego? Poza tym nie odpowiedziałeś na moje pytanie,...
Na 99% nie. Można kombinować z auto-reload i transmisją jednego bajtu, o ile uda się przekonać DMA, że docelowy UART jest pamięcią, a nie peryferialem i o ile będziesz miał pewność, że nigdy dane nie będą równocześnie nadchodziły w takim tempie, żeby zapchać nadajnik. Czyli: nawet gdyby się udało, to jest to rozwiązanie wysoce niepewne i zawodne. Co...
1. Tak. 2. Nie bezpośrednio, można kombinować np. tak: struct S { typ costam; typ tab[1000][16]; };
Wyłącz przerwanie od TXE skoro nie chcesz wysyłać. 4\/3!!
Podłączasz i nic się nie pali :) W większych modelach FT są USART1, 3-5
Bit RXNEIE włącza przerwanie od dwóch flag: RXNE i ORE (overrun) - patrz tabelka USART interrupt requests . Odczyt z DR kasuje RXNE. ORE jest kasowane przez (cytat z opisu bitu ORE): "an read to the USART_SR register followed by a read to the USART_DR register".
Globalne definicje przekazuje się przez kompilator, odpowiednimi parametrami. Powiem Ci w sekrecie, że wszelkie poszukiwania błędów w kompilatorze, szczególnie z takimi trywialnymi sprawami, są z góry skazane na śmieszność, tak więc to czy brnąć dalej w zaparte to już Twoja decyzja. Co z tego, że ty sobie w main.c zdefiniujesz, skoro pliki od UARTu...
Witam, Mam problem z komunikacją przez USART, będąc w debugu wykonując poniższą pętle krok po kroku (step into) wszystko jest ok, dane są wysyłane i odbierane. Natomiast po wciśnięciu run czy step over czasami zostanie wysłany i odebrany [Tx i Rx zwarte] jeden, maksymalnie trzy bajty(najczęściej liczba wysłanych jest o 1 większa) i hard fault, czasami...
To to samo jest
Rozwiązałem swój błąd wprowadzając: chwila = 0; while(!(USART2->SR & 0x80) && (chwila <= 2500000)) chwila++; chwila = 0; Dziękuję za pomoc. Jednocześnie mam pytanie w jaki sposób w locie zmienić baud rate mojego usart'a ? Czyli ustawiam częstotliwość br przykładowo na 4800, komunikuję się na tej częstotliwości z innym up, i nagle zachciewa...
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...
Witam, mam pytanie odnośnie portu USART w STM32. Projektuję płytkę, na której ma znaleźć się komunikacja po RS485. Chciałbym się dowiedzieć, czy włączenie linii RTS (CTS) portu UART będzie umożliwiało sprzętowe sterowanie przepływem na porcie RS485 (Master/Slave). PS. Oczywiście wiem, że sterowanie programowanie z użyciem GPIO też jest możliwe.
Ja RX ustawiam na input (obojętne czy floating czy z pull-up/down), ale ponoć na ALT push-pull też działa, choć nie sprawdzałem tego nigdy osobiście. Przyciski ustaw sobie na input pull-up/down, zależnie od tego jak masz je podłączone. Może być też input floating jeśli masz zewnętrzne podciąganie. 4\/3!!
Masz odpowiedź w poście #4 Albert
A to widziałeś? https://forbot.pl/blog/kurs-stm32l4-term... https://controllerstech.com/stm32-uart-7... https://deepbluembedded.com/stm32-1-wire...
Głupia sprawa... na stm32 nic jeszcze nie robiłem... nie mogę znaleźć w dokumentacji i internecie, a czasu mało... czy jeżeli używam interfejsu UART bez kontroli transmisji, to czy linie RTS i CTS (a także CK) tego interfejsu mogę używać jako standardowe linie IO (lub wykorzystywać inną funkcję alternatywną z ową nóżką związaną), czy raczej tak, czy...
właśnie tak pamiętałem ctrl + \ nie \ tylko / (ma być ten obok shift) Musi działać, ewentualnie masz zmienione skróty klawiszowe, albo coś przechwytuje ten skrót. Dodano po 49 Ktoś opisał to wczoraj tutaj, dziękowałem ale znikło bo były prace konserwacyjne. To byłem ja. Oddać mi proszę mojego posta, ;)
Pisałem gdzieś jak się je włącza, na co Freddie napisał, że są funkcje w CMSIS, które z resztą na forum też już wklejałem. [syntax=c]/** * (at)brief Enable Interrupt in NVIC Interrupt Controller * * (at)param IRQn The positive number of the external interrupt to enable * * Enable a device specific interupt in the NVIC interrupt controller. * The interrupt...
w RxData jednak zawsze znajduje sie wartość różna od tej co wysłałem z PC. Wysyłam np 100, otrzymuję 49. Wysyłam 10 otrzymuję także 49. a jak wyślesz 2xx to otrzymujesz 50?
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. Ja robię to tak: I. Potrzebne narzędzia: 1. System Workbench for STM32...
Dzięki za odpowiedzi i uwagi ! Na pewno nastepnym razem zwrócę na nie uwagę, ale szczerze mówiąc teraz zależy mi bardzo na czasie, żeby to jakoś posklejać, jak to się mówi jakoś na ślinę i żebym mógł trochę danych zebrać. (at)BlueDraco: Tu jest aktualny kod odbioru danych GPS: void USART1_IRQHandler() { if (USART_GetITStatus(USART_GPS,...
Ustawiasz DMAEN w ADC_CFGR1 przed kalibracją ADC, a powinieneś po jej zakończeniu.
Skąd wiesz, że ustawia się na 4800 skoro nie wiesz czy nadajesz? Ta magiczna funkcja UsartInit skądś musi wiedzieć na jakiej częstotliwości chodzi jego APB. Sprawdź czy nie ma tam definicji od RCC. U Ciebie powinno być 8MHz bo nie konfigurujesz nigdzie HSE ani PLL.
Spróbuj tak: [syntax=c]void startUSARTDMATransferTx(uint8_t * buffer) { DMA1_Channel4->CCR &= ~DMA_CCR1_EN; DMA1_Channel4->CMAR = (uint32_t)buffer; DMA1_Channel4->CNDTR = BUFFER_SIZE; GPIO_SetBits(GPIOA, GPIO_Pin_8); USART1->SR &= USART_FLAG_TC; DMA1_Channel4->CCR |= DMA_CCR1_EN; }[/syntax]
Odpowiedź A
Witam, Próbowałem na podstawie książki "Mikokontrolery stm32 w praktyce" uruchomić na STM32F107 transmisję z wykorzystaniem USART-a. Połączyłem Rx i Tx ze sobą i próbuję wysyłać a następnie odczytywać wysłane dane. Poniżej jest mój kod: int main(void) { SetSysClockTo72(); EnablePerypherialClocks(); ConfigureNVIC();...
Witam, Chciałem programować procesor STM32L073RZ przez USB - DFU. Mam zainstalowany STM32CubeProgrammer. Uruchamiam procesor w trybie bootloadrea i nie działa to na mojej płytce jak również na płytce NUCLEO. Programator rozpoznaje płytkę ale w momencie rozpoczęcia procesu - tak jakby procesor się resetował. Ten sam program - programator działa w trybie...
Resetuje komendą HAL_UART_Abort
Sprawdź czy jednak nie trzeba wysyła CR i LF. W dokumentacji jest taki przykład: “AT+SYNW=1234ABEF\r\n” Jak widać wysyłają zarówno CR i LF JarekC
Czy przypisałeś odpowidnie linie portów do USART?
Mógłbyś troche jasniej bo dopiero się uczę stm32
komunikacja pomiędzy dwoma STM32 poprzez RS485
Witam Nie bardzo rozumie gdzie nie możesz "ich czytać" w stm32 czy w PC. Bo u mnie jest chyba odwrotny problem. Ustawiam w procesorze uip_listen(HTONS(14001))... // iP ustawiłem na sztywno 192.168.20.201 teraz w PC ustawiłem 192.168.20.201 portNumber na 14001, i mogę wysłać dane z PC do procesora. Ale nie chce mi to iść w drugą stronę...
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ść...
Czytaj Reference Manual dla danego procesora. Czy masz ustawiony bit RXNEIE?
Ściągnij z mojej strony przykład dla STM32 (którykolwiek), to zobaczysz jak to jest zrobione i jak powinno być zrobione... http://www.freddiechopin.info/pl/downloa... 4\/3!!
Witam! Próbuję zaprogramować mikrokontroler STM32F107, aby współpracował z siecią. Najpierw chciałbym skompilować kod z przykładowym projektem dostarczonym do STM32 jako EthernetDriver, czyli stm32_eth_lib. Przykład napisany jest z użyciem stosu TCP/IP uIP. Całość kompiluje się bez żadnych błędów (ew. warningi) z użyciem kompilatora CodeSourcery G++...
Czołem, pytanie czy jest taka możliwość aby wykorzystać wewnętrzny timer USART'a przy połączeniu DMA do wyjścia z przerwania po określonym czasie?
Ja używam prędkości np. 125kbaud, 128kbaud, 250kbaud, 500kbaud i 1Mbaud i nie mam z tym żadnych problemów. I to na różnych procesorach od takich z 32kB do 1MB Flasha. Widziałem też że dużo ludzi w necie ma z tym problem i Ci ludzie używają do konfiguracji UARTa bibliotek od STMa. Ja ich nie używam. Wniosek? U Ciebie jest trochę inna sytuacja bo piszesz...
Nie wiem jaki tam jest układ ale taki mam konwerter->http://allegro.pl/konwerter-p... A sterownik Profilic 3.3.2.105
Witam Jak prawidłowo ustawić parametry USART w STM32F100 i STM32F103 dla transmisji: 8-bitów danych 1- bit parzystości EVEN 1-bit stopu Cały czas mam śmieci
Pewnie może, tylko jeszcze wyjście trzeba podwiesić do plusa przez jakieś 4k7.
Przejściówka ma sterownie 3.3V czy 5V?
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...
Witajcie uczę się programować ARMy i właśnie nastał moment gdy komunikaty pokazywane przez diody mnie już nie wystarczają. Ponieważ mam pod ręką Bluetooth HC05 (często w ATmega wykorzystywałem wiec podłączenie mam dobre) to właśnie na niego padł wybór. Niestety gdy staram się odpalić program, który odbierze mi znak i go odeśle wszystko się sypie i np....
Witam, Mam problem, mianowicie gdy nadaję z PC do procka np. znak "1" to otrzymuję "11" dodam, że odbieram w przerwaniu. Konfiguruję USART w stm w następujący sposób: [syntax=c]void USART_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GP...
Dziękuję za odpowiedzi. W moim wypadku chodzi o SPI / USART między STM32 i FPGA. Więc kłania się push-pull. Podejrzewam więc, że jeśli już zabezpieczać, to buforem. Czy to powszechna praktyka, czy jednak przesadzam i jestem wybitnym asekurantem? :D
Mam jakąś podstawowa bibliotekę z makrami peryferiów. Wiem że dane makro odpowiada bitowi w rejestrze statusowym i sprawdzam czy jest ustawione czy nie tą metodą zrobiłem już i2c i usart.
hm im not shure. What abaut the configuration wizard with stm32_init.c - it doesnt work? Usart is working
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...
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...
STM32L073RZ: 1034 +157 stron Masz problem z ADC. Czy w związku z tym rozwiązania problemu będziesz szukał w rozdziale o ADC (49 stron), czy może na wszystkich ~900 pozostałych (np. w rozdziale o USART albo SPI)?
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...
Witam, Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph z racji, że pracuję pod Linuxem i jest to chyba jedyny template jaki działa :) Problem pojawia mi się przy próbie wywołania przerwania od USART1. W pewnym fragmencie kodu ustawiam flagę przerwania: USART_ITConfig(USART1, USART_IT_TXE, ENABLE); Kod obsługi przerwania jest...
OK. Ja też jestem w pracy i nie zawsze mogę o tej porze coś robić. Ale dalej: Do testowego używania UARTA przyda się "podmienienie" standardowej obsługi funkcji printf na taką, która wysyła dane przez UARTA do naszej Windowsowej konsoli. Możesz to wpisac standardowo przed obsługą assert_failed() /** * (at)brief Retargets the C library printf function...
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
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?
W CoIDE obsługa NVIC jest schowana w "misc.h" z Repozytorium. Taka logika ;) A gdybyś od razu napisał, że korzystasz z STM32F4Discovery, to nie musiałbyś się tak zastanawiać. Przecież na tej płytce linia TX jest na sztywno połączona z VBUS portu USB i wyjściem układu kontroli zasilania na tym porcie, a linia RX jest na sztywno spięta z ID. Jeżeli przypadkiem...
Tak dokładnie to powinno być: if (USART1->ISR & USART_ISR_TC) GPIOA->BRR = 1u << DE_BIT; Coś mi dzisiaj klawiatura nie służy.
Chciałbym skonfigurować komunikację USART/UART między płytką STM32F769I-DISCO a komputerem z wykorzystaniem kabla USB, którym płytka jest połączona do komputera. Zestaw zgłasza się jako Virtual COM Port, ale nic nie wysyła jak się z nim połączę przez Tera Term. Trzeba się domyślać oo co chodzi, strzelam, że pewnie komunikacja pomiędzy komputerem przez...
Da się - czytaj stan prosto z portu.
To że w drugiej linijce ma znaczenie: [syntax=c] USART2->CR1 = USART_CR1_TE;// uruchomienie Tx USART2->CR1 = USART_CR1_UE;// zerowanie rejestru i ustawienie tylko tego bitu [/syntax]
Witam, mam taki problem, a mianowicie... Zrobiłem aplikację mobilną, która wysyła dane po UDP do ESP8266 Wi-Fi, a ten po USART do STM32, gdzie są zapisywane i obsługiwane. Czy jest sposób skonfigurowania ESP8266 (połączenie do sieci Wifi jak i połączenie z aplikacją po UDP) ? Dokładniej chodzi mi o to, gdy użytkownik dostanie całkiem nowe urządzenie...
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
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,...
Toolchain : C:\Program Files\GNU Tools ARM Embedded\4.9 2014q4 Debugowanie programu : http://obrazki.elektroda.pl/8776950400_1... Gdzieś w sieci wygrzebałem: In case that link ever disappears, what you have to do is ensure that your gcc command has "-Wl,-u,vfprintf -lprintf_flt -lm". This translates to: force vfprintf to...
Jak tanio to http://uk.farnell.com/olimex/stm32-p107/... Ilosc pwm sobie mozesz dowolnie zwiekszyc zewnetrznym ukadem przez i2c na ten przykad...
No to szukaj błędu w ustawieniach zegara - skąd bierzesz przebieg wejściowy, częstotliwość (sprawdź czy dobrze ustawiona w module startowym), wywołanie SystemCoreClockUpdate itp... Prosty test: zaprogramuj timer i procedurę przerwania od niego an miganie diodą z częstotliwością 1Hz i zmierz sekundnikiem czas np. 60 mignięć.
A nie prościej byłoby do obsługi 1-wire zaprząc USART? Wtedy masz góra jedno przerwanie/bit, a jeśli jest DMA to można całość zupełnie zautomatyzować.
Do BT wysyłasz komendy AT (jeśli moduł jest w trybie komend) lub dane (gdy jest "przeźroczysty") po USART. Poszukaj przykładów dla Arduino.
Czy pamiętałeś o włączeniu portów w ODPOWIEDNIM rejestrze APBENR? volatile nie ma nic wspólnego z AVR. Tego atrybutu używa się np. wtedy, kiedy zmienna modyfikowana przez obsługę przerwania jest testowana przez inny fragment kodu. Pokaż kod procedury przerwania, bo coś tam narozrabiałeś.
Nie ma się czemu dziwić, przeważnie możliwy MTU jest nieduży w porównaniu do PC.
Zmieniłem na podane przez Ciebie funkcje: [syntax=c]#include "stm32f4xx.h" #include <stdio.h> #include "stm32f4xx_spi.h" #include "main.h" #include "gpio.h" #define CS_0 GPIOE->ODR &= ~(1<<3); #define CS_1 GPIOE->ODR |= (1<<3); void spi_init( void ) { RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;...
Witam. Mam problem z UART-em. Bo po ustawieniu flagi transmisji, sprawdzam tą flagę i nie jest ustawiona. Kod: [syntax=c]int USART1_TxBuf(volatile char *buffer, int nbytes) { int i; if(nbytes>TXBUFSIZE) return 0; while(TxIndex != 0) ; for (i = 0; i < nbytes; i++) { TxBuf[i] = *buffer++; } USART_ITConfig(USART1, USART_IT_TXE, ENABLE); if(USART_GetITStatus(USART1,...
Zgadza się - tak właśnie się to robi.
Witam, Nie mogę się dogadać z tym układem. Widzałem już dużo przykładów ale nic mi to nie daje już sam nie wiem. Kod: *Ini [syntax=c] void czujnik_spi_ini(void) { RCC->APB2ENR|= RCC_APB2ENR_SPI1EN ; //wlacz spi1 taktowanie RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; //aktywuj i w porcie A RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN ; //aktywuj i w porcie...
Chodzi o wyświetlanie Stringów przez USART? To na czas testów tylko. Jakiś pomysł?
Chciałbym dowiedzieć się jak coś takiego mogłoby wyglądać, jak dogadać się z samym mikrokontrolerem tak aby w odpowiednim języku mnie zrozumiał. Reszta przyjdzie z czasem. Mnie sie wydaje kolega, że nie masz problemu z CRC tylko z samą transmisją danych po USART.
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,...
To niestety nie pomaga. Już próbowałem wszystkich kombinancji i nic. Support z waveshare strasznie lakoniczny, nie potrafią udzielić pomocy.
Nie korzystam z systemInit ani zadnej innej biblioteki, cały kod który mam jest napisany w 100% przeze mnie. Czyli dobrze założyłem, to 16Mhz, pytanie ktore dalej pozostaje bez odpowiedzi to co jest nie tak ? :( Chyba jednak nie cały. Nie napisałeś nic o środowisku - obejrzyj SystemInit(). Najbardziej nie tak jest to, że nie pokazałeś poprawionego...
Wyglądają dobrze. 4\/3!!
HSE_VALUE jest potrzebne funkcji SystemInit, poza tym w pliku "stm32xxx.h" masz coś takiego [syntax=c] #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ [/syntax] najlepiej dodaj do opcji kompilacji coś takiego "-DHSE_VALUE=(tu częstotliwość kwarcu w Hz"
Ta linijka wygląda podejrzanie: ADC1 -> SQR3 |= ADC_SQR3_SQ1|ADC_SQR3_SQ1_2; //CHANEL 6 SELECT A ta jest błędna, ale "czasem zadziała" ;) ADC1->SR &=~ADC_SR_EOC; W kodzie powyżej nie ma włączenia timera, a niewłączony raczej nie wyzwoli ADC.
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...
Procesor jest taktowany zewnętrznym generatorem 16MHz. Jeśli tak, to musisz mieć pewność że makro HSE_VALUE ma odpowiednią do tego wartość, bo domyślnie w SPL dla F1 jest zdefiniowane jako: [syntax=c]#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ [/syntax] Od strony programu nie ma możliwości sprawdzić jaka...
A gdzie masz włączanie przerwań od USART? Dodano po 7 Powinno być coś w stylu: NVIC_EnableIRQ(USART2_IRQn);
Witam Mam działający program, który za pomocą USART-a i bufora kołowego wysyła na terminal jakiś komunikat (tutaj Hello! ). Program ten prawidłowo działa na STM32F103, po przerobieniu na STM32F072 nic nie zostaje wyświetlane w terminalu. Kod programu na F103: [syntax=c]#include "stm32f10x_usart.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include...
usart stm32 stm32 usart ramka stm32 usart string
pokrywa samsung wyciągnąć radio philips wysyłania impulsów
Dobór rezystora rozruchowego do silnika SUg 200L4A Zanik świateł mijania w Toyocie Corolli 2009