728x90
에 이어서 이번에는 반대로 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);
}
코드를 수정하고 실행해보면 다음과 같이 나온다.
728x90
'STM32 > STM32F411RET6' 카테고리의 다른 글
STM32 to Arduino (0) | 2022.02.24 |
---|---|
Nucleo-f411re (0) | 2022.02.14 |