STM32 to Arduino
STM32/STM32F411RET6

STM32 to Arduino

이번에는 STM32 MCU에서 Arduino로 Uart 통신하는 방법에 대해서 알아보고자 한다.

사용하는 STM32 MCU는 Nucleo-411RE이고 Arduino는 Nano를 사용한다.

 

Nucleo-411RE에 대한 자세한 설명은 블로그에 정리해두었으니 확인하면 된다.

https://rorsi.tistory.com/29

 

Nucleo-f411re

STM32 Nucleo MCU 의 최소 기능만으로 구성된 개발 보드로 ST사에서 제작한 개발 보드이다. 개발 측면에서는 대부분의 Port에 1:1로 매칭되도록 많은 확장핀을 할당하여 개발편의성을 확실히 제공해

rorsi.tistory.com

 

우선 보드와 보드끼리 점퍼선을 이용하여 연결해준다.

 

Nucleo-F411RE

 

Arduino Nano

 

Nucelo-F411RE 보드의 PA10(RX)와 Nano 보드의 D1(TX)를 연결해주고 PA9(TX)와 D0(RX)를 연결해준다. 전원을 공급하고 싶으면 추가로 점퍼선을 연결하여 넣어줘도 되지만 필자는 두 보드다 USB 포트를 통해 전원을 연결했다.

 

연결하였으면 우선 STM32CUBEIDE를 열어 프로젝트를 생성하고 다음과 같이 설정해준다.

 

 

코드를 Generate 해준 뒤 main.c로 들어가 코드를 작성해준다.

 

  /* USER CODE BEGIN WHILE */
  uint8_t a = 'A';

  while (1)
  {
	  HAL_UART_Transmit(&huart1, &a, 1, 10);
	  HAL_Delay(1000);
    /* USER CODE END WHILE */

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

 

HAL_UART_Transmit()

 

 

HAL_UART_Transmit()에 대해 설명하자면 데이터를 전송하는 함수이고 함수 인자에 대해 설명하자면

  • huart : uart의 핸들러를 넘겨준다. 초기설정에서 uart1를 사용하므로 huart1를 사용하면된다. 주의할 점은 *가 붙어있으므로 주소형을 넘겨줘야한다.
  • pData : 송신할 데이터를 넘겨줘야한다. 이 역시 주소를 넘겨야한다.
  • Size : 송신할 데이터의 크기를 입력해준다.
  • Timeout  : Timeout 기간을 설정해준다. 너무 짧으면 송신 되기전에 Timeout될 수 있다.

 

이제 이어서 Arduino IDE를 열어 코드를 작성한다.

void setup(){
  Serial.begin(115200);
  Serial.println("Start Receive");
}

void loop(){
  while(Serial.available()){
    char data = Serial.read();
    Serial.println(data);
  }  
}

 

두 보드의 UART 통신을 위해서는 Baud Rate를 맞춰야한다. 그렇기 때문에 CUBEIDE에서 설정해줬던 115200 그대로 Arduino IDE에서도 115200으로 코드를 작성해준다.

 

loop문 안에 코드는 Serial 통신으로 전달받은 데이터가 있다면 그 데이터를 읽고 출력해주는 코드이다.

 

CUBEIDE에서 디버깅을 하고 실행시킨다음 Arduino IDE에서 업로드하고 시리얼 모니터를 열면 다음과 같이 나온다.

 

 

 

참고

 

회로도를 보면 아두이노 핀 호환 컨넥터의 TX, RX핀에 연결이 되어있다. 하지만 자세히 F411의 회로도를 보면 default 연결은 이 핀들이 아니라 ST-Link칩에 연결이 되어 있다. 즉 UART2의 경우 ST-Link를 통해서 USB 컨넥터에 연결이되고 virtual COM port로 잡힌다. 매뉴얼에 보면 다음과 같이 나온다.

 

The USART2 interface available on PA2 and PA3 of the STM32 microcontroller can be connected to ST-LINK MCU, ST morpho connector or to Arduino connector. The choice can be changed by setting the related solder bridges. By default the USART2 communication between the target STM32 and ST-LINK MCU is enabled, in order to support virtual COM port for MbedTM (SB13 and SB14 ON, SB62 and SB63 OFF). If the communication between the target STM32 PA2 (D1) or PA3 (D0) and shield or extension board is required, SB62 and SB63 should be ON, SB13 and SB14 should be OFF. In such case it is possible to connect another USART to ST-LINK MCU using flying wires between ST morpho connector and CN3.

 

따라서 USART2를 사용하고 싶으면 따로 설정을 해서 사용하여야 한다.

'STM32 > STM32F411RET6' 카테고리의 다른 글

Arduino to STM32  (0) 2022.02.24
Nucleo-f411re  (0) 2022.02.14