728x90
0. printf 출력을 USART와 연결하여 사용하는 이유:
sprintf와 HAL_UART함수를 이용해 teraterm과 통신할 필요 없이, printf형식으로 원하는 변수를 출력 할 수 있음.
따라서 디버깅 시 편리해짐
1. 구현 방법
main.c 파일에 다음의 함수를 추가.
/* USER CODE BEGIN 4 */
//...
/*for using printf in teraterm */
#ifdef __cplusplus
extern "C" int _write(int32_t file, uint8_t *ptr, int32_t len) {
#else
int _write(int32_t file, uint8_t *ptr, int32_t len) {
#endif
if( HAL_UART_Transmit(&huart2, ptr, len, len) == HAL_OK ) return len;
else return 0;
}
/* USER CODE END 4 */
+) 추가설명:
- 이때 HAL_UART_Transmit함수에서 uart의 인스턴스를 설정해야 함
- STM32F446RE 보드에선 USART2번이 ST-Link의 Virtual Com Port와 연결되어 있음
- 아래와 같이 huart2로 연결
2. Setting 변경
- 상단 project > properties
- C/C++ Build > Settings > MCU Settings >
Use float with printf from newlib-nano (-u _printf_float) 항목 체크
출력 완료!
'프로젝트 기록 > 23SEMA_Control_STM32' 카테고리의 다른 글
[STM32] SDcard test code: Save data up to 300s(5min) (0) | 2023.05.23 |
---|---|
[STM32CubeIDE] 프로젝트 공유하는법/ Export, Import (0) | 2023.05.06 |
[STM32_LoRa] (중간점검)장거리 통신까지 (0) | 2023.02.22 |
Lora with STM32 문제해결 (0) | 2023.02.07 |
[STM32_LoRa] (중간점검)SPI for LoRa/LoRa설정/ 안테나 선정 (0) | 2023.02.05 |