KEIL(MDK)使用ST-LINK进行SWV调试(hal库)

序言

看到立创天空星开发板的原理图有这样的描述

那这样的话岂不是可以画板子的时候少占用一个串口吗

百度之后发现原来我们经常使用的SWD调试是SW调试中的一种,还有一种SWV调试比SWD调试多使用一根SWO线。但是要提醒的是仅M3/4/7内核支持,M0和M0+不支持

实操

接下来是实际操作(通过查阅网友的经验知道的)

  1. 配置RCC和SYS

  2. 自定义引脚配置

  3. 配置时钟树(检查输入的时钟频率与板子晶振频率是否一致,并且记住配置好的频率)

4.生成代码

5.在main.c添加以下代码(//建议在不开启微库下使用)

来源:重新定义低级库函数,以便在 C 库中直接使用高级库函数icon-default.png?t=N7T8https://developer.arm.com/documentation/100073/0622/The-Arm-C-and-C---Libraries/Redefining-low-level-library-functions-to-enable-direct-use-of-high-level-library-functions-in-the-C-library?lang=en

#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.调试配置(设置完成记得点击确认不然相当于没配置)

9.进入调试模式

10.添加printf输出视图

11.点击Run或者按下F5程序运行即可看到printf的输出

总结

SWV调试确实有很多优点,但是只能在调试窗口使用所以串口工具上那些比较方便的传输文件或者接收信息等功能就没有了。

所以SWO引脚的信息输出功能可能更适合单纯的系统信息提示或者报警之类的,确实无法去替代串口的功能(因为它不能接收数据),引脚资源比较少时倒是一个不错的选择。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值