Skocz do zawartości

[STM32] STM32 - NUCLEO F411RE - problem z odbiorem danych przez USART


juras

Pomocna odpowiedź

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;
}
}
}
}
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.