STM32/기타

STM32CubeIDE에서 FreeRTOS중 printf 오류 해결

 

STM32를 사용하여 FreeRTOS를 작성할 때에 코드에서 printf를 수행할 때 특정 경우에 오류가 발생(코드가 제대로 출력이 안된다거나, hardfalut)하는 것을 볼 수 있다. 또는 malloc을 사용하여 큰 용량의 데이터를 Heap에서 확보하고자 할때 오류가 발생한다. 

 

https://github.com/mpaland/printf

 

GitHub - mpaland/printf: Tiny, fast, non-dependent and fully loaded printf implementation for embedded systems. Extensive test s

Tiny, fast, non-dependent and fully loaded printf implementation for embedded systems. Extensive test suite passing. - GitHub - mpaland/printf: Tiny, fast, non-dependent and fully loaded printf imp...

github.com

이를 해결하기 위해선 경량화 되어 구현된 printf 함수를 사용하면 됨. 위 코드의 printf.c와 printf.h를 받은 뒤에 printf를 사용하는 코드에 printf.h 헤더를 포함하면된다. 

 

사용자의 환경에 따라 _putchar 함수를 수정하여 구현하면 됨.

void _putchar(char c)
{   
    HAL_UART_Transmit(&huart1, (uint8_t) &c, 1, 0xFFFF);
}

 

 

출처: https://ahnbk.com/?p=1399

 

STM32CubeIDE에서 printf를 USART와 연결하기

printf 출력을 USART와 연결하여 사용 가능. 디버깅 시 상당한 이점을 가질 수 있음. main.c 파일에 다음의 함수를 추가. 이때 uart의 인스턴스를 설정해야 하는데, STM32F746G-DISCO 보드에선 USART1번이 ST-Lin

ahnbk.com