这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】KEIL(MDK)使用ST-LINK进行SWV调试的print​f输出(

共3条 1/1 1 跳转至

【原创】KEIL(MDK)使用ST-LINK进行SWV调试的print​f输出(hal库)--from哲

工程师
2024-09-18 17:38:31     打赏

序言

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

实操

接下来是实际操作

  1. 配置RCC和SYS

图片1.png

图片2.png

2.自定义引脚配置

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

1726651547525168.png

4.生成代码

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

来源:重新定义低级库函数,以便在 C 库中直接使用高级库函数https://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函数中添加测试语句

printf("systick:%d\r\n",HAL_GetTick());

HAL_Delay(1000);

7.

编译(编译器选择AC5/AC6都可以,但是AC6貌似不支持微库(会编译报错))

8.

调试配置(设置完成记得点击确认不然相当于没配置)

图片4.png

图片5.png

图片6.png

9.进入调试模式

图片7.png

10.添加printf输出视图

图片8.png

图片9.png

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

图片10.png

总结

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








专家
2024-09-19 11:57:53     打赏
2楼

谢谢分享!


专家
2024-09-25 10:05:00     打赏
3楼

过程很详细,容易阅读理解,谢谢分享!


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]