之前调试USB设备程序时,使用的是通过串口来打印变量,实际测试时,因为串口速率问题,串口会丢包;如果迁就串口慢速输出,则可能影响到USB的实时通讯,造成USB设备识别失败。有了ITM,USB实时调试的问题可以解决了!
为了生成一个USB设备应用,之前测试使用的NUCLEO-F411RE板子不再适用了,这次换了一个支持USB应用的板子:NUCLEO-F412ZG:

使用STM32CUBEMX针对F412ZG板子生成一个KEIL版本的、支持USB设备的最基本的例程(模拟USB鼠标),将上一讲中的retarget.c文件添加进来。在文件 stm32f4xx_it.c 中找到中断处理入口函数 OTG_FS_IRQHandler(),添加一个打印变量的语句:
printf("%d\n", ++dwCnt); //dwCnt是预先定义的对USB中断进行计数的变量
编译、下载、进入debug、全速运行,看到printf输出数据如下:
板子通过USB连入PC后,可以看到USB设备枚举过程中,USB中断被进入了82次(这个数值每次测试可能有轻微变化);用类似方法可以打印USB通讯过程中的双向数据,便于理解USB通讯原理或排错。
ITM的专题到今天告一段落了,感谢大家的陪伴。限于本人的水平,文中不免会有谬误,请留言、赐教!
(全文完)
网友评论