这几天在调试STM32H7S7L的TouchGFX工程中,需要使用到printf重定向的代码,由于使用是C11以及C++所以不能使用微库,导致卡死在printf中,查找了好久才发现的问题,如果使用C99,则与touchGFX的C++11有冲突,因此需要不能使用微库来实现重定向。
经查找成功解决,代码如下:
/* USER CODE BEGIN 1 */ /* ------------------通过重定向将printf函数映射到串口1上-------------------*/ #if !defined(__MICROLIB) //#pragma import(__use_no_semihosting) __asm (".global __use_no_semihosting\n\t"); void _sys_exit(int x) //避免使用半主机模式 { x = x; } //__use_no_semihosting was requested, but _ttywrch was void _ttywrch(int ch) { ch = ch; } //struct __FILE //{ // int handle; //}; FILE __stdout; #endif #if defined ( __GNUC__ ) && !defined (__clang__) #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { /* 实现串口发送一个字节数据的函数 */ //serial_write(&serial1, (uint8_t)ch); //发送一个自己的数据到串口 HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 1000); return ch; }
记录一下,一来自己后面好查找,二来,给遇到类似情况的大佬们给予借鉴。