teraterm을 이용하여 입출력 결과를 확인한다.
2가지 방식을 통해 실습을 진행했다.
- Polling 방식
- Interrupt 방식
Polling방식으로 구현하는 것을 굉장히 쉽고 간단하다. 하지만 실행시간이 길어질 수록 반응속도가 낮아진다. 비효율적인 방법이다.
size를 1만큼 읽고, 해당 입력된 문자를 다시 보내 터미널에 출력된다.
위 처럼 굉장히 간단하게 구현가능하다.
Interrupt방식으로 구현 하는 방식도 크게 어렵지 않다.
main 함수 내에서 while 루프가 시작하기 전
위와 같이 코드를 적어준다.
인터럽트방식으로 데이터를 받겠다는 의미이다.
현재는 size를 1로 설정해주었으므로 size가 1만큼을 수신받게되면
인터럽트가 발생한다.
인터럽트가 발생하게 되면 위의 HAL_UART_RxCpltCallback 함수가 최종적으로 실행된다. 이 함수 내부에 원하는 동작을 구현하면 된다.
중요한 것은 다시 한번 HAL_UART_Receive_IT 함수를 호출 해야한다.
이 콜백 함수는 stm32f4xx_hal_uart.c에 정의되어 있다.
__weak로 정의 되어있는데 이는 user code에서 재정의하면
재정의 된 코드로 실행된다.
결과가 잘 출력되는 것을 확인하였다.