Skocz do zawartości
Komentator

Kurs STM32 F1 HAL - #5 - komunikacja z komputerem, UART

Pomocna odpowiedź

Sorki za trywialne pytanie ale qrcze treminal mi nie smiga

czy wystarczy podłączone usb ta jak go programuj i w terminalu wybiorę com prze który programuje

żaden przykład nie lata

sorki mój błąd w ustawieniach

opanowane

Udostępnij ten post


Link to post
Share on other sites

@cyberluk to może pochwalisz się jak udało się rozwiązać problem? Na pewno ktoś w przyszłości skorzysta 🙂

Udostępnij ten post


Link to post
Share on other sites

aż wstyd się przyznać ale źle wybierałem port COM w terminalu 🙂

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Witam, czy aby korzystać z terminala wystarczy pobrać plik exe? Do czego jest ten zip?

 

 

Edytowano przez Pawpob
Rozwiazanie problemu

Udostępnij ten post


Link to post
Share on other sites

@Pawpob witam na forum 🙂

To czy wybierzesz exe czy zip nie ma znaczenia. Zip to spakowany exe, tak by plik przy pobieraniu zajmował mniej i pobrał się szybciej. Niektórzy też mają obawy przed pobieraniem "gołego" exe'ca.

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Póki co nie wymyśliłem nic innego niż odbieranie bajt po bajcie. Zadanie 5.2:

#include <string.h>
#include "stm32f1xx.h"

#define RX_BUFFER_SIZE 4	//String size + 1

UART_HandleTypeDef uart;

void send_string(char* s){
	HAL_UART_Transmit(&uart, (uint8_t*)s, strlen(s), 1000);
}

int main(void){

	SystemCoreClock = 8000000;
	HAL_Init();

	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_USART2_CLK_ENABLE();

	GPIO_InitTypeDef inout;

	/*PIN PA2 AS TX (ALTERNATE)*/
	inout.Mode				=	GPIO_MODE_AF_PP;
	inout.Pin				=	GPIO_PIN_2;
	inout.Pull				=	GPIO_NOPULL;
	inout.Speed				=	GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(GPIOA, &inout);

	/*PIN PA3 AS RX (ALTERNATE)*/
	inout.Mode				=	GPIO_MODE_AF_INPUT;
	inout.Pin				=	GPIO_PIN_3;
	HAL_GPIO_Init(GPIOA, &inout);

	/*PA6 AS RED - 1*/
	inout.Mode				=	GPIO_MODE_OUTPUT_PP;
	inout.Pin				=	GPIO_PIN_6;
	HAL_GPIO_Init(GPIOA, &inout);

	/*PA7 AS YELLOW - 2*/
	inout.Mode				=	GPIO_MODE_OUTPUT_PP;
	inout.Pin				=	GPIO_PIN_7;
	HAL_GPIO_Init(GPIOA, &inout);

	/*PA9 AS GREEN - 3*/
	inout.Mode				=	GPIO_MODE_OUTPUT_PP;
	inout.Pin				=	GPIO_PIN_9;
	HAL_GPIO_Init(GPIOA, &inout);

	/*UART2 CONFIG*/
	uart.Instance			=	USART2;
	uart.Init.BaudRate		=	115200;
	uart.Init.WordLength	=	UART_WORDLENGTH_8B;
	uart.Init.Parity		=	UART_PARITY_NONE;
	uart.Init.StopBits		=	UART_STOPBITS_1;
	uart.Init.HwFlowCtl		=	UART_HWCONTROL_NONE;
	uart.Init.OverSampling	=	UART_OVERSAMPLING_16;
	uart.Init.Mode			=	UART_MODE_TX_RX;
	HAL_UART_Init(&uart);

	/*VARIABLES*/
	uint8_t EndOfTransmissionFlag = 0;
	char str[RX_BUFFER_SIZE];
	uint8_t *ptr = (uint8_t *)str;
	uint8_t i = 0;

	memset(str, 0, strlen(str));	//Clearing buffer

	while(1){
		if(__HAL_UART_GET_FLAG(&uart, UART_FLAG_RXNE) == SET){
			uint8_t value;
			HAL_UART_Receive(&uart, &value, 1, 1000);
			*(ptr + i) = value;
			send_string(&str[i]);
			i++;
			if(i == RX_BUFFER_SIZE - 1){
				i = 0;
				EndOfTransmissionFlag = 1;
				send_string("\r\n");
			}
		}
		if (EndOfTransmissionFlag == 1) {
			if (strcmp(str, "on1") == 0) {
				send_string("RED ON\r\n");
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
			}
			if (strcmp(str, "of1") == 0) {
				send_string("RED OFF\r\n");
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
			}
			if (strcmp(str, "on2") == 0) {
				send_string("YELLOW ON\r\n");
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
			}
			if (strcmp(str, "of2") == 0) {
				send_string("YELLOW OFF\r\n");
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
			}
			if (strcmp(str, "on3") == 0) {
				send_string("GREEN ON\r\n");
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
			}
			if (strcmp(str, "of3") == 0) {
				send_string("GREEN OFF\r\n");
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
			}
			EndOfTransmissionFlag = 0;
			memset(str, 0, strlen(str));		//Clearing buffer
		}
	}
}

 

Ok, znalazłem trochę czasu i udało mi się zrobić odbieranie wielu bajtów na raz, zmiany w kodzie:

(...)
/*VARIABLES*/
	char str[RX_BUFFER_SIZE] = "";

	while (1) {
		memset(str, 0, strlen(str));		//Clearing buffer

		if (__HAL_UART_GET_FLAG(&uart, UART_FLAG_RXNE) == SET) {
			HAL_UART_Receive(&uart, (uint8_t *) str, 3, 1000);
			send_string(str);
			send_string("\r\n");
		}
		if (strcmp(str, "on1") == 0) {
			send_string("RED ON\r\n");
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
		}
		if (strcmp(str, "of1") == 0) {
			send_string("RED OFF\r\n");
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
		}
		if (strcmp(str, "on2") == 0) {
			send_string("YELLOW ON\r\n");
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
		}
		if (strcmp(str, "of2") == 0) {
			send_string("YELLOW OFF\r\n");
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
		}
		if (strcmp(str, "on3") == 0) {
			send_string("GREEN ON\r\n");
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
		}
		if (strcmp(str, "of3") == 0) {
			send_string("GREEN OFF\r\n");
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
		}
	}
(...)

 

Edytowano przez Rogal
Dodanie kodu z odbieraniem wielu bajtów na raz

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...