序言
百度发现原来我们经常使用的SWD调试是SW调试中的一种,还有一种SWV调试比SWD调试多使用一根SWO线。但是要提醒的是仅M3/4/7内核支持,M0和M0+不支持
实操
接下来是实际操作
配置RCC和SYS
2.自定义引脚配置
3.配置时钟树(检查输入的时钟频率与板子晶振频率是否一致,并且记住配置好的频率)
4.生成代码
5.在main.c添加以下代码(//建议在不开启微库下使用)
#define __FILE_INCOMPLETE 1//此句必须在#include <stdio.h>之前否则会报错
#include <stdio.h>
//建议在不开启微库下使用
//因为AC6编译器开启微库会报错
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef'd in stdio.h. */
FILE __stdout;
int fputc(int ch, FILE *f)
{
/* Your implementation of fputc(). */
char tempch = ch; // temp char avoids endianness issue
ITM_SendChar(tempch);//将字符输出到SWO引脚
return ch;
}
6.在mian函数中添加测试语句
printf("systick:%d\r\n",HAL_GetTick());
HAL_Delay(1000);
7.
编译(编译器选择AC5/AC6都可以,但是AC6貌似不支持微库(会编译报错))
8.
调试配置(设置完成记得点击确认不然相当于没配置)
9.进入调试模式
10.添加printf输出视图
11.点击Run或者按下F5程序运行即可看到printf的输出
总结
SWV调试的SWO输出确实有很多优点,但是SWO引脚的信息输出功能可能更适合单纯的系统信息提示或者报警之类的,确实无法去替代串口的功能(因为它不能接收数据),引脚资源比较少时倒是一个不错的选择。