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...
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.
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...
Najlepszy materiał, a zarazem jedyny który Ci będzie potrzebny, to "Reference manual" od ST. Naprawdę (; http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Zrezygnowałbym na Twoim miejscu z "kreatorów" i tym podobnych ułatwiaczy, bo potem okazuje się, że efekt jest odwrotny do zamierzonego. 4\/3!!
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!!
Zdefiniuj "nie działa". Nic nie odbiera? Bo w sumie to nie powinien. Żeby odebrać coś za pomocą przerwania należy te przerwania włączyć [syntax=c] NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp... = 0; NVIC_InitStructure.NVIC_IRQChannelSubPri... = 0; NVIC_InitStructure.NVIC_IRQChannelCmd...
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,...
1. Tak. 2. Nie bezpośrednio, można kombinować np. tak: struct S { typ costam; typ tab[1000][16]; };
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...
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".
Wyłącz przerwanie od TXE skoro nie chcesz wysyłać. 4\/3!!
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
Tak, próbowałem przeprowadzić ponownie całą konfigurację usart'a poczynając od odłączenia zegara w RCC->APB1ENR i ponownego podłączenia. I nic. Potrzebuję zresetować up i wtedy przeprowadzić nową konfigurację. Lecz to nie wchodzi w grę gdyż zmiana musi nastąpić w locie.
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.
Albert, już się wczytuje w to co wysłałeś na temat ITOA. Zwiększyłem buffory do 5 znaków. Kod jest na potrzeby prób więc wiem, że zakończenie wysyłania za pomocą while(1) jest co najmniej głupie, ale narazie skupiam się na otrzymaniu dobrego wyniku na terminalu ! [syntax=c]volatile float a,x,b,y =0; int c,d,e,u,p =0; volatile char tab_1[5]={0,0,0,0,0,0};...
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...
Dla mnie mało czytelne są te gotowe biblioteki STM32. To nie są funkcje z biblioteki STM32 przecież... Proponowałbym pinu ustawić na funkcję alternatywną, a nie na out/in. Ewentualnie RX może zostać na in, ale TX musi być "ALT". 4\/3!!
A to widziałeś? https://forbot.pl/blog/kurs-stm32l4-term... https://controllerstech.com/stm32-uart-7... https://deepbluembedded.com/stm32-1-wire...
[syntax=armasm]g_pfnVectors: .word _estack .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler /* External Interrupts */ .word WWDG_IRQHandler /*...
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...
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?
Witajcie. Dalej mam podobny problem. Używam STM32F407. Posiadam staram się obłużyć 3 różne USARTY (USART1, USART3 i UART4) wszystkie pracują w trybie asynchronicznym. Pod te usarty podpięte są następujące urządzenia: -USART1 - GPS z protokołem NMEA wysyłający dane co 1 sekundę -USART3 - datalink łączący płytkę z STMem z komputerem. -UART4 - akcelerometr...
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();...
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
Początek programu FreeRtos wygląda tak: /* Private define ----------------------------------------... #define LED_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LCD_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define USART_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE ) #define LED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) #define...
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++...
Czy przypisałeś odpowidnie linie portów do USART?
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...
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ę...
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?
Skonstruowałem sobie kabel, wygląda na to, że podłączyłem go poprawnie (posprawdzałem multimetrem, wszystko łączy, zwarć niby nie ma), niemniej jednak nie mam łączności ani w jedną, ani w drugą stronę (używam HyperTerminal i RealTerm). Czy mógłbym jeszcze poprosić o sprawdzenie kodu? Chciałem napisać najbardziej banalne wysyłanie/odbieranie bez przerwań,...
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
Aktualnie nie odwracam sygnału w komunikacji o czym pisaliśmy wcześniej. Jeśli nie odwracasz polaryzacji sygnału na linii REQ i łączysz STM32 i Multicall na wprost, to nie masz szans się porozumieć.
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ść...
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.
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
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...
hm im not shure. What abaut the configuration wizard with stm32_init.c - it doesnt work? Usart is working
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)?
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...
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...
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.
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...
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...
Można wysterować MOSFETa. *7002 to dość szybkie MOSFETy więc tym bardziej nie będzie problemów (oczywiście pod warunkiem że gdzieś indziej (po stronie Drenu/Źródła) nie spieprzysz projektu). No i ten model nie jest Logic-Level. Przy 3.3V się otworzy ale słabo. Więc do układu mocy się nie nada. Ale jako tranzystor małej mocy może pracować.
Da się - czytaj stan prosto z portu.
Zainstaluj CubeMx. Wygeneruj sobie kod inicjalizujacy i będziesz wiedział jak to jest zrobione. Nie wiem dlaczego pb11 jest dla Ciebie złe, ale jak będziesz miał Cuba i ustawiesz peryferia to bedziesz widzał wszystkie konflikty i możliwe alternatywne konfigyracje. Tu masz dla przemapowanych: (dla AC6) (wyciągnąłem tez niektóre makra dla jasności) [syntax=c]...
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?
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...
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.
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,...
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...
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.
Najpierw zdecyduj się, czy chcesz obsługiwać UART w przerwaniu, czy testować znaczniki poza przerwaniem. Proponuję zacząć od zwykłej obsługi z aktywnym oczekiwaniem, a kiedy ta ruszy - uruchomić przerwania. W obecnej postaci po włączeniu przerwania nadawania jest ono natychmiast zgłaszane, procedura przerwania wysyła bajt, co powoduje wyzerowanie znacznika...
A jak NVIC_PriorityGroup_0 to nie jest wyłączone? Dobra zaraz sprawdzę. Domyślne ustawienie to jest to z czwórką na końcu.
Witam mam problem z obsługą magistrali 1Wire a dokładnie z odczytem temperatury przez DS18B20, napisałem funkcje do podstawowej obsługi 1Wire, RESET działa poprawnie natomiast przy odczycie danych mam zawsze same 1. Dodam iż korzystam z płytki STM32DISCOVERY a czujnik szynę danych ma podciągniętą do 3,3V za pomocą rezystora 4,7K według noty katalogowej....
[syntax=c]RCC_APB2PeriphClockCmd(RCC_AHB... ENABLE);[/syntax] Zdecyduj się, czy konfigurujesz szynę APB2, czy AHB?
W tablicy wektorów zupełnie nic nie zmieniasz (jak zwykle) - system masz połączony ze sprzętem poprzez te 3 definicje: #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler Mam nadzieje że masz je w jakimś pliku dołączonym do port.c, np FreeRTOSConfig.h 4\/3!!
Chodzi o wyświetlanie Stringów przez USART? To na czas testów tylko. Jakiś pomysł?
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...
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.
GPIOA->AFR Proponuję się BARDZO dobrze zastanowić nad tym kodem (abstrahuję w tym momencie od tego czy 7 << 2 * 4 jest czytelne [nie jest]).
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,...
STM32 Discovery. Polecam F4 np. na początek. Niestety design płytki pod względem analogowym nie jest zachwycający. A co do bezawaryjności - w 99% zależy ona od użytkownika ;)
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...
przerwanie: [syntax=c]void USART1_IRQHandler() { if(USART1_SR_RXNE_bb) { RXD1_buffer[RXD1_head] = USART1->DR; RXD1_head = (RXD1_head + 1); if (RXD1_head == RXD1_tail) { // tutaj możemy w jakiś wygodny dla nas sposób obsłużyć błąd spowodowany // próbą nadpisania danych w buforze, mogłoby dojść do sytuacji gdzie // nasz wąż zacząłby zjadać własny ogon...
Witam! Używam STM32F103RBT6. Timer1 skonfigurowany jest na wyjście PWM z wyjściem komplementarnym (kanał 2 i 2N). Interesuje mnie tylko kanał 2N. Problem jest taki, że wyjście kanału 2 jest współdzielone na tym samym pinie z TX dla UART1. I tu pojawia się konflikt, gdyż jak jest włączony timer1 usart1 nadaje tylko w jedną stronę (potrzebuję komunikacji...
próbowałem uIP - jeśli mam adres statyczny to działa, ale DHCP za cholerę nie che ruszyć, telnet i proste www również. Ale jak uruchomić DHCP to nie mam pojęcia, zna ktoś dobrze stos uIP ?
Zacznij od zrobienia tego na pollingu, czyli w pętli while(1), bez przerwań, ale z poprawnym odczytywaniem flag TXE i RXNE przed zrobieniem czegokolwiek. Proponuje więc wrzucić do tej pętli coś takiego: [syntax=c]if ((USART3->SR & USART_SR_RXNE) != 0) { uint16_t x = USART3->DR; while((USART3->SR & USART_SR_TXE) == 0); USART3->DR = x; }[/syntax] Tym...
Witam Postanowiłem zapytać tutaj, ponieważ wydaje mi się że to odpowiedni temat. Uczę się programowania na bazie STM32. Teraz poznaje porty USART i pojawił się problem: Temat wydzieliłem, ponieważ nie ma nic wspólnego z poprzednim.
Co do propozycji timera to masz na myśli, żeby uruchomić timer, który jak widzę jest na schemacie niżej(a dokładnie parę multipleksowanych): https://obrazki.elektroda.pl/6873035400_... On zaczyna liczyć z częstotliwością powiedzmy 100 cykli na sekundę, po doliczeniu generuje przerwanie i robi pomiar przetwornikiem ADC? Tylko właśnie...
http://www.st.com/content/ccc/resource/t... tylko usart1 w f103
Z problemem poradziłem sobie w 90% stosując sztuczki z wpisami hook w pliku ".gdbinit" oraz dodatkowym wpisem do pliku konfiguracyjnego openocd dla eventu "old-pre_resume". Chodzi o użycie "cortex_m3 maskisr on/off". Dopiero najnowsza poprawka do OpenOCD 0.5.0 z 28 czerwca dodała automatyczne włączanie/wyłączanie bitu C_MASKINTS w Debug Halting Control...
Wyglądają dobrze. 4\/3!!
Na 100% jest błąd w programie. Na jakiej podstawie twierdzisz że wysyła 1, 2, 3 a nie 8 bytes? Czy potwierdziłeś to na oscyloskopie? Czy twierdzisz na podstawie odebranych bajtów w PC-cie (odbiorniku)? Czy twierdzisz na podstawie odebranych bajtów w STM32 (odbiorniku)? Może coś nadpisujesz?
Chyba tak jest, tutaj plik startup_stm32f10x_md.c [syntax=c]/** ****************************************... * (at)file startup_stm32f10x_md.c * (at)author Coocox * (at)version V1.0 * (at)date 12/23/2009 * (at)brief STM32F10x Medium Density Devices Startup code. * This module performs: * - Set the initial SP * - Set...
Witam, mam program, który po naciśnięciu klawisza na klawiaturze wyświetla dany znak w terminalu. W jaki sposób zmodyfikować program, żeby po ciśnięciu np. A przez mniej niż 10 sekund był wysyłany napis A, a po wciśnięciu A przez 10 sekund był wysyłany napis A10? [syntax=c] #include "stm32f10x.h" #include "stm32f10x_usart.h" #include <stdio.h>...
usart stm32 stm32 usart ramka stm32 usart string
uszkodzony radiobudzik escort skrzynki bezpiecznikow tokarka frezarka
uziemienie basenu łącznik krzywkowy podłączyć
Sony TA-F770ES vs TA-F707ES: Który wzmacniacz wybrać? Zderzak poliftowy a przedliftowy Toyota Avensis T25