STM32 6根线SWD的接法
发布日期:2021-06-30 22:01:50
浏览次数:2
分类:技术文章
本文共 2295 字,大约阅读时间需要 7 分钟。
前言
最初改STM32F407板子的时候,因为同事没引出SWO线,导致不能用ITM,调试很不方便。
改了一个临时板子,因为没做验证实验,居然将SWD线引出错了,导致板子废了。 这次,找到一个引脚都引出的开发板(STM32F407ZG(144管脚)),用杜邦线验证了6线SWD的接法,单步调试和打印ITM都正常。试验
从JLINK仿真器出口接了一块转接板,在6线接口处用杜邦线直接和板子上引出管脚连接。
转接板上6针插座的管脚定义
备注:<2021_0114_1711>如果不是自己做的转接座,要注意核对调试插座的6个引脚定义,是否和下面的定义相同。
从x宝上上买了多次JLINK转接座,刚才要调试一个新打样的板子,因为调试用的东西丢公司了,从家里屯的JLINK转接座随便抓起一个,居然和我当时做下面实验的转接座不一样,坑货…我这次打样的板子,调试接口的定义的6pin插座和下面的转接座相同,准备直接用6pin排线插座(两端都是母座,一边插入JLINK转接座上的6pin插座,一边插入板子的6pin插针),这要是没核对,这次惨了。
调试插座如果插反了(VREF, GND反了),板子一定烧了,相当于将电源和地短路了。前一段时间,因为插错调试接口方向, 就将焊接了一下午的打样板子都烧了。
有的调试转接座,VREF, GND在一边,还好些。像VREF,GND对称布置在6pin插座两边的,可要小心。要不自己做个JLINK转接板,和x宝上卖的JLINK转接座长的不一样,自己每次调试,都用自己的转接座,这样也不会弄错。
VREF : 接板子上的参考电压(3.3V), 这个参考电压,就是板子上MCU用的3.3V电源网络。 SWDIO : SWD接口的输入数据线(从JLINK到板子) SWCLK : SWD接口的时钟线 SWO : SWD接口的输出线(从板子到JLINK) NRST : 接板子上MCU的复位引脚 GND : 和板子的数字地相连。转接板和MCU板的6线连接线序
转接板 => MCU板
VREF(转接板6线插座_1脚, 红色线) => 随便在板子上找个3.3V引出管脚 SWDIO(转接板6线插座_2脚, 绿色线) => MCU_PA13 SWCLK(转接板6线插座_3脚, 蓝色线) => MCU_PA14 SWO(转接板6线插座_4脚, 黄色线) => MCU_PB3 NRST(转接板6线插座_5脚, 橙色线) => MCU_NRST no.25脚,因为这个管脚没引出,就接在JTAG插座的no.15脚 GND (转接板6线插座_6脚, 锗色线)=> 随便在板子上找个GND引出管脚连接完的接线图
6根线SWD原理图
设置ITM
顶级菜单 => Project => Options for Target ‘xx’ … => Debug => Settings
作2个ITM封装的文件,加入工程// @file \BSP\itm\my_ITM.h#ifndef __MY_ITM_H__#define __MY_ITM_H__#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))#define TRCENA 0x01000000struct __FILE { int handle; /* Add whatever you need here */ };#endif // #ifndef __MY_ITM_H__
// @file \BSP\itm\my_ITM.c#include "my_ITM.h"#include#pragma import(__use_no_semihosting)FILE __stdout;FILE __stdin;void _sys_exit(int x) { x = x; }int fputc(int ch, FILE *f) { if (DEMCR & TRCENA) { while (ITM_Port32(0) == 0) { }; ITM_Port8(0) = ch; } return(ch);}
测试ITM
多拉出一根SWO, 就是想全速调试时,看ITM的printf输出.
编译工程时, 为了防止编译问题,需要全部编译工程才靠谱.
在实现中加入printf打印语句 在调试时,在程序入口处断住时,打开printf查看窗口 顶级菜单 => View => Serial Windows => Debug(printf) Viewer 当程序全速跑起来时,在printf查看窗口,就能看到printf打印的内容了 如果现场出了问题,可以让现场同事,接上JLINK,用C:\Program Files (x86)\SEGGER\JLink\JLinkSWOViewer.exe 就能看到调试信息,不需要给他工程。转载地址:https://lostspeed.blog.csdn.net/article/details/103437050 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月06日 23时53分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2021.6.1 Array补充
2019-04-30
【收藏】Markdown笔记
2019-04-30
离散数学-图论
2019-04-30
啊沙发沙发
2019-04-30
2021-07-02
2019-04-30
「收藏」HTML笔记-持续更新中
2019-04-30
数据结构期末复习------排序汇总
2019-04-30
数据结构期末复习------查找汇总
2019-04-30
SpringBoot内置Tomcat配置参数
2019-04-30
Nginx基本知识
2019-04-30
微服务公用实体类andLombok
2019-04-30
小问题
2019-04-30
Spring Security之旅————————————基本介绍安装(1)
2019-04-30
Spring IO Platform学习
2019-04-30
局部加权回归
2019-04-30
已知后序和中序求层序
2019-04-30
1051. Pop Sequence (25)
2019-04-30
ELK系列:新版ELK安装(windows与linux环境)
2019-04-30