STM32로 UART 통신을 하는 중에 질문이 있습니다.

익명 사용자의 이미지

NUCLEO-L496ZG-P 보드를 이용하고 있으며,
STM32CubeMX와 STM32CubeIDE를 통해 작성하였습니다.

우선은 간단한 기능들부터 테스트 해 보려고
HAL_UART_Tranmit부터 시험해 봤는데,
아무리 해 봐도 Tera Term에 아무것도 찍히지 않더라고요.

그래서 아래처럼 코드를 작성 후, 보드에 얹어 봤는데
파란 LED(LD2)가 정상적으로 깜빡이기에
일단 HAL_UART_Tranmit가 HAL_OK를 반환하고 있다는 건 확인되었습니다.

그런데도 막상 이를 이용해서 Tera Term에 "Hello, World!"를 찍으려고 하면
왜 아무것도 찍히지 않는 걸까요.
Tera Term에서의 포트 설정도 물론 아래와 같이
Baud Rate 115200
Data 8
stopbit 1
parity none
으로 동일하게 설정했습니다.

#include "main.h"
#include <stdio.h>
 
UART_HandleTypeDef huart2;
 
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
 
 
int main(void)
{
	HAL_Init();
	SystemClock_Config();
 
	MX_GPIO_Init();
  	MX_USB_HOST_Init();
  	MX_USART2_UART_Init();
 
	char data[] = "Hello, World!\r\n";
 
  	while (1)
  	{
		if (HAL_UART_Transmit(&huart2, (uint8_t*)data, 20, 100) == HAL_OK )
		{
			HAL_GPIO_TogglePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin);
		}
	HAL_Delay(1000);
	}
}
 
 
 
static void MX_USART2_UART_Init(void)
{
	huart2.Instance = USART2;
	huart2.Init.BaudRate = 115200;
	huart2.Init.WordLength = UART_WORDLENGTH_8B;
	huart2.Init.StopBits = UART_STOPBITS_1;
	huart2.Init.Parity = UART_PARITY_NONE;
	huart2.Init.Mode = UART_MODE_TX_RX;
	huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
	huart2.Init.OverSampling = UART_OVERSAMPLING_16;
	huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
	huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
	if (HAL_UART_Init(&huart2) != HAL_OK)
	{
		Error_Handler();
	}
}
익명 사용자의 이미지

UART2가 아니고 UART1이 아닌가요? (PG7,PG8)

익명 사용자의 이미지

STM32CubeMX에서 기본 보드(NUCLEO-L496ZG-P)를 선택하면,
PG7, PG8은 STLK_Tx, STLK_Rx로 되어 있어서
USART2를 선택해서 PA2, PA3으로 했습니다. (UART이므로 Mode는 Asynchronous 선택)

그래서 main.c 코드에서도
static void MX_USART1_UART_Init(void)
부분에 USART2(huart2)로 자동 생성되어 있습니다.

익명 사용자의 이미지

static void MX_USART2_UART_Init(void)
입니다.

나빌레라의 이미지

보통 이럴 때는 시리얼포트가 제대로 연결되었는지부터 확인해야합니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

익명 사용자의 이미지

시리얼 포트가 제대로 연결되었는지 확인하려면 어떻게 해야 할까요?
우선은 Tera Term에는 COM6으로 잡히고, 장치 관리자에서도 똑같이 잡혀 있습니다.

다만, HAL_UART_Transmit을 시험해 봤을 때는
HAL_UART_Transmit(&huart2, (uint8_t*)data, 20, 100)은 분명히 HAL_OK를 리턴하고 있으므로
일단 이 함수가 정상적으로 동작하지만, 데이터는 PC로 전송되지 않는 모양이고...

HAL_UART_Receive를 시험해 봤을 때는 PC로부터 아무런 데이터를 전송받지 못하는 모양이더라고요.
(Tera Term의 명령 전송 기능을 통해 시험하였습니다.)

제가 시리얼 통신은 이제 막 배우기 시작해서 차근차근 해 보려고
비슷한 예제들을 그대로 따라해 봤는데 생각대로 되지 않으니 답답하네요(...)
(https://blog.psangwoo.com/avr_arm/stm32/2017/11/01/nucleo_f103rb_serial-1.html)

처음이시니까... 의 이미지

처음이시니까... 다음의 두 가지 가능성이 있겠네요
1. nucleo와 연결은 usb cable만 있을 때
---> UART1으로 연결 해 보세요
2. UART2을 연결하기 위한 "Serial to USB"같은 보드를 이용하여 추가 USB 연결
---> PA2,PB10이 header에서 UART_A로 표현 되어 있는데... 바꿔 보는 것도...
---> PC(teraterm) 쪽에는 nucleo의 VCOM과 추가 보드의 VCOM이 두개가 생기는데 헷갈리지 않게 잘 연결 하시길..

나빌레라의 이미지

보드의 TX, RX와 PC에 연결한 시리얼포트(USBtoSerial이든 진짜 시리얼 포트든)의 RX, TX를 연결해야 합니다. 그라운드도 맞추고요.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

라스코니의 이미지

오실로스코프가 있으면 보드의 uart1, 2의 TX 라인을 한번 찍어 보세요. 어떤 pin에서 신호가 나오는지 확인할 수 있습니다. 신호 크기도 한번 보시고요.

익명 사용자의 이미지

많은 분들이 답변해 주셨는데 아직 명확하게 알지를 못해서
우선은 좀 더 공부해 보고 시도해 보려고 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.