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.