首先不是说嫌弃串口,串口调试大多数时候是最可靠的, 而且好多时候根本没有别的用,串口基本上永远是available的, 就像不离不弃的老朋友.
但是起码有如下几个时候用串口不方便:
1.引脚被占用
2.串口要接其他模块
3.需要打印实时性较强,串口设定得快也得考虑电脑串口的最高波特率, 一般情况下256000就是上限
4.就是不想接串口线...或者根本没有串口线....
那么这时候,就应该使用ITM打印了, 尤其是ST做的Nucleo,Discovery板子, 已经把SWO跟你接上了, 不用就是对不起ST.
当然也要提醒一下, ITM打印在某些M0的片子上没有, 比如XMC1100系列, 还有的同学只有那种最便宜的STlink,四根线那种,也没法用ITM
但总而言之,多掌握一种调试方法总是好的, 实际情况下有更大的自由度.
闲话结束, 步入正题.
首先把你的工程架起来, 我手上是STM32F413 Nucleo的板子, 事实上任何一个STM的Nucleo,Discovery板子都是一样设置.
这里假定你已经用CubeMX或者自己从头到尾建立起可用的F413工程起来了.
第一步:重定向STDOUT,如果是用MDK5新的Runtime的工程,点这里:
打开后选这里:
整好后,点确认.先不慌重新编译.
第二步:设置ITM监视Port
把项目的选项打开,到这界面来:
这几个地方注意点就可以了, 时钟要跟你HCLK一样, Trance Enable要打开, 下面的那些端口默认都是打开的,用两个一头一尾两端口就够了,多了会拖速度. 当然这个Trace功能一定会拖一点速度的.
第三步:加打印, 重新编译,调试
主循环中加一句比如这样的代码:
printf("This is a printf Test %u\n", i++);
下载 调试.
打开这窗口:
看到有输出就可以确定功能设置好了.
当然你要调试的位置都得加打印, 其余工作就可以开展了.
除了Keil自己的prinf窗口 这个工具也能看输出:
个人人觉得能用这个窗口的情况, 尽量不要用串口打印来调试.
多谢观看.
|