[STM32F4] printf在使用STM32CubeIDE、STM32F46NG开发板的QSPI_perfs项目时显示乱码

[复制链接]
 楼主| cutfall 发表于 2025-7-20 02:13 | 显示全部楼层 |阅读模式
本帖最后由 cutfall 于 2025-7-29 22:35 编辑

我打开了已提供的QSPI_perfs项目,并将syscalls.c文件中的write函数修改为使用以下代码。//Debug Exception and Monitor Control Register base address#define DEMCR                                *((volatile uint32_t*) 0xE000EDFCU ) /* ITM register addresses */#define ITM_STIMULUS_PORT0           *((volatile uint32_t*) 0xE0000000 )#define ITM_TRACE_EN                  *((volatile uint32_t*) 0xE0000E00 ) void ITM_SendChar(uint8_t ch){         //Enable TRCENA        DEMCR |= ( 1 << 24);         //enable stimulus port 0        ITM_TRACE_EN |= ( 1 << 0);         // read FIFO status in bit [0]:        while(!(ITM_STIMULUS_PORT0 & 1));         //Write to ITM stimulus port0        ITM_STIMULUS_PORT0 = ch;}
我已根据教程修改了ITM设置,移除了main.c文件中关于LCD显示的设置和调用。


公羊子丹 发表于 2025-7-23 07:24 | 显示全部楼层
你现在 ITM 输出是接 SWO 口了吗?串口工具那边波特率对上没?
周半梅 发表于 2025-7-23 07:26 | 显示全部楼层
我看你用的是 ITM_SendChar,确认一下 IDE 的 Debug 配置里 SWO 是开着的哈。
帛灿灿 发表于 2025-7-23 07:28 | 显示全部楼层
有时候 printf 会缓存,记得加个 fflush(stdout); 保证字符立马出来。
童雨竹 发表于 2025-7-23 07:30 | 显示全部楼层
ST-LINK 驱动版本也要对,不然 SWO 口数据传过来会花。
万图 发表于 2025-7-23 07:32 | 显示全部楼层
QSPI_perfs 项目默认好像跑 LCD 输出,你把 LCD 改了会不会有别的冲突?
Wordsworth 发表于 2025-7-23 07:34 | 显示全部楼层
如果只输出几个字节是正常的,长数据才花,试试单字符发,看会不会好。
Bblythe 发表于 2025-7-23 07:36 | 显示全部楼层
也可以先把 ITM_SendChar 单独写个 while(1) 循环打几个字节试试稳定性。
Pulitzer 发表于 2025-7-23 07:38 | 显示全部楼层
CubeIDE 的 SWV Console 里格式设置要对,选 ITM Data Console 而不是 UART。
Uriah 发表于 2025-7-23 07:40 | 显示全部楼层
我遇到过 Debug Config 里勾了 Trace Asynchronous Sw,结果串出来全是乱码。
Uriah 发表于 2025-7-23 07:42 | 显示全部楼层
不行就换用标准 USART printf 先测,排除是 ITM 通道的锅还是别的地方出问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

38

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部