
01 引言 STM32N6是ST第一款带NPU的基于Cortex-M55内核的MCU,在STM32N6开发过程中,有些开发者希望通过打印信息的方式进行软件调试。为了尽量减少IO占用,客户在使用STM32CubeIDE时希望使用SWV/ITM进行printf内容输出。客户尝试了STM32CubeIDE用户手册中printf重定向的方法,但没有成功。本文将介绍失败原因及如何实现printf IO重定向到SWV/ITM。 0 2 Printf IO重定向SWV/ITM Printf重定向一般有三种,使用UART/USART,使用SWV/ITM或者使用SEGGER的RTT功能。 我们这里讨论的是STM32CubeIDE下使用SWV/ITM,首先必须将syscalls.c包含在工程里。printf()会调用_write()函数,该函数在syscalls.c中有实现。__io_putchar()会由_write()调用,至于如何修改依赖于硬件与库,手册UM2609中有详细描述,这里就不再赘述。对于STM32N6,使用STM32CubeIDE,具体实现请见下面的逐步描述。 2.1. __io_putchar修改 将printf()重定向SWV/ITM,我们这里需要修改__io_putchar,代码如下。
2.2. 使能Trace Clock和Debug Clock 使能Trace Clock和Debug Clock需要通过设置DBGMCU寄存器实现,代码如下:
2.3. SWO GPIO设置 以STM32N6-DK板为例,使用芯片型号为STM32N657X0H3(VFBGA264),查询数据手册DB4396,表15.STM32N657xx pin description中有详细描述,PB5管脚可以复用为TRACESWO(AF0_TRACE)。另外需要特别注意,GPIO B挂在总线AHB4,RCC模块中AHB4ENR负责AHB4 Run或Sleep模式的设置,需要对该寄存器进行设置以使能GPIO B。参考代码如下:
上述3个步骤需要修改代码,代码综合起来的示例如下(main.c):
2.4. SWV Core Clock setting STM32CubeIDE中SWV core clock需要设置为SYSA/8,如下图1所示,例子中SYSA为400MHz,TPIU为50MHz,则SWV Core Clock需要设置成TPIU 50MHz,如下图2;
▲ 图1. STM32N6 TPIU Clock设置 ▲ 图2. STM32N6 STM32CubeIDE Debugger SWV Core Clock设置 2.5. SWV ITM data console设置 如下图3“SWV Port设置与Data Console使用”所示,debug模式下,打开SWV ITM Data Console窗口,打开设置窗口,设置ITM Stimulus Ports,勾选Port 0,确定即可开启Printf数据的输出。详细的介绍请参考手册UM2609,3.2 Debug with Serial Wire Viewer tracing(SWV)一节。 ▲ 图3. SWV Port设置与Data Console使用 至此,设置已经完成,Data Console中已经可以有正常的printf数据输出了。 0 3 小结 本文介绍了STM32N6使用STM32CubeIDE SWV/ITM输出debug信息,实现printf IO重定向到SWV/SWO的具体过程,供有需要的客户参考。 ▼▼▼ |
ST x 星瞳科技 | 联袂推出OpenMV N6,定义嵌入式机器视觉新标杆
【STM32N6570-DK评测】1.你好N6
实战经验 | STM32N6平台如何使用MCO2输出Clock
【STM32N6570-DK评测】8.初试AI
STM32N6坛友评测出炉,来围观(第二波预约继续)
Keil下的STM32N6之RAM运行工程配置说明
【DIY-STM32N6】4.LCD驱动与TouchGFX
相机ISP大揭秘:STM32N6的全新相机系统优势与调优工具(文末有礼)
【DIY-STM32N6】3.超级一键下载
【DIY-STM32N6】2.底板设计与点亮LED