juras Napisano Marzec 27, 2016 Udostępnij Napisano Marzec 27, 2016 Witam,próbowałem przećwiczyć moduł USART na zestawie NUCLEO F411RE. O ile wysyłanie ciągu bitów przebiegało bezproblemowo, napotkałem problem z odbieraniem czegokolwiek z terminala. Napisałem prosty program bazując na kursie STM z Forbota do wysyłania i odbierania danych i podczas próby wysłania odpowiednich znaków ("a","b",lub "c") nie otrzymuję oczekiwanej odpowiedzi. Sprawdziłem w karcie katalogowej czy skonfigurowałem odpowiedni bity do odbioru i to się zgadza. Czy ktoś móglby podpowiedzieć mi, lub naprowadzić mnie w czym może znajdować się problem? W załączniku zamieszczam kod programu i link do karty katalogowej z której korzystałęm. Dodam jeszcze, że korzytam z System Workbench for STM32. Z góry dziękuję za odpowiedź i pozdrawiam. datasheet #include "stm32f4xx.h" int main(void) { void wyslij_znak(char c) { while (USART_GetFlagStatus(USART2,USART_FLAG_TXE)== RESET); USART_SendData(USART2, c); } void wyslij_ciag(const char* s) { while(*s) wyslij_znak(*s++); } RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC, ENABLE); USART_InitTypeDef uart; GPIO_InitTypeDef gpio; GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_2; gpio.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_3; gpio.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOC, &gpio); USART_StructInit(&uart); uart.USART_BaudRate = 9600; USART_Init(USART2, &uart); USART_Cmd(USART2, ENABLE); while(1) { if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) { wyslij_ciag("znaki\r\n"); } if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE)){ char c = USART_ReceiveData(USART2); switch (c) { case 'a': wyslij_ciag("komunikat1"); break; case 'b': wyslij_ciag("komunikat2"); break; case 'c': wyslij_ciag("komunikat3"); break; } } } } Cytuj Link do komentarza Share on other sites More sharing options...
mike402 Marzec 28, 2016 Udostępnij Marzec 28, 2016 Nie jestem ekspertem ale może w funkcji switch daj na końcu jeszcze "default" i wyslij_ciag© to zobaczysz czy w ogóle coś odbierasz i ewentualnie co. Cytuj Link do komentarza Share on other sites More sharing options...
juras Marzec 28, 2016 Autor tematu Udostępnij Marzec 28, 2016 Niestety nic to nie dało. Próbowałem też z odsyłaniem pojedynczego znaku z pomocą funkcji "wyslij_znak", również bez rezultatu. Edit: W wolnym czasie poszukałem trochę na necie i dzięki znalezionym informacjom znalazłem rozwiązanie. Dodałem komendy: GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); Temat do zamknięcia. 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!