본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/드론

[STM32 - 자작드론개발] UART 디버그 포트 생성

by 베니스상인 2019. 10. 12.

 

UART 포트는 PC와 연결하여 터미널로 메시지를 수신하거나 제어 명령을 전달하여 간단한 제어를 하기에 적합하다. 이번 포스팅에서는 디버그용 UART를 연결하고 메시지 송수신 테스트를 할 예정이다.

 

1. UART 드라이버 설치

UART 칩셋은 여러가지가 있는데 본인이 사용할 모듈은 HC-340이다. 

블루투스 UART와 블루투스 USB를 페어로 사용한다.

이 모듈은 UART 연결을 블루투스 무선으로 전송해주고 호스트 쪽은 UART로 연결할 수 있다.

무선이기 때문에 기체가 어느정도 떨어져있어도 되고 나중에 동작시험할 경우에도 편리한 점이 많기 때문에 이 모듈을 사용할 예정이다.

 

이 제품이 아니더라도 UART 블루투스 모듈을 검색하면 여러가지 제품이 있으니 구매해서 사용하면 된다.

 

PC에 사용하는 모듈은 USB타입이어서  USB를 연결하면 드라이버가 자동으로 설치된다. 정상적으로 설치되었으면 장치관리자에서 아래와 같이 COM포드가 할당되어있다.

 

장치인식이 되지 않는다면 인터넷에서 사용자의 운영체제에 맞는 CH340 드라이버를 다운로드 받으면 된다.

드라이버는 아래 사이트에 받을 수 있다.

 

http://sparks.gogo.co.nz/ch340.html

 

CH340 Drivers for Windows, Mac and Linux

The CH340 chip is used by a number of Arduino compatible boards to provide USB connectivity, you may need to install a driver, don’t panic, it’s easier than falling off a log, and much less painful. Windows (Manufacturer’s Chinese Info Link) Download the W

sparks.gogo.co.nz

블루투스 모듈끼리 통신하기 위해서는 두 모듈의 설정이 맞아야 한다. 예를 들어 시리얼 통신할 baudrate,parity 여부 등... 이러한 설정값이 다르면 페어링되지 않는다.

두 모듈의 설정값을 수정하려면 아래 프로그램을 이용한다.

 

모듈을 USB에 연결하고 프로그램을 실행시킨다. 설정값을 확인하여 포트를 연결하고 변경하고 싶은 설정 값이 있으면 수정후 HWg FW update 버튼을 누르면 변경된 설정값으로 동작한다.

 

사용법이 간단하므로 이 프로그램을 다운받아서 사용하면 된다. 물론 USB 가 아닌 모듈 동일한 설정값으로 수정해주어야 하는데 UART를 바로 연결하기 어렵기 때문에 UART to USB TTL모듈이 별도로 필요하다. 

 

프로그램은 아래 사이트에서 다운받을 수 있다.

 

https://www.hw-group.com/software/hercules-setup-utility 

 

Hercules SETUP utility | HW-group.com

 

www.hw-group.com

 

 

 

 

2. FC에 UART 모듈 연결

Rrevolt FC에는 디버그용 포트 UART6이 있으므로 UART6번 포트를 디버그 포트로 사용한다.  

 

UART6은 FC의 왼쪽편에 위치에 있으므로 아래 사진과 같이 연결해준다.

 

3. UART 데이터 송신

UART6의 핀맵은 아래와 같다.

 

#define UART6_RX_PIN PC7

#define UART6_TX_PIN PC6

 

STM32CubeIDE의 Pinout&Configuration에서 아래와 같이 설정한다.

 - Connectivity : UART6

 - Mode : Asyncronous

 - Baud rate : 115,200 bps

 

UART6 핀이 활성화 된 것을 알 수 있다. 그리고 생성된 드라이버는 HAL에서 LL로 변경해준다.

 

코드를 생성하면 아래와 같이 UART 초기화 드라이버가 생성된 것을 알 수 있다.

아래과 같이 코드를 추가하고 빌드한다. 이 함수는 UART6 포트로 1초마다 한번씩 'A' 글자를 송신하는 함수이다.

 -  LL_USART_TransmitData8(USART6, 'A');

 

송신이 잘되었는지 확인하려면 수신쪽에 터미널 프로그램을 열어 확인하면 된다.

TeraTerm 터미널 프로그램을 실행시키고 Serial을 선택한다. USBtoUART 모듈이 잘 연결되어 있으면 포트에 정보가 올라온다.

 

설정에서 Serial Port Setup을 선택하고 속도를 115200으로 맞춰준다.

 

 

터미널 창에 1초마다 A글자가 쓰여지는 것을 확인할 수 있다.

 

4. 인터럽트 기반 데이터 송수신

인터럽트를 사용하기 위해 Pinout&Configuration 에서 아래 세팅을 해준다.

 - NVIC Settings: UART6 Interrupt Enable

 

NVIC 인터럽트를 활성화시키면 아래와 같이 코드가 생성된다. 이것은 Global 인터럽트이고 개별 인터럽트를 제어하기 위한 코드와 인터럽트 핸들러를 설계해야 한다.

 

 

 

main.c에서 LL_USART_EnableIT_RXNE(USART6)  코드를 추가하면 UART6의 인터럽트를 활성화시킨다.

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART6_UART_Init();
  
  /* USER CODE BEGIN 2 */
  LL_USART_EnableIT_RXNE(USART6);	// 인터럽트 활성화



  /* USER CODE END 2 */

 

 

인터럽트가 발생할 경우 USART6_IRQHandler 함수가 호출된다(IRQHandler는 stm32f4xx_it.c 파일에 존재).

이 함수에 인터럽트가 걸리면 수행할 함수를 코딩해준다.

인터럽트 서비스 루틴은 먼저 수신된 인터럽트가 USART6인지 확인하고 USART6가 맞을 경우 인터럽트 플래그를 클리어하고 한 바이트를 수신하도록 코딩하였다.

 

void USART6_IRQHandler(void)
{
  /* USER CODE BEGIN USART6_IRQn 0 */
	if(LL_USART_IsActiveFlag_RXNE(USART6)) // 인터럽트중 USART6인지 확인
	{
			LL_USART_ClearFlag_RXNE(USART6); // 맞으면 비트 클리어
			rxd = LL_USART_ReceiveData8(USART6); // 데이터 수신
			flag_INT_USART6 = 1; // flag 클리어

	}
  /* USER CODE END USART6_IRQn 0 */
  /* USER CODE BEGIN USART6_IRQn 1 */

  /* USER CODE END USART6_IRQn 1 */
}

 

그리고 main.c의 while 에서는 인터럽트 발생시 flag_INT_USART6의 상태를 polling으로 확인하다가 1로 set이 되면 rxd로 수신된 데이터를 다시 송신하도록 코딩하였다. 

  while (1)
  {
  //	  LL_GPIO_TogglePin(GPIOB, LL_GPIO_PIN_5);
  //	  LL_mDelay(1000);
  //	  LL_USART_TransmitData8(USART6,'B');

	  if(flag_INT_USART6 == 1){
		  flag_INT_USART6 =0;
		  LL_USART_TransmitData8(USART6,rxd); // 호스트로부터 수신한 데이터를 그대로 다시 보냄
		  LL_GPIO_TogglePin(GPIOB, LL_GPIO_PIN_5);
	   }
    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

 

이 두 과정에서 사용한 변수 flag_INT_USART6, rxd는 main.c와 stm32f4xx_it.c에서도 사용하기 때문에 각각 선언해주어야 하며 main.c에  extern으로 global 변수로 선언해주어야 한다.

 

  • main.c에 선언
/* USER CODE BEGIN PV */
extern uint8_t flag_INT_USART6;
extern uint8_t rxd;
/* USER CODE END PV */

 

  • stm32f4xx_it.c 선언
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint8_t flag_INT_USART6;
uint8_t rxd;
/* USER CODE END PV */

 

 

빌드후 실행한다. 터미널에서 키를 치면 입력한 키값이 다시 터미널 창으로 수신되는 것을 확인할 수 있다. 

단순히 쓴값이 창으로 보이는 것 같지만 데이터가 이동하는 경로는 다음과 같다.

 

터미널 키 입력 -> 호스트의 UART TX로 데이터 전송 -> 블루투스 송신 -> 블루투스 수신 -> STM32F405의 UART6 RX로 데이터 수신 -> 인터럽트 발생 -> USART6_IRQHandler 호출 -> Receive 함수 수행 -> flag 1로 셋 -> main.c에서 Trasmit 함수 수행 -> UART6 TX로 데이터 전송 -> 블루투스 송신 -> 블루투스 수신 -> 호스트의 UART 로 데이터 전송 -> 터미널로 데이터 값 출력

 

이번 테스트로 인터럽트기반 데이터 송수신을 해보았다.

 

 

 

 


 

 

2023년 01월 25일 추가 내용

 

 

 

 

Ubuntu에서 Serial 드라이버 설치

 

Linux용 CH340 드라이버 설치하기 위해 아래 사이트 내용을 참고했다.

 

https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all

 

How to Install CH340 Drivers - SparkFun Learn

Introduction <!-- https://www.sparkfun.com/ch340 https://learn.sparkfun.com/tutorials/sparkfun-serial-basic-ch340c-hookup-guide --> In this tutorial, we'll show you how to install CH340 drivers on multiple operating systems if you need. The driver should a

learn.sparkfun.com

 

설치시 make 과정에서 오류가 났고 찾아보니 github에 patch가 되어 있는 코드가 있어서 다운을 받았다.

 

https://github.com/juliagoda/CH341SER

 

GitHub - juliagoda/CH341SER: CH341SER driver with fixed bug

CH341SER driver with fixed bug. Contribute to juliagoda/CH341SER development by creating an account on GitHub.

github.com

 

 

하지만, CH34*를 검색했을때 아래와 같이 나타나면 이미 드라이버가 동작하고 있으므로 별도로 드라이버를 설치할 필요는 없다. 따라서 드라이버 설치과정은 생략한다.

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ ls /dev/ttyU*
/dev/ttyUSB0


swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ lsusb
Bus 002 Device 003: ID 8087:07da Intel Corp. 
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 064e:c334 Suyin Corp. 
Bus 001 Device 003: ID 138a:0018 Validity Sensors, Inc. Fingerprint scanner
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 013: ID 1366:0101 SEGGER J-Link PLUS
Bus 003 Device 005: ID 17ef:6047 Lenovo ThinkPad Compact USB Keyboard with TrackPoint
Bus 003 Device 019: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ dmesg | grep ch34*
[ 9214.316242] usbcore: registered new interface driver ch341
[ 9214.316251] usbserial: USB Serial support registered for ch341-uart
[ 9214.316266] ch341 3-1:1.0: ch341-uart converter detected
[ 9214.316663] usb 3-1: ch341-uart converter now attached to ttyUSB0
[10674.139813] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[10674.139849] ch341 3-1:1.0: device disconnected
[10678.944289] ch341 3-1:1.0: ch341-uart converter detected
[10678.944753] usb 3-1: ch341-uart converter now attached to ttyUSB0
[11401.996566] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[11401.996605] ch341 3-1:1.0: device disconnected
[11590.428182] ch341 3-1:1.0: ch341-uart converter detected
[11590.428794] usb 3-1: ch341-uart converter now attached to ttyUSB0
[11711.505355] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[11711.505409] ch341 3-1:1.0: device disconnected
[11711.963396] ch341 3-1:1.0: ch341-uart converter detected
[11711.963969] usb 3-1: ch341-uart converter now attached to ttyUSB0
[11712.607996] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[11712.608035] ch341 3-1:1.0: device disconnected
[11935.945603] ch341 3-1:1.0: ch341-uart converter detected
[11935.946177] usb 3-1: ch341-uart converter now attached to ttyUSB0

 

 

Ubuntu에서 gtkterm을 설치하고 port를 열어 위에서 본  port와 baudrate를 맞게 설정한다. 그리고 이 설정값을 defaut 값으로 저장한다. 다음번에 실행하면 설정된 값으로 시작한다.

 

 

UART6설정은 위에서 한 것과 동일한 방법으로 실행하고 main 함수의 while문 안에 아래 함수를 추가한다. 아래 함수는 ASCII 'B' 값을 주기적으로 송신하는 함수이다. 따라서 터미널에서 주기적으로 B값이 찍히면 정상적으로 UART 통신이 이루어짐을 확인할 수 있다.

LL_USART_TransmitData8(USART6,'B');

 

 

gtkterm에서 모니터링 결과 예상대로 ASCII 'B'값이 잘 들어오고 있음을 확인할 수 있다.

 

 

 

 

 

그리고 만약 printf와 같은 문자열 출력을 UART를 통해 터미널로 출력하고 싶다면 아래와 같이 inline코드를 main.c의 include 아래쪽에 추가하면 된다.

int _write(int file, char* p, int len)
{
	for(int i=0;i<len;i++)
	{
		LL_USART_TransmitData8(USART6, *(p+i));
		HAL_Delay(1);
	}
	return len;
}

 

 

 

printf로 문자열을 출력하면 다음과 같이 터미널에 문자열이 출력된다.

  while (1)
  {
  //	  LL_GPIO_TogglePin(GPIOB, LL_GPIO_PIN_5);
  //	  LL_mDelay(1000);
  //	  LL_USART_TransmitData8(USART6,'B');

	  if(flag_INT_USART6 == 1){
		  flag_INT_USART6 =0;
		  LL_USART_TransmitData8(USART6,rxd); // 호스트로부터 수신한 데이터를 그대로 다시 보냄
		  LL_GPIO_TogglePin(GPIOB, LL_GPIO_PIN_5);
		  printf("Hello!!!\n\r");

	   }
   }

 

 

 

 

 

 

1) 아래 github 링크에  프로젝트 업로드 

 

  • 19c17e72497f7834e9a04da35338347f51a986c8 (HEAD -> main, origin/main) done project for receiving data using interupt and transmit received data

 

https://github.com/shlee853/STM32F4_FC_DEV

 

GitHub - shlee853/STM32F4_FC_DEV: Development DIY Flight Controller using STM32F404 MCU

Development DIY Flight Controller using STM32F404 MCU - GitHub - shlee853/STM32F4_FC_DEV: Development DIY Flight Controller using STM32F404 MCU

github.com

 

 

 

2) github 업로드 과정 log 

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git add .


swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   .metadata/.ide.log
	modified:   .metadata/.log
	modified:   .metadata/.plugins/org.eclipse.cdt.core/STM32F4_FC_DEV.1674746567632.pdom
	modified:   .metadata/.plugins/org.eclipse.cdt.ui/STM32F4_FC_DEV.build.log
	modified:   .metadata/.plugins/org.eclipse.cdt.ui/global-build.log
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/12/20ceb732129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/19/b0c1f7e6129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/1b/a02240f3129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/46/60e78ce6119e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/49/00e0396e129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/5e/20bfbbd4119e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/89/3003d3b8129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/9/a03f712c139e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/df/706bb7c6139e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/ea/7090f0be129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/ea/90a47395119e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.history/f3/00bd3419129e001d1aafea6376ae17d5
	new file:   .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.indexes/bf/be/properties.index
	modified:   .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.indexes/bf/c4/properties.index
	new file:   .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.markers.snap
	new file:   .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.syncinfo.snap
	new file:   .metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap
	modified:   .metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
	new file:   .metadata/.plugins/org.eclipse.core.resources/2.snap
	modified:   .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs
	modified:   .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs
	modified:   .metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi
	modified:   .metadata/version.ini
	modified:   STM32F4_FC_DEV/Core/Inc/stm32f4xx_it.h
	modified:   STM32F4_FC_DEV/Core/Src/main.c
	modified:   STM32F4_FC_DEV/Core/Src/stm32f4xx_it.c
	modified:   STM32F4_FC_DEV/Core/Src/usart.c
	modified:   STM32F4_FC_DEV/Debug/Core/Src/main.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/main.su
	modified:   STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.su
	modified:   STM32F4_FC_DEV/Debug/Core/Src/usart.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/usart.su
	modified:   STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.elf
	modified:   STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.list
	modified:   STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.map
	modified:   STM32F4_FC_DEV/STM32F4_FC_DEV.ioc

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git commit -m "done project for receiving data using interupt and transmit received data"
[main 19c17e7] done project for receiving data using interupt and transmit received data
 42 files changed, 6942 insertions(+), 3425 deletions(-)
 rewrite .metadata/.plugins/org.eclipse.cdt.ui/STM32F4_FC_DEV.build.log (88%)
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/12/20ceb732129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/19/b0c1f7e6129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1b/a02240f3129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/60e78ce6119e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/49/00e0396e129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5e/20bfbbd4119e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/89/3003d3b8129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9/a03f712c139e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/df/706bb7c6139e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ea/7090f0be129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ea/90a47395119e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f3/00bd3419129e001d1aafea6376ae17d5
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.indexes/bf/be/properties.index
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.markers.snap
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/STM32F4_FC_DEV/.syncinfo.snap
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/2.snap
 rewrite STM32F4_FC_DEV/Debug/Core/Src/main.o (81%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.o (83%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.su (100%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/usart.o (81%)


swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git log --pretty=oneline
19c17e72497f7834e9a04da35338347f51a986c8 (HEAD -> main) done project for receiving data using interupt and transmit received data
cc840798716809f6b47b4111b825a60381d1934d (origin/main) done project for poilling Transmit data using USART6
00af3f79301c64ba1b43044869f96cf8848c678a Initial Release & done project for LED blink
swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git push -u origin main
Username for 'https://github.com': shlee853
Password for 'https://shlee853@github.com': 
Enumerating objects: 124, done.
Counting objects: 100% (124/124), done.
Delta compression using up to 8 threads
Compressing objects: 100% (73/73), done.
Writing objects: 100% (77/77), 397.63 KiB | 2.11 MiB/s, done.
Total 77 (delta 42), reused 0 (delta 0)
remote: Resolving deltas: 100% (42/42), completed with 30 local objects.
To https://github.com/shlee853/STM32F4_FC_DEV.git
   cc84079..19c17e7  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

 

 

 

 

 

 

 

 

 

728x90

댓글