MPLAB의 XC8 환경에서 <stdio.h>의 printf()를 사용합니다. 이 글에서는 PIC16F13145 Curiosity 개발 보드에서 출력한 데이터를 MPLAB의 터미널 창에 출력하는 방법을 보여줍니다.
요약
- MCC에서 UART 활성화 (설정 사진 예시 포함)
- UART I/O 핀 할당
- printf() 스트림을 UART로 리다이렉트
- main()에서 데이터 전송
void main(void){
SYSTEM_Initialize(); // MCC generated code
while(1){
printf("Hello World!\r\n");
}
}
마지막 업데이트: 2025년 12월 01일
그림 1: COM4로 연결되어 있으며 Hello World!가 터미널 창에 출력되고 있습니다.
기술 팁: 잊지 말고 UART에 핀을 할당하십시오. 정상적으로 동작하지 않을 경우, 가장 먼저 확인해야 할 항목 중 하나입니다. 저라면 TX와 RX 핀에 LED를 사용한 로직 프로브를 추가하겠습니다. 이를 통한 시각적인 피드백이 문제 해결 과정을 단순화할 수 있습니다.
UART 설정 방법
그림 2는 UART의 설정 화면을 보여줍니다:
- Application Builder에 UART가 추가되어 있습니다.
- 전송 속도는 9600으로 설정되어 있습니다.
- printf() 출력 스트림이 UART로 리다이렉트 되어 있습니다 (Redirect Printf to UART 슬라이더가 파란색).
MCC에서 .h와 .c 파일이 생성되면, 다음과 같은 코드를 사용해 시리얼 포트로 데이터를 출력할 수 있습니다.
printf("Hello World!");
그림 2: UART의 전송 속도 설정 및 printf() 출력이 UART로 리다이렉트 되도록 설정.
MCC 문서 위치
MPLAB의 MCC 도구는 경량화된 주변 장치 래퍼 (peripheral wrapper) 구조를 생성하며, 그 안에 포함된 표준화된 함수들은 main()에서 직접 호출할 수 있습니다. 자세한 문서는 Project Resources 섹션 (그림 3의 좌측 상단)에 있는 물음표 아이콘을 클릭하면 확인할 수 있습니다.
관련된 예제로는 이 게시글에서 설명하고 있는 밀리초 콜백이 있습니다.
그림 3: 물음표를 클릭하면 MCC의 주변 장치 래퍼 관련 문서를 찾을 수 있습니다.
기술 팁: MCC가 생성한 파일을 수정하면 안됩니다. 대신 main()에서 래퍼를 호출하십시오. 이렇게 하면 향후 마이크로컨트롤러 설정을 변경하더라도, MCC에 의해 사용자 코드가 덮어써지는 문제를 피할 수 있습니다.
경험이 쌓이면, 레지스터 설정을 MCC가 아닌 main()에서 할 수 있습니다. 숙련된 프로그래머들은 MCC 추상화를 사용하지 않고 주변 장치를 직접 설정하는 경우가 많으며, 이들은 규격서 정보에 기반하여 직접 프로그래밍하곤 합니다.
글을 맺으며
printf()는 마이크로컨트롤러에서 사용하기에는 크기가 크고 느린 편입니다. 군더더기 없는 루프 내에서 UART 하드웨어에 직접 쓰는 룩업 테이블 방식이 더 빠르고 플래시 메모리 사용량도 적습니다. 그러나 처음 사용하는 사용자라면 수십 년간 축적된 C 튜토리얼과 온라인 디버거를 활용할 수 있다는 점에서 printf()로 출발하는 것이 나을 수도 있습니다. 효율은 그 이후에 고려해도 늦지 않습니다.
감사합니다,
APDahlen
저자의 관련 게시글
이 글을 흥미롭게 읽었다면, 다음 글들도 도움이 될 수 있습니다:
- ISR-메인간 안전한 변수 전달을 위해 순차 잠금을 사용해 PIC16에 아두이노 스타일 millis() 구현하기
- 마이크로칩 PIC16의 구성 가능 로직 블록을 이용한 스테퍼 모터 구동
- Driving a Large Relay From a 3.3 VDC Microcontroller Using an NPN Darlington Transistor
저자 소개
미합중국 해안경비대(USCG) 소령(LCDR)으로 전역한 Aaron Dahlen은 디지키에서 애플리케이션 엔지니어로 근무하고 있습니다. 27년간의 군 복무 동안 기술자 및 엔지니어로서 쌓아온 그 만의 전자 및 자동화에 대한 지식은 12년간의 교단을 통해 (상호 연계되어) 더욱 향상되었습니다. 미네소타 주립대학, Mankato에서 전기공학 석사(MSEE) 학위를 받은 Dahlen은 ABET(Accreditation Board for Engineering and Technology, 미국 공학 기술 인증 위원회) 공인 전기공학 과정을 가르치고, EET(Electrical Engineering Technology, 전기공학 기술) 과정의 프로그램 조정관으로 일했으며, 군 전자 기술자에게 부품 수준의 수리에 대해 가르쳤습니다. 미네소타 주 북부의 집으로 돌아와 이런 류의 연구와 글쓰기를 즐기고 있습니다.
영문 원본: PIC UART Print Guide: Replacing Serial.println() With printf() (XC8 + MCC, With Debug Tips)


