Witam.
Próbuję odpalić program UART na STM32 – odbieranie danych z kursu. Po odpaleniu programu nie ma żadnych błędów, ale po naciśnięciu klawiszy nic się na terminalu nie wyświetla. Gdzie może być problem?
Przy wysyłaniu ciągu bajtów przez UART wszystko działało.
USART_BaudRate = 115200
jest ustawione takie samo w terminalu jak w kodzie
Korzystam z tego poradnika.
http://forbot.pl/blog/artykuly/programowanie/kurs-stm32-5-komunikacja-z-komputerem-uart-id8439
Cały kod:
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#include <stdio.h>
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"
void send_char(char c)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, c);
}
void send_string(const char* s)
{
while (*s)
send_char(*s++);
}
int main(void)
{
GPIO_InitTypeDef gpio;
USART_InitTypeDef uart;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_StructInit(&gpio);
gpio.GPIO_Pin = GPIO_Pin_2;
gpio.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &gpio);
gpio.GPIO_Pin = GPIO_Pin_3;
gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &gpio);
USART_StructInit(&uart);
uart.USART_BaudRate = 115200;
USART_Init(USART2, &uart);
USART_Cmd(USART2, ENABLE);
while (1) {
if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE)) {
char c = USART_ReceiveData(USART2);
switch (c)
{
case 'a':
send_string("Odebrano komunikat A!\r\n");
break;
case 'b':
send_string("Odebrano komunikat B!\r\n");
break;
default:
send_string("Nieznany komunikat:(\r\n");
break;
}
}
}
}
Używam stm NUCLEO F103RB.
Z góry dziękuję za pomoc.
Pozdrawiam