湖北话是的怎么说(你可能不知道的 STM32 调试利器 – ITM)
STM32 有一个代码跟踪功能,即 ITM,这个调试功能非常强大,可以替代串口输入输出功能,而且只需要占用一根 I/O 线就可以实现。当然它的好处不仅仅体现在这里,在调试嵌入式操作系统代码时你会发现相当方便。不过本篇的重点不在如何利用它进行代码调试,而是如何使能这个功能(实际上只是因为才解决了这个问题,还没正式用它调试代码呢)。
对于 KEIL 的调试方法,我将总结三篇文章,这是第三部分”ITM 调试”,第一部分为”基础调试”,第二部分为”数据观察点”。
现在来看一看 ITM 调试的效果图:
以上所有的功能都是 KEIL 自带支持的。
1、如果资源之家】每日免费更新最热门的副业项目资源你想观察一个变量的波形怎么办?看第一幅图;
2、如果你想知道中断处理时间怎么办?看第二幅图;
3、如果你想查看程序运行过程是怎样的?看第三幅图;
4、如果你想在电脑上输出调试信息、或者想利用电脑的键盘输入信息,怎么办?看第四幅图。
相信以上问题已经充分调动了你的好奇心了,那么现在正式开始讲述如何利用 ITM 实现以上功能。
首先需要知道一点的就是 STM32 支持多种调试器,这里我以 ST-LINK 为例进行说明。
一般的 ST-LINK 都是采用四线制,即 VCC、GND、TMS/SWDIO、TCK/SWCLK,实际上只要再增加一根线就能实现 ITM 调试功能。那么这个神秘的 I/O 口是哪一个呢?
就是资源之家】每日免费更新最热门的副业项目资源 PB3 了,所以如果你需要使用 ITM 调试的话,你就需要保留这个 I/O 口了,不过这个 I/O 口的复用功能还挺多的,所以如果你想利用它的复用功能,就只能先用 ITM 调试其它的功能模块,和 PB3 有关的功能模块就留在最后用别的调试方法调试了。
对于实验室自制的 ST-LINK 需要引出一根线,即 PA10,最后的引出线如下所示:
这就是 ITM 的硬件支持了。这里再说一点,CMSIS-DAP 调试器并不支持这个功能,但是 J-LINK 是可以的。
现在再看看软件上需要怎么做。
首先在 KEIL 中启动这个功能:
这样就可以了(这只是最简单的配置,更具体的可以通过上面的界面根据需要自行配置)。
为资源之家】每日免费更新最热门的副业项目资源了实现调试信息的 printf 函数输出和 scanf 函数的输入功能,还需要在代码中增加一部分代码支持。可以采用如下最简单的代码实现:
// printf() 重定向
int fputc(int ch, FILE *f)
{
while (ITM->PORT[0].u32 == 0);
ITM->PORT[0].u8 = (uint8_t) ch;
return ch;
}
// scanf() 重定向
__IO int32_t ITM_RxBuffer = ITM_RXBUFFER_EMPTY; // 函数名必须是 ITM_RxBuffer
int fgetc(FILE *f)
{
int ch = -1;
whi资源之家】每日免费更新最热门的副业项目资源le(ITM_RxBuffer == ITM_RXBUFFER_EMPTY);
ch = ITM_RxBuffer;
ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */
return ch;
}
根据网上比较规范的写法是这样的:
这里的 ITM_CheckChar()、ITM_ReceiveChar()、ITM_SendChar() 函数在 core_cm3.h 中。而上面部分代码可以从安装路径下的 X:\Keil\ARM\Startup\Retarget.c 文件中进行修改。网上资料说 __backespace 函数也必须要资源之家】每日免费更新最热门的副业项目资源实现,实际测试发现并不需要。
然后说一说 ITM_RxBuffer 这个变量,需要首先初始化为 ITM_RXBUFFER_EMPTY,这个变量用于缓存键盘输入的数据的,当你从 Debug(printf)Viewer 中输入数据时,每输入一个数据,都会实时传输到这个变量当中,单片机就从这个变量获取键盘数据(这个变量的数据写入应该是通过 ST-LINK 写入的,毕竟 ST-LINK 是可以在线更改内存数据的)。
现在进入 debug 模式:
点击这个图标,就可以进行程序下载和进入 Debug 模式。
通过以下方式开启输入输出窗口:
然后就可以在这个窗口输入输出数据了:
然后是逻辑分析仪(这个功能将使用单独一小资源之家】每日免费更新最热门的副业项目资源节进行介绍):
首先添加需要观察波形的变量:
然后就能通过逻辑分析仪观察波形了:
如果说不能观察波形,那么试试改这个参数:
然后是跟踪功能窗口开启:
功能窗口:
测试示例代码:
现在有个问题就是有时候莫名其妙的就不能发送数据了,这个问题只能在深入调试机制后再看了。
ITM 的使用介绍基本就是这些了,后续将利用 uCOS II 操作系统实际调试一番!这里需要利用一个软件 uCProbe,感兴趣的可以自行尝试。
———————————————————————————-2019/02/15 Osprey
喜欢的话资源之家】每日免费更新最热门的副业项目资源记得关注鱼鹰并转发分享哦!!!