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