STM32的ITM跟踪调试功能介绍及实现(五)USB调试实例

之前调试USB设备程序时,使用的是通过串口来打印变量,实际测试时,因为串口速率问题,串口会丢包;如果迁就串口慢速输出,则可能影响到USB的实时通讯,造成USB设备识别失败。有了ITM,USB实时调试的问题可以解决了!

为了生成一个USB设备应用,之前测试使用的NUCLEO-F411RE板子不再适用了,这次换了一个支持USB应用的板子:NUCLEO-F412ZG:


STM32的ITM跟踪调试功能介绍及实现(五)USB调试实例_第1张图片
图一

使用STM32CUBEMX针对F412ZG板子生成一个KEIL版本的、支持USB设备的最基本的例程(模拟USB鼠标),将上一讲中的retarget.c文件添加进来。在文件 stm32f4xx_it.c 中找到中断处理入口函数 OTG_FS_IRQHandler(),添加一个打印变量的语句:

printf("%d\n", ++dwCnt);     //dwCnt是预先定义的对USB中断进行计数的变量


STM32的ITM跟踪调试功能介绍及实现(五)USB调试实例_第2张图片
图二

编译、下载、进入debug、全速运行,看到printf输出数据如下:


STM32的ITM跟踪调试功能介绍及实现(五)USB调试实例_第3张图片
图三

板子通过USB连入PC后,可以看到USB设备枚举过程中,USB中断被进入了82次(这个数值每次测试可能有轻微变化);用类似方法可以打印USB通讯过程中的双向数据,便于理解USB通讯原理或排错。

ITM的专题到今天告一段落了,感谢大家的陪伴。限于本人的水平,文中不免会有谬误,请留言、赐教!

(全文完)

你可能感兴趣的:(STM32的ITM跟踪调试功能介绍及实现(五)USB调试实例)