Komentator Napisano Luty 21, 2018 Udostępnij Napisano Luty 21, 2018 W poprzedniej części kursu STM32 nauczyliśmy się używać linii I/O do komunikacji z otoczeniem. Nadszedł czas na poznanie pierwszego interfejsu, który pozwoli na większą interakcję ze światem.UART posłuży nam do przesyłania komunikatów między STM32, a komputerem PC. UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.Przeczytaj całość »Poniżej znajdują się komentarze powiązane z tym wpisem. Cytuj Link do komentarza Share on other sites More sharing options...
dejmieno Luty 21, 2018 Udostępnij Luty 21, 2018 Nareszcie!!! Błagam dodawajcie szybciej artykuły z tego kursu 😉. Cytuj Link do komentarza Share on other sites More sharing options...
ps19 Luty 22, 2018 Udostępnij Luty 22, 2018 Pytanie od osoby, która pisze na rejestrach: UART_HandleTypeDef uart; uart.Instance = USART2; uart.Init.BaudRate = 115200; uart.Init.WordLength = UART_WORDLENGTH_8B; uart.Init.Parity = UART_PARITY_NONE; uart.Init.StopBits = UART_STOPBITS_1; uart.Init.HwFlowCtl = UART_HWCONTROL_NONE; uart.Init.OverSampling = UART_OVERSAMPLING_16; uart.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&uart); Rejestry (kod pod konfigurację wybranego uarta, ale chodzi głównie o linię z USART->CR1): enum { USART1_NR = 1, USART2_NR = 2, USART3_NR = 3, }; void UsartConfig(uint8_t USART_nr, uint32_t baud_rate) { switch(USART_nr) { case USART1_NR: RCC->APB2ENR |= RCC_APB2ENR_USART1EN; gpio_pin_cfg(GPIOB, 6, GPIO_MODE_AF_PP_2MHZ); //TX gpio_pin_cfg(GPIOB, 7, GPIO_MODE_IN_FLOATING); //RX USART1->BRR = CPU_FREQUENCY/baud_rate; //CLK/2/9600 -- //APB1/9600 break; case USART2_NR: RCC->APB1ENR |= RCC_APB1ENR_USART2EN; gpio_pin_cfg(GPIOA, 2, GPIO_MODE_AF_PP_2MHZ); //TX gpio_pin_cfg(GPIOA, 3, GPIO_MODE_IN_FLOATING); //RX USART2->BRR = CPU_FREQUENCY/2/baud_rate; break; case USART3_NR: RCC->APB1ENR |= RCC_APB1ENR_USART3EN; gpio_pin_cfg(GPIOB, 10, GPIO_MODE_AF_PP_2MHZ); //TX gpio_pin_cfg(GPIOB, 11, GPIO_MODE_IN_FLOATING); //RX USART3->BRR = CPU_FREQUENCY/2/baud_rate; break; } USART->CR1 = USART_CR1_UE | //usart_on USART_CR1_TE | //Transmitter enable USART_CR1_RXNEIE | //RXNE interrupt enable USART_CR1_TXEIE | //TXE interrupt enable USART_CR1_RE; //Receiver enable } Po co ustawiany jest parzystość, kontrola hardware`owa, długości słowa - skoro domyślnie są ustawione identyczne wartości ? Chyba lepiej uczyć pisać krótszy kod niż nadpisywać wartości rejestrów tym samym co już tam jest wpisane 😉 Strona 822 RM LINK dejmieno, jak chchcesz się faktycznie czegoś nauczyć to polecam oprócz kursów z forum zgodnie z dokumentacją biblioteki HAL pisać własne programy testować, debugować: LINK Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Luty 22, 2018 Udostępnij Luty 22, 2018 ps19, w biblliotece StdPeriph były dostępne funkcje ustawiające struktury danych domyślnymi wartościami. Był to odpowiednik konstruktora C++ i pozwalał na uzyskanie przewidywalnej zawartości zmiennej, którą przekazujemy do wywołania biblioteki. W bibliotece HAL te funkcje gdzieś się zgubiły więc można użyć memset do wyzerowania całej zmiennej, albo pracowicie wyspełnić wszystkie pola. Pisanie na rejestrach ma swoje zalety, nie będę się na ten temat kłócił, bo sam często wolę takie podejście - ale ten kurs bazuje na HAL, więc trzeba programować zgodnie z tym co ST dostarczyło. W każdym razie wpisanie początkowych wartości to niewielka cena za pewność otrzymanej konfiguracji. Wbrew pozorom czasem w rejestrze możemy mieć coś innego niż dokumentacja producenta podaje (miałem takie przejścia z układami Atmela - bootloader pierwszego poziomu nie sprząta po sobie i nie zawsze mamy to co się spodziewamy...). 2 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Lukaszm Luty 22, 2018 Udostępnij Luty 22, 2018 Ja mogę jeszcze dodać, że uzupełnienie wszystkich pól struktury ułatwia późniejszą modyfikację kodu, jeżeli chcemy jakieś ustawienie zmienić na 'niestandardowe'. Nie trzeba szukać w dokumentacji biblioteki dokładnej nazwy pola i listy dopuszczalnych wartości, tylko np. zmieniamy uart.Init.Parity = UART_PARITY_NONE; na uart.Init.Parity = UART_PARITY_EVEN; 1 Cytuj Link do komentarza Share on other sites More sharing options...
grizka Luty 22, 2018 Udostępnij Luty 22, 2018 a gdzie przerawnia a gdzie dma w usart ?? niby kolejny krok ale niesmak pozostaje Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Luty 23, 2018 Udostępnij Luty 23, 2018 grizka, ten kurs pokazuje jak zastąpić bibliotekę StdPeriph nowszą wersją, czyli Cube HAL. Przykłady i układ kursu pozostaje taki jak w wersji poprzedniej. Kurs nie omawia wszystkich możliwości biblioteki HAL, to raczej wprowadzenie do programowania STM32 oraz pokazanie jak zacząć. Jeśli to wywołuje niedosyt to nawet dobrze - może zachęci czytelników do dalszej nauki oraz rozwijania umiejętności programowania. Natomiast jeśli podczas czytania pojawia się niesmak, to radziłbym po prostu nie czytać. To darmowy kurs, nie ma obowiązku czytania, jeśli to nieprzyjemna czynność, lepiej tego nie robić. 2 Cytuj Link do komentarza Share on other sites More sharing options...
dejmieno Luty 23, 2018 Udostępnij Luty 23, 2018 UART jest podpięty do pinów PA2 i PA3, czyli to oznacza, że nie można normalnie korzystać z tych pinów? Nie mogę sobie skonfigurować pinu PA3 jako wejścia i podpiąć do niego przycisku? Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Luty 23, 2018 Udostępnij Luty 23, 2018 Mikrokontroler STM32F103 posiada kilka uart-ów, a każdy z nich może być podłączony z różnymi wyprowadzeniami. To że linie PA2 oraz PA3 mogą być podpięte do UART-a nie oznacza, że nie można ich skonfigurować jako zwykłe piny I/O. Jednak na płytce Nucleo są one fizycznie połączone z mikrokontrolerem programatora, więc podłączenie np. Przycisku może uszkodzić programator. Jeśli programator zostanie odłączony (przez rozłamanie płytki) lub wylutujemy odpowiednie zworki, możliwe będzie użycie PA2 i PA3 jako zwyłych pinów - ale jest wiele innych dostępnych bez komplikacji, więc może lepiej ten przycisk podłączyć do wolnych wyprowadzeń? 2 Cytuj Link do komentarza Share on other sites More sharing options...
jawa Marzec 9, 2018 Udostępnij Marzec 9, 2018 Różnice między F4 a F1 dla biblioteki HAL. Podczas pisania na F4 gpio.Mode = GPIO_MODE_AF_INPUT wygeneruje błąd, nie ma takiej stałej. Jest tylko GPIO_MODE_INPUT. Jak się nie skompiluje to nie jest źle, od razu wiadomo co nie tak. Ciekawe co się stanie, gdy migracja będzie w drugą stronę. Kod z F4 będzie miał gpio.Mode = GPIO_MODE_INPUT, na F1 się skompiluje, ale czy UART będzie działał? Cytuj Link do komentarza Share on other sites More sharing options...
pyszny21 Marzec 11, 2018 Udostępnij Marzec 11, 2018 Ja także zauważyłem tą różnice pomiędzy F4 i F1 jednak pomimo zmiany GPIO_MODE_AF_INPUT na GPIO_MODE_INPUT nadal uart nie działa 🙁 macie jakiś pomysł czy jest jeszcze ktoś ? pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 15, 2018 Udostępnij Marzec 15, 2018 pyszny21, _kurssprzet Cytuj Link do komentarza Share on other sites More sharing options...
wierczewski Styczeń 9, 2019 Udostępnij Styczeń 9, 2019 Da ktoś podpowiedź jak zrobić zad. 5.2. ? Nie mam pojęcia za bardzo pojęcia gdzie szukać. HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) zmieniałem wartość size, ale nadal odczytuje mi tylko 1 znak z klawiatury. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Styczeń 9, 2019 Udostępnij Styczeń 9, 2019 @wierczewski, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start: Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników. Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć? Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości. 50 minut temu, wierczewski napisał: Nie mam pojęcia za bardzo pojęcia gdzie szukać. Pokaż co konkretnie zmieniałeś i jak według Ciebie taka wersje programu miała dokładnie działać - naprowadzimy Cie delikatnie na rozwiązanie 😉 Cytuj Link do komentarza Share on other sites More sharing options...
wierczewski Styczeń 10, 2019 Udostępnij Styczeń 10, 2019 @TrekerJa zrozumiałem tą funkcję(hal_uart_receive) w ten sposób, iż parametr size określa rozmiar buforu do jakiego są załadowywane dane. Więc jeśli zwiększę rozmiar z 1 na większa wartość to zwiększę ilość znaków jakie mogę przesłać do niego. Aczkolwiek jak to teraz napisałem to jednak mylnie to zrozumiałem i tu chodzi o wielkość pojedynczego znaku. Tzn aby wykonać to zadanie muszę stworzyć pętle wykonującą się 3 razy aby wczytać do jakiejś tablicy char znaki, a następnie je porównać w switchu? Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!