이전 포스팅에서는 RTOS 프로젝트 생성까지 확인해봤다.
https://vuzwa.tistory.com/entry/1-Free-RTOSwith-STM32L475VGT-B-L475E-IOT01A1
1. Free RTOS(with STM32L475VGT, B-L475E-IOT01A1)
RTOS를 포스팅해야지 하고 이론적 배경만 쓰고 잠시 쉬었다. 다시 RTOS를 다뤄야 할 일이 생길 수도 있어서 하나씩 정리해보려고 한다. 우선 RTOS에 대한 이론적 배경은 이전 포스팅을 참고하면 되
vuzwa.tistory.com
RTOS에서 왜 갑자기 uart로 넘어가는지는 포스팅을 보면 바로 이해가 될 거다.
펌웨어 개발에서 UART는 필수적이다. 다른 기기와 통신뿐만 아니라 보드의 상태를 확인할 수 있는 log를 출력하는데 UART를 사용하기 때문이다. uart를 사용한 log는 !!!반드시!!! 들어가 있어야 한다.
STM에서 판매하는 개발 보드는 ST-LINK가 붙어 있고, ST-LINK를 통해 UART 출력을 할 수 있다.
우리가 사용하는 B-L475E-IOT01A1보드에는 UART1번이 ST-LINK와 연결되어 있다.
Connectivity에 들어가 보면 UART1번이 baudrate 115200으로 설정된 걸 확인할 수 있다.
그럼 여기까지 확인하고 어떻게 써먹는지 알아보자.
C에서는 표준 입출력 라이브러리를 제공한다. printf, sprintf 등등 펌웨어 개발에서 printf를 그대로 사용해 uart를 출력할 수 있다.
Core - Src - syscalls.c를 열어보자.
여기에 C 표준 함수들이 모여있다.
35번째, 36번째 줄에 __io_putchar, __io_getchar함수가 보이고, 아래로 더 내려보면 _read, _write 함수 등 다양한 함수가 보인다.
여기까지 확인하고 다시 main.c로 돌아와서 코드를 작성해보자.
main.c에 위와 같이 코드를 작성한다. 위 코드에서 uart로 데이터를 보내는 방식은 1바이트씩 보내는 방식이다.
첫 번째 전달 인자는 uart1의 핸들러 변수, 두 번째는 전송할 데이터, 세 번째는 전송할 바이트 수, 마지막 네 번째는 전송 타임아웃 시간이다. HAL 드라이버의 사용은 구글링하면 쉽게 찾을 수 있다. 리턴 값으로는 전송한 값을 리턴한다.
이렇게 작성하고 아래와 같이 printf를 통해 "start"문자열을 전송할 수 있다.
F11 눌러서 빌드 다운로드하고 F8 눌러서 동작시킨다.
리셋을 누를 때마다 "start"를 출력하는 것을 확인할 수 있다.
그럼 scanf를 이용해 데이터를 받는방법을 알아보자.
위와 유사하다.
위와같이 작성해주고,
MCU 주변장치를 초기화 하는 함수아래 버퍼를 사용하지 않도록 설정해 주는 함수를 호출한다. 이 부분은 구글링하면 쉽게 찾을 수 있다. 아래 코드를 추가하기 위해서는 stdio.h 파일이 include 되어 있어야 한다.
setbuf(stdin, NULL);
setbuf(stdout, NULL);
다운로드해서 터미널 프로그램을 통해 데이터를 전송하면 str에 저장되는것을 확인 할 수 있다.
그럼이제 본격적으로 RTOS를 파헤쳐보자!!
혹시 질문있으면 댓글 달아주세요 ~~
- 끝 -
'OS(운영체제) > FreeRTOS' 카테고리의 다른 글
5. Free RTOS - Task 상태와 동작 (0) | 2022.11.08 |
---|---|
4. Free RTOS - Task 생성하기, Multi Task(with STM32L475VGT, B-L475E-IOT01A1) (0) | 2022.11.07 |
3. Free RTOS - CMSIS_RTOS vs FreeRTOS (0) | 2022.11.02 |
1. Free RTOS(with STM32L475VGT, B-L475E-IOT01A1) (0) | 2022.09.26 |
0. FreeRTOS - FreeRTOS란? (0) | 2021.05.27 |