序言
看到立创天空星开发板的原理图有这样的描述
那这样的话岂不是可以画板子的时候少占用一个串口吗
百度之后发现原来我们经常使用的SWD调试是SW调试中的一种,还有一种SWV调试比SWD调试多使用一根SWO线。但是要提醒的是仅M3/4/7内核支持,M0和M0+不支持
实操
接下来是实际操作(通过查阅网友的经验知道的)
-
配置RCC和SYS
-
自定义引脚配置
-
配置时钟树(检查输入的时钟频率与板子晶振频率是否一致,并且记住配置好的频率)
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函数中添加测试语句
HAL_GPIO_TogglePin(USER_LED_GPIO_Port,USER_LED_Pin);
printf("systick:%d\r\n",HAL_GetTick());
HAL_Delay(1000);
7.编译(编译器选择AC5/AC6都可以,但是AC6貌似不支持微库(会编译报错))
8.调试配置(设置完成记得点击确认不然相当于没配置)![](https://i-blog.csdnimg.cn/direct/cbf0dece243c49bb82078b400c4f11d1.png)
![](https://i-blog.csdnimg.cn/direct/eef04072a83c4618ba43175d01d84990.png)
![](https://i-blog.csdnimg.cn/direct/59428a5990a24fc9958f4a216bcc86fb.png)
9.进入调试模式![](https://i-blog.csdnimg.cn/direct/4892f073080d4875a9bd762f4f219280.png)
10.添加printf输出视图![](https://i-blog.csdnimg.cn/direct/8b628c697ad242f7afbc38d63907c760.png)
![](https://i-blog.csdnimg.cn/direct/ae2b348c3cd640a5b85a5c16ff6ae1a8.png)
11.点击Run或者按下F5程序运行即可看到printf的输出![](https://i-blog.csdnimg.cn/direct/f1cde8670fe64ff9bf3b45afac401de5.png)
总结
SWV调试确实有很多优点,但是只能在调试窗口使用所以串口工具上那些比较方便的传输文件或者接收信息等功能就没有了。
所以SWO引脚的信息输出功能可能更适合单纯的系统信息提示或者报警之类的,确实无法去替代串口的功能(因为它不能接收数据),引脚资源比较少时倒是一个不错的选择。