Kanal nadal nie ustawiony, zły kierunek transmisji.
1. Czy plik z ustawieniami zegara masz wygenerowany z narzędzia udostępnionego przez ST (plik xls z makrem)? Jeśli nie to to zrób. 2. W opcjach projektu powinieneś zdefiniować stałą określającą częstotliwość HSE w hercach [syntax=c] HSE_VALUE=8000000 [/syntax] 3. Sam nad tym spędziłem sporo czasu, zanim wykryłem brak tej stałej zdefiniowanej w preprocesorze....
Tu masz przykład DMA. Zrobione na szybko. Po przesłaniu dowolnej liczby znaków DMA się wyłącza. [syntax=c]void init_usart( void ) { RCC->APB1ENR |= RCC_APB1ENR_USART2EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; gpio_pin_cfg( GPIOA, 2, GPIO_AF7_PP_50MHz_PULL_UP ); gpio_pin_cfg( GPIOA, 3, GPIO_AF7_PP_50MHz_PULL_UP ); USART2->BRR...
Więc po pierwsze i po drugie połącz wyjście TX z wejściem RX. Jeśli otrzymasz odpowiedź to wtedy zajmuj się modułem. Jeśli nie zostaw moduł w spokoju i zajmij się normalną komunikacją. W zależności od wyników będziesz także wiedział o co pytać, a nie obligował forumowiczy do brnięcia przez cały Twój kod. Albert
1. W jaki sposób piszecie kod do obsługi peryferiów występujących pojedyńczo w mikrokontrolerze? Np RTC, LCD, RNG, czy CRC. Najzupełniej normalnie, czyli jako zwyczajną klasę. Jeśli jest tylko jeden taki układ peryferyjny, to w projekcie po prostu mam jeden taki obiekt. Z pewnością nie bawię się w żadne singletony czy klasę w której wszystko jest statyczne....
Niestety ale nikt z nas nie wie jakie masz ustawione taktowanie dla tej magistrali - to wie tylko magiczna funkcja stworzona przez ST. Nikt nie powiedział, że jest tam akurat 84MHz, tylko na pewno nie może być więcej. 4\/3!!
FEIFx: Stream x FIFO error interrupt flag (x=3..0) This bit is set by hardware. It is cleared by software writing 1 to the corresponding bit in the DMA_LIFCR register. 0: No FIFO Error event on stream x 1: A FIFO Error event occurred on stream x
Jednym z układów jest mikrokontroler STM32F407VGT6, który pełni rolę centralnego kontrolera lotu (Flight Control Unit – FCU). Podstawowe dane techniczne Rdzeń i wydajność CPU: ARM Cortex-M4F (z FPU – jednostką zmiennoprzecinkową) Częstotliwość: do 168 MHz DMIPS: ok. 210 DMIPS DSP: tak, rozbudowane instrukcje DSP Pamięć Flash: 1 MB SRAM: 192 KB (112...
To dalej nie jest dobry kod. Co, wg Ciebie, sprawdza poniższy warunek? Zamiast zerować bufor, zapewne wystaczy poprawnie sprawdzać długość. Zwracając message przez wartość kopiujesz ją jeszcze raz.
To niech teraz też będzie samo =, bo OR nie ma tu najmniejszego sensu a tylko może zaszkodzić. Tak samo OR nie ma najmniejszego sensu przy inicjalizacji rejestrów USARTa, bo niby po co chcesz zachowywać stare wartości? A jak tam jest właśnie jakimś sposobem ZŁA wartość? Wpisz po prostu do dwóćh rejestrów dwie gotowe wartości i tyle, bez żadnych ORów....
Witam Posiadam płytkę STM32F4 Discavery chciał bym uruchomić USART6 ale przesyła mi złe dane. Sprawdzałem już zegary ustawienia usart ale nic mi już nie przychodzi do głowy. Zegary ustawione są przy pomocy funkcji SystemInit(). Cały plik sytem_stm32f4xx.c generowałem przy pomocy narzędzia STM32F4xx_Clock_Configuration_V1.1.0 (w excelu). Chcę użyć USART6....
Chodzi Ci o to, że czeka w przerwaniu na bit gotowości??:P Właśnie się zastanawiam jak najlepiej programować przerwania (aby było dobrze prosto i czytelnie) więc rady mile widziane. Chciałem zrobić prosty programik co wyśle prawie to samo co odbierze, żeby sprawdzić czy konfiguracja usart jest poprawna. Ale temat poprawnego programowania przerwań jak...
To działa: [syntax=c] #define Port_USART3 USART3 #define Port_USART3_CLK RCC_APB1Periph_USART3 #define Port_USART3_TX_PIN GPIO_Pin_10 #define Port_USART3_TX_GPIO_PORT GPIOB #define Port_USART3_TX_GPIO_CLK RCC_AHB1Periph_GPIOB #define Port_USART3_TX_SOURCE GPIO_PinSource10 #define Port_USART3_TX_AF GPIO_AF_USART3 #define Port_USART3_RX_PIN GPIO_Pin_11...
Witam, wydawałoby się, że problem jest banalny, a mimo to już dzień nad nim spędziłem (a czas mi nagli bardzo). Moim zadaniem jest odczytanie wartości ADC i wysłanie przez USART do PC (do Hyperterminala przez konwerter RS232 ->USB). Ogarnąłem wysyłanie np. znaku "a", jednak wartość ADC to jakiś ciąg cyfr (chyba 4-cyfrowy). I nie wiem jak po konwersji...
Włączanei UARTa przed jego skonfigurowaniem to nie najlepszy pomysł, a właśnie tak postępujesz. Masz kod (a dokładniej - tablicę z adresami i wartościami rejestrów) na STM32F0 Na F4 będzie prawie to samo: [syntax=c]{&RCC->APB2ENR, RCC_APB2ENR_USART1EN}, // port setup {&RCC->AHBENR, RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOAEN},// GPIOC, GPIOA...
(at)Piotrus_999 Mam przejściówkę usb ->uart i w ten sposób sprawdziłem że np prędkości 19200, 9600, 4800 działają bo przesyła mi dobre znaki na terminal, natomiast gdy ustawię w stm32f4 discovery prędkośc 300 lub 1200 to w terminalu mam krzaki.
GPIO_PinAFConfig nie powinno być przed GPIO_Init, tak strzelam. Poza tym każdą strukturę do konfiguracji peryferiów zainicjuj wartościami domyślnymi np. tak USART_InitTypeDef USART_S; USART_StructInit(&USART_S); Podejrzyj w debugerze rejestry konfigurujące USART i GPIO i prześledź czy wszystko jest OK
A ja tak się zastanawiam po co męczyć się z timerami skoro usart w trybie halfduplex sie do 1wire nadaje idealnie?
Witam ponownie. Uruchomiłem USART na stm32f4 chodzi pięknie . Teraz testowo chce wysłać ciąg 1,2,3 z wykorzystaniem DMA i niestety pomimo moich starań ramka przesyłana jest tylko raz. W czym leży problem. [syntax=c] void usartSetup (void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // enable clock for GPIOD RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // enable...
Witam Używam płytki STM32F4 Discovery. Muszę odczytać sporą ilość danych, więc UART wydaje się jedynym rozsądnym rozwiązaniem. Poniżej kod, którego używam (sugerowałem się kodami z różnych stron). [syntax=c]#include "stm32f4xx.h" #include "stm32f4_discovery.h" #include "misc.h" // I recommend you have a look at these in the ST firmware folder #include...
Ja mam coś takiego: [syntax=c] #define APB1_CLK 42000000 #define BAUDRATE 115200 void init_usart( void ) { RCC->APB1ENR |= RCC_APB1ENR_USART3EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; gpio_pin_cfg( GPIOD, 8, GPIO_AF7_PP_50MHz_PULL_UP ); gpio_pin_cfg( GPIOD, 9, GPIO_AF7_PP_50MHz_PULL_UP ); USART3->BRR |= APB1_CLK / BAUDRATE; USART3->CR1 |= USART_CR1_TE...
a przy programowaniu z UART CAN zasmieca dane lecace z PC. No chłopie żeś powiedział. Nic niczego nie zaśmieci. Ale interfejs CAN wygra. Jedyna opcja to jednak sprzętowa. Bo nie zagwarantujesz wystarczająco szybkiego wysłania znaku 0x7f, by wygrał UART. Sorry zle zrozumialem, ze na tych samych pinach co USART ma wpiety CAN (czyli polaczenie elektryczne)......
To, co z HAL wymaga 30 linii, bez HAL zwykle wymaga 5..8. To tyle w kwestii szybkości pisania kodu. Np . zainicjowanie UART bez HAL: włączenie GPIO i USART - 2 linie, ustawienie nóżek - 2 linie (zapis do AFR i MODER), zainicjowanie UART - 2 linie (zapis do BRR i CR1) - razem 6 podstawień w C. Ile to zajmuje z HAL? Łopatologicznie wytłumaczyłem, na czym...
No i sprawa w pewnej części się wyjaśniła sama. :) Okazuje się, że do tej pory - jednak wbrew temu co twierdził Freddie - Flash Loader Demonstrator (wersja 2.2.0) nie obsługiwał żadnych nowszych układów STM32, w tym serii F-2. Wczoraj (!) na forum firmowym STM pojawiła się informacja, że na ich stronach można znaleźć nową wersję FLD w wersji 2.4.0,...
Parę przykładów DMA na STM32F bez SPL niedawno się tu przewinęło - szukaj. Włącz DMA w rejestrze AHBENR, a potem np. coś takiego: DMA1_Channel2->CMAR = (uint32_t)time; DMA1_Channel2->CPAR = (uint32_t)&USART1->TDR; DMA1_Channel2->CCR = 0;// disable DMA1_Channel2->CNDTR = sizeof(time);// no. of items // increment memory adress, mem->periph, enable DMA1_Channel2->CCR...
BlueDarco, a jakbym chciał mieć jednocześnie VCP i podpiąć pendrive? Wyczuwam tu mały problem. Co do bootloadera to niektóre modele mające port USB mają fabryczny bootloader po USB. Ale nie róbmy off-topicu, podsumowując: 1. Najszybciej jest dołożyć złącze USB do procesora mającego USB-Device i użyć odpowiedniego oprogramowania VCOM/VCP. Jedyna wada...
samych errat jest 41 No ale dla jednego modelu mikrokontrolera (tak naprawdę dla kilku <; ) jest tylko jedna errata. Zresztą dla praktycznie każdego mikrokontrolera errata jest osobnym dokumentem. Teza obalona (; Ale pomijajac to ze dokumentacja jest rozbita, czasami jej jakosc jest po prostu do d... Generalnie da sie zyc z tym ze czasem niepotrzebnie...
Witam staram się skonfigurować spi tak aby wybierać slave za pomocą stanu na pinie PE3. Aktualnie komunikacja działa jednakże niezależnie od stanu na zadanym pinie. Podczas gdy chce wylaczyc mozliwosc komunikacji i ustalam stan na pinie PE3 na wysoki gdy na poczatku funkcji read_spi() zmieniam stan na wysoki to po wyjsciu z tejże funkcji stan ustalony...
inicjalizacja /*--------------------------------------... * L3GD20 SPI *---------------------------------------... #define L3GD20 GPIO_BSRR_BS_1 #define L3GD20_SS_ENABLEGPIOA-> BSRRH |= (L3GD20) //Reset #define L3GD20_SS_DISABLEGPIOA-> BSRRL |= (L3GD20) //Set...
(at)gaskoin Jak by nie patrzec zegar, porty, jakis timer, dac, adc, dma, USART i masz juz znaczna czesc RM do przeczytania... Chodzi o to ze sa bardziej zlozone niz AVR-y PICe itp. i tych rejestrow trzeba wiecej poustawiac... a znajomosc dzialania jakiegokolwiek prostego procesora wiele ulatwia. Mozna zaczynac od zera ale trzeba poznac od podstaw wszytko...
A gdzie masz włączanie przerwań od USART? Dodano po 7 Powinno być coś w stylu: NVIC_EnableIRQ(USART2_IRQn);
Biblioteka STDPeriph jest martwa, więc lepiej ją zostaw i zainteresuj się HAL i CubeMx. Gdy program uruchamiam krokowo i jestem w petli for to dane się wysyłają. Za szybko ta pętla działa i dane za szybko są "wypychane". Należy odczekiwać odpowiedni czas za każdym razem. Regułą jest uprzednie sprawdzanie rejestru statusowego przed zapisem do rejestru/odczytem...
Znalazłem problem, aczkolwiek jestem bardzo zaskoczony. Błędem okazało się używanie transmitera z USART1. Kiedy USART1 i USART6 zamieniłem rolami okazuje się, że wszystko działa. Jedyne wytłumaczenie to to, że do PA9, pinu transmisji USART1 podłączona jest na płytce dioda wykrywająca zasilanie micro USB, przynajmniej ja to sobie tak tłumaczę, czy jest...
Cześć! Mam problem z usartem. Nie wiem gdzie mam błąd... Wysyła tylko "S" zamiast całe "SIEMA". Byłbym wdzięczny za pomoc. Z góry dzięki! [syntax=c]#include "stm32f4xx.h" #include "misc.h" #define READ_BUFFER_LEN 64 #define WRITE_BUFFER_LEN 256 char readBuffer[READ_BUFFER_LEN]; char writeBuffer[WRITE_BUFFER_LEN]; short rBufferEmptyIndex = 0; short rBufferBusyIndex...
Czyli w ten sposób jak bym chciał wykorzystać wszystkie 4 USARTy: [syntax=c] #include "stm32f4xx.h" #include "stm32f4xx_usart.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h" void init_USART1(void); void init_USART2(void); void init_USART3(void); void init_USART6(void); void init_USART1(void) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef...
[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 /*...
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...
Ale na pewno bufor nie ma 2 bajtów. Ma - jeden bajt od razu jest ładowany do "shift register", a drugi czeka w rejestrze USART->DR. Dopiero trzeci i kolejne się nie mieszczą i muszą czekać na zakończenie wysyłania poprzednich.
Witam, Próbuje skomunikować STM32F4-DISCOVER z modułem RN-171 po UART. RN-171 działa na 3,3V; STM32 na 3V. Masę mają wspólną. Generalnie wygląda, że działa, ale nie wiem co źle robię bo wygląda jakby STM32 był 'głuchy' na sygnał przychodzący. Na oscyloskopie wygląda to tak, że STM32 wysyła sygnał prawidłowo, a RN-171 na ten sygnał odpowiada mu tym samym...
Hej, Poprawny kod który działą, to ten ponizej. Mysle ze mozemy zamknac temat. void UART6_Configuration(void) { __HAL_RCC_GPIOC_CLK_ENABLE(); /* Enable clock to PORTA - UART2 pins PA2 and PA3 */ __HAL_RCC_USART6_CLK_ENABLE(); /* Enable clock to UART2 module */ gpio.Pin = GPIO_PIN_6 | GPIO_PIN_7; gpio.Mode = GPIO_MODE_AF_PP;...
Hej, Chciałem uaktualnić swój stary projekt, w którym używałem Atmegi162. Układ ma łączyć się z zewnętrznym urządzeniem za pomocą magistrali UART, o parametrach 8b danych, 1b stopu, parzystość "even". Obecnie próbuję zrobić te same operacje wykorzystując płytkę z mikrokontrolerem ARM - STM32F407Z (na płytce CORE407). Po paru minutach udało mi się skonfigurować...
Najtaniej zaprogramować można przez USART korzystając z fabrycznie wprogramowanego bootloadera. Jeżeli chodzi o programator/debuger - to tak, jak pisał ZbeeGin najprościej bedzie wziąć np STM8VLDiscovery. ST-Linki w tych wszystkich STM32x Discovery nie obsługują SWIM potrzebnego do STM8, tylko SWD.
Witam od dwóch dni mam problem z USART na stm32f4discovery. Otóż napisałem sobie prosty programik na bazie tego przykładu pod stm32f4discovery ze strony Freddiego Chopina, tyle że sam napisałem sobie konfigurację zegarów itd. Zrobiłem konfigurację USART 6, napisałem funkcję do wysyłania jednego bajtu oraz całego słowa i wrzuciłem sobie wysyłanie bajtu,...
Ogólnie co do płytek discovery, wszystkich modeli - zanim zaczniesz z czegokolwiek korzystać wydrukuj sobie z User Manuala płytki tabelkę (zwykle pod koniec dokumentu) i zaznaczyć na czerwono piny podpięte na płytce do czegoś tam - potem jak coś podpinam to pierwsze paczę czy nie jest na czerwono a jak jest na czerwono a chcę użyć to sprawdzam do czego...
Problem rozwiązany prz sprawdzaniu flagi TXE też brakowało średnika ;) działająca inicjalizacja i odczytywanie rejestru definicje #define LSI302DL GPIO_BSRR_BS_3 #define LSI302DL_SPI1_DISABLE GPIOE-> BSRRL |= (LSI302DL) //Set #define LSI302DL_SPI1_ENABLEGPIOE-> BSRRH |= (LSI302DL) //Reset #define LSI302DL_I2C1_ENABLE GPIOE->...
Oprócz wyżej opisanych kroków dodawales coś do includepatchs w konfiguracji? Masz tam coś? bo mi dalej się nie kompiluje bo oprócz warningow typu "warning format %x " są jeszcze errory tak jak by nie widział Gpio, usarta, Adc itp.
while ((UART4->SR & USART_SR_TXE) == 1){;} Jestem gotów się założyć, że ten warunek jest zawsze niespełniony. 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? Ciekawą rzeczą jest też brak jakiegokolwiek ograniczenia długości odbioru z uwzględnieniem rzeczywistego...
Od tego jest RM a nie biblioteki wątpliwej jakości.
Witam, napisałem sobie kod z wykorzystaniem bibliotek STM32 peripheral , w którym robię pomiar na potencjometrze za pomocą przetwornika ADC. Po zakończeniu każdego pomiaru mikrokontroler wchodzi w przerwanie, w którym chcę przesyłać wynik pomiaru na PC za pomocą USART. Niestety coś idzie nie tak, gdyż program wysyła co najwyżej 2 pomiary i potem się...
GPIOA->AFR Proponuję się BARDZO dobrze zastanowić nad tym kodem (abstrahuję w tym momencie od tego czy 7 << 2 * 4 jest czytelne [nie jest]).
stm32f4 usart konfiguracja usart stm32f4 stm32f4 usart wysyłanie
zepsuta ładowarka telefonu kuchenka elektryczna płyta kuchenki gazowe mastercook
Magiel AEG Miele – pedał nie działa, wałek się nie kręci – typowe usterki i diagnostyka Miele WSI863 WCS – czujnik TwinDos nie działa, błąd F0212, konserwacja i naprawa