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,...
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)...
Kanal nadal nie ustawiony, zły kierunek transmisji.
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...
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...
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.
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...
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!!
Wyłącz przerwanie od TXE skoro nie chcesz wysyłać. 4\/3!!
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...
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.
Rozwiązanie jest zupełnie gdzie indziej... Wystarczy sprawdzać bit TC, a nie TXE. Te (i inne) sekrety są w stosownym manualu. 4\/3!!
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!!
A to widziałeś? https://forbot.pl/blog/kurs-stm32l4-term... https://controllerstech.com/stm32-uart-7... https://deepbluembedded.com/stm32-1-wire...
1. Tak. 2. Nie bezpośrednio, można kombinować np. tak: struct S { typ costam; typ tab[1000][16]; };
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".
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...
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...
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, ;)
To to samo jest
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!!
Podłączasz i nic się nie pali :) W większych modelach FT są USART1, 3-5
Czy przypisałeś odpowidnie linie portów do USART?
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...
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...
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?
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]
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.
Kombinowałem z softem na różne możliwe sposoby a okazało się, że winne było połączenie z układem ADM2582(...) Napisz proszę na czym polegało to feralne połączenie. Ja też miałem ostatnio przypadek “Hard Fault” z winy USART-a.
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...
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...
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 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 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...
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
Masz odpowiedź w poście #4 Albert
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();...
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...
Resetuje komendą HAL_UART_Abort
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)?
Odpowiedź A
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!!
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ść...
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...
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++...
hm im not shure. What abaut the configuration wizard with stm32_init.c - it doesnt work? Usart is working
komunikacja pomiędzy dwoma STM32 poprzez RS485
Pewnie może, tylko jeszcze wyjście trzeba podwiesić do plusa przez jakieś 4k7.
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...
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?
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 ?
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....
Mógłbyś troche jasniej bo dopiero się uczę stm32
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...
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...
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]
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 +=======================================...
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.
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
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.
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.
laptop masy mam połączone w przejściówce i w mikrokontrolerze
Przejściówka ma sterownie 3.3V czy 5V?
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...
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?
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...
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...
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]
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,...
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...
Chodzi o wyświetlanie Stringów przez USART? To na czas testów tylko. Jakiś pomysł?
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,...
Da się - czytaj stan prosto z portu.
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ć.
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ś.
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...
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.
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ę...
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);
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...
Pingi z pakietem 1400 dochodzą bez problemów (max to 1454). http://obrazki.elektroda.pl/7503654600_1... Bufor uIP ustawiony mam na 1500 (UIP_CONF_BUFFER_SIZE)
stm32 usart stm32 usart ramka stm32 usart string
ładowarka napięcie wkrętarka dzwon sprząc subiekt paragon
Jak dodać język polski w Nokia 2660 Flip? Objawy uszkodzenia sterownika LPG: diagnostyka i naprawa