Skocz do zawartości

Problem z reagowaniem terminalu na naciśnięcie klawiszy


Ksiina

Pomocna odpowiedź

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

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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?

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

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.

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.