Skocz do zawartości

[C] STM32 płytka Nucleo F030R8 - problem z UART


antMan

Pomocna odpowiedź

Witam

Po pierwsze proszę o wyrozumiałość, gdyż dopiero zaczynam programowanie STMów.

Mam problem z komunikacją UART z plytki Nucleo F030R8. Korzystam z biblioteki StdPeriph. Ogólnie robię jak w kursie STM32, jednak biblioteka StdPeriph dla F030R8 nie ma funkcji konfiguracji alternatywnych funkcji pinów (RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)😉 . Próbowałam robić to ręcznie do danego pinu, ale też nie działa to do końca. Nie ma również poleceń konfiguracji wejścia pływającego (próbowałam z GPIO_PuPd_NOPULL - bez skutku)

Mój kod:

#include "stm32f0xx.h"

void send_char(char c)
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); //czwkamy az bufor nadawczy bedzie wolny a nastepnie wysyłamy dane
USART_SendData(USART2, c);
}

void send_string(const char *s)
{
while(*s)
	send_char(*s++);
}


int main(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

GPIO_InitTypeDef gpio;
USART_InitTypeDef uart;

GPIO_StructInit(&gpio);
gpio.GPIO_Pin = GPIO_Pin_2; //TX
gpio.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOA, &gpio);

gpio.GPIO_Pin = GPIO_Pin_3; //RX
gpio.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOA, &gpio);

USART_StructInit(&uart);
uart.USART_BaudRate = 115200;
USART_Init(USART2, &uart);
USART_Cmd(USART2, ENABLE);

while(1)
{
	send_string("Hello world!\r\n");
}
}

Odpalam w RealTermie. Prędkości sie zgadzają wynik jaki otrzymuję jest następujący:

Uprzedzam wiadomości z prędkościami- w akcie desperacji próbowałam już na każdej możliwej prędkości transmisji. Może to być bardzo głupi błąd- bo zwykle właśnie takie popełniam

Link do komentarza
Share on other sites

A gdzie masz resztę konfiguracji ?

Np.

   USARTInitStructure.USART_WordLength = USART_WordLength_8b;
   USARTInitStructure.USART_StopBits = USART_StopBits_1;
   USARTInitStructure.USART_Parity = USART_Parity_No;
   USARTInitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USARTInitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
Link do komentarza
Share on other sites

Z konfiguracjami też próbowałam, i mam domyślne, więc nie trzeba ich ustawiać (jak są usatwione to nie ma różnicy w transmisji- a raczej jej braku)

Literówka równiez poprawiona, but still... Juz nawet zmieniłam, żeby było łatwiej, zamiast wysyłania zdania to wysyłam pojedynczy char i wciąż to samo

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Jeżeli te krzaczki co masz na terminalu przychodzą Ci przez cały czas to znaczy że wszystko jest ok tylko masz coś z synchronizacją. Różne bity stopu, parzystość, długość słowa.

Spróbuj takiej konfiguracji.

	GPIO_InitTypeDef tmp_gpio;
tmp_gpio.GPIO_Mode = GPIO_Mode_AF;
tmp_gpio.GPIO_OType = GPIO_OType_PP;
tmp_gpio.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
tmp_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
tmp_gpio.GPIO_Speed = GPIO_Speed_Level_3;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_Init(GPIOA, &tmp_gpio);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);


USART_InitTypeDef tmp_uart;
tmp_uart.USART_BaudRate = 9600;
tmp_uart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
tmp_uart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
tmp_uart.USART_Parity = USART_Parity_No;
tmp_uart.USART_StopBits = USART_StopBits_1;
tmp_uart.USART_WordLength = USART_WordLength_8b;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_Init(USART1, &tmp_uart);
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.