[SOLVED]STM32F411RE Problem z UART (string)

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: STM32F411RE Problem z UART (string)

Postautor: Antystatyczny » środa 19 paź 2016, 22:34

W USART_Config masz taką inicjalizację modułu:

Kod: Zaznacz cały

 USART_InitStruct.USART_BaudRate = 230400;                                      //Predkosc transmisji w bps

  USART_InitStruct.USART_WordLength = USART_WordLength_9b;                     //Dlugosc dlowa danych

  USART_InitStruct.USART_StopBits = USART_StopBits_2;                          //Bity stopu (1 bit)

  USART_InitStruct.USART_Parity = USART_Parity_Even;                             //Bit parzystosci (wylaczony)

  USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Sprzetowa kontrola przeplywu wylaczona

  USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 //Tryb pracy (odbior i nadawnie)


...gdzie widać wyraźnie, że korzystać z 9 bitowej długości słowa, natomiast w handlerze masz taki kwiatuszek:

Kod: Zaznacz cały

register char data;

oraz:

Kod: Zaznacz cały

data = USART_ReceiveData(USART2);    //Odczyt danej automatycznie kasuje flage przerwania


I tutaj odpowiedz sobie (i nam) na dwa pytania:
1.) Czy typ char jest u Ciebie traktowany jako unsigned.
2.) Czy jeden odczyt z rejestru DR wystarczy, by odczytać wszystkie 9 bitów słowa zawierającego dane.

PS. Komentarze w inicjalizacji nie zgadzają się z kodem... Nie wiem czy się walnąłeś w polach struktury, czy zapomniałeś o aktualizacji komentarzy.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: STM32F411RE Problem z UART (string)

Postautor: Antystatyczny » środa 19 paź 2016, 23:38

No dobra, trochę doczytałem w RM i wygląda na to, że ta konfiguracja może być poprawna, ale pytanie o typ "char" jest wciąż aktualne.

Masz ustawioną długość słowa 9b, bo dodałeś bit parzystości. Jeśli zauważasz błędy FE, to przede wszystkim sprawdziłbym ustawienia w programie "terminal". Nie tylko baudrate, ale również długość słowa, parzystość i bity stopu. Jeśli wszystko jest ok, to zmniejsz baudrate do 9600, by wykluczyć ewentualne zakłócenia. A właśnie, jakiego programu "terminal" używasz?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: STM32F411RE Problem z UART (string)

Postautor: Antystatyczny » czwartek 20 paź 2016, 09:55

rezasurmar pisze:niestety próba przeniesienia tego na STM32F411RE kończy się zacinającym odbiorem, procesor idzie w maliny, czasem odbierze jeden znak


a teraz piszesz, że
rezasurmar pisze:Próbowałem na dwu róznych programach, odbiór działa bez zarzutu


To pewnie jakiś skrót myślowy, ale prawdę mówiąc nie wiem już czy działa, czy nie (ten odbiór).
Zastanawia mnie trochę ta odchyłka między zakładanym baudrate, a otrzymanym. To jest prawie 8kHz różnicy... Poza tym nie odpowiedziałeś, w jaki sposób jest u Ciebie traktowany typ char. Teoretycznie, nawet gdyby był traktowany jako signed, nie powinno mieć to znaczenia, bo litery i cyfry są poniżej wartości 127, ale już się czepiam wszystkiego, bo nie widać jakiegoś oczywistego błędu.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości