[STM32U3] 【NUCLEO-U3C5ZI 测评】MDK中实现串口重定向

[STM32U3] 【NUCLEO-U3C5ZI 测评】MDK中实现串口重定向
【前言】由于后期需要移植touchgfx在串口重定向就不能用微库来实现printf。【偿试】看到stm32cubeIDE下面的工程有syscalls.c来实一重定向。但是我把工程实现后没有报错但是下载到开发板就一直卡在0x08000930 BEAB BKPT #0xab。如果进调试可以跑但是不进调试就跑不起来。试了好些方法也没有用。【解决方法】通过搜索试到了有一篇文章提到了这个在usart.c中添加代码如下复制/* USER CODE BEGIN 1 */#include stdio.h#if defined(__CC_ARM) /* For arm compiler 5 */#if !defined(__MICROLIB) /* If not Microlib */struct __FILE{int dummyVar; //Just for the sake of redefining __FILE, we wont we using it anyways ;)};FILE __stdout;#endif /* If not Microlib */#elif defined(__ARMCC_VERSION) (__ARMCC_VERSION 6010050) /* For arm compiler 6 */#if !defined(__MICROLIB) /* If not Microlib */FILE __stdout;#endif /* If not Microlib */#endif /* For arm compiler 5 */#if defined(__ICCARM__) /* For IAR */size_t __write(int Handle, const unsigned char *Buf, size_t Bufsize){int i;for(i0; iBufsize; i){(void)HAL_UART_Transmit(hcom_uart[COM_ActiveLogPort], (uint8_t *)Buf[i], 1, COM_POLL_TIMEOUT);}return Bufsize;}#elif defined(__CC_ARM) || (defined(__ARMCC_VERSION) (__ARMCC_VERSION 6010050)) /* For ARM Compiler 5 and 6 */int fputc (int ch, FILE *f){(void)HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 1000);return ch;}#else /* For GCC Toolchains */int __io_putchar (int ch){(void)HAL_UART_Transmit(hcom_uart[COM_ActiveLogPort], (uint8_t *)ch, 1, COM_POLL_TIMEOUT);return ch;}#endif /* For IAR *//* USER CODE END 1 */编译后解决了问题。【测试】在app_freertos.c的一个任务中添加测试复制void StartDefaultTask(void *argument){/* USER CODE BEGIN defaultTask *//* Infinite loop */printf(start led3 toggle!\r\n);for(;;){HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);osDelay(200);}/* USER CODE END defaultTask */}打开串口终端可以看到成功实现了841926a2540b13f0eb.png(27.8 KB, 下载次数: 0)下载附件2026-6-7 17:58 上传---------------------作者lulugl链接https://bbs.21ic.com/icview-3520367-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。