Arduino to STM32
STM32/STM32F411RET6

Arduino to STM32

https://rorsi.tistory.com/38

 

STM32 to Arduino

이번에는 STM32 MCU에서 Arduino로 Uart 통신하는 방법에 대해서 알아보고자 한다. 사용하는 STM32 MCU는 Nucleo-411RE이고 Arduino는 Nano를 사용한다. Nucleo-411RE에 대한 자세한 설명은 블로그에 정리해두었으..

rorsi.tistory.com

에 이어서 이번에는 반대로 Arduino에서 STM32로 데이터를 전송해 본다.

 

IDE 설정은 전과 똑같이 해주고 코드를 수정해준다.

 

  /* USER CODE BEGIN WHILE */
  uint8_t a;
  uint8_t b = 'B';

  while (1)
  {
	 if(HAL_UART_Receive(&huart1, &a, sizeof(a), 10) == HAL_OK)
	 {
		 if(a == 'A') HAL_UART_Transmit(&huart1, &b, sizeof(b), 10);
	 }
	 HAL_Delay(1000);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

Arduino 에서 'A'라는 데이터를 보내게 되면 그 데이터를 확인 후 'A'가 맞다면 다시 Arduino에 'B'를 전송하는 코드이다.

 

HAL_UART_Recievie()

 

 

HAL_UART_Receive()에 대해서 설명하자면 데이터를 받는 함수로 데이터를 전송하는 Transmit 함수와 별 다를 거는 없다. 다만 데이터 버퍼를 pData로 지정해 두었는데, 수신을 하면 데이터를 저장해 둘 것이니, 입력 인자에 변수를 넣는다면 수신된 데이터가 변수에 저장될 것이다.

 

uint8_t a;

 

입력인자가 uint8_t의 변수를 사용하고 있으므로, 똑같이 unsigned 8비트 int 타입으로 선언한다. 입력인자에서는 *을 붙이고 있으므로 주소 값을 넘겨줘야한다.

 

그리고 함수 뒤에 있는 HAL_OK는 함수를 통해 데이터를 전송받았다면 즉 무사히 UART 통신을 수행했다면 반환되는 값이다. 값을 확인해보면 0x00u 즉 0이다.

 

이어서 아두이노 코드도 다음과 같이 수정해준다.

 

char Sendmessage = 'A';

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

void loop(){

    Serial.println(Sendmessage);     
    while(Serial.available()){
      char data = Serial.read();
      Serial.print("수신: ");
      Serial.println(data);    
    }
    delay(1000);
}

 

코드를 수정하고 실행해보면 다음과 같이 나온다.

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

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