Skocz do zawartości

Problem z reagowaniem terminalu na naciśnięcie klawiszy


Pomocna odpowiedź

Napisano

Witam.

Próbuję odpalić program UART na STM32 – odbieranie danych z kursu. W kodzie nie mam żadnych błędów, ale po naciśnięciu klawiszy nic się na terminalu nie wyświetla. Gdzie może być problem?

USART_BaudRate = 115200

jest ustawione takie samo w terminalu jak w kodzie

Korzystam z tego poradnika.

https://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

Raczej nie używam Tera Term, przy wysyłaniu ciągu bajtów przez UART wszystko działało. Próbowałem wcisnąć a i enter, ale nic to nie dało.

Czy to nie jest problem, że

GPIO_InitTypeDef

USART_InitTypeDef

mam na zielono w kodzie?

vzvmft.jpg

Mam zaznaczone biblioteki:

C Library

CMSIS core

CMSIS_Boot

RCC

CRC

GPIO

EXTI

I2C

ADC

USART

MISC

__________

Komentarz dodany przez: Treker

Czy to nie jest problem, że

GPIO_InitTypeDef

USART_InitTypeDef

mam na zielono w kodzie?

Nie, tak wygląda poprawna kolorowanie w tym środowisku. Nie masz uruchomionego terminala 2 razy lub żaden inny program nie blokuje komunikacji?

Nie mam uruchomionego terminala 2 razy i nic nie powinno go blokować, przy wysyłaniu ciągu bajtów przez UART wszystko działało. Naciskam litery na klawiaturze i nic się nie dzieje.

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...