你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用SW-DP调试失败的解决方法

[复制链接]
mantishell 发布时间:2016-10-7 15:11
    前些日子买了块板子,当时比较忙就束之高阁了。最近要用到USB,手里没有一块合适的板子,然后就想到了它。和板子配套的程序是C++编写且不开放源码,没有实现USB功能,添加起代码来比较费劲,然后就想到了st提供的CubeMX。然后用它生成工程后先要调试一把试试感觉,结果问题来了。- T. S5 r+ a1 [) M' \# Y& m: H
- \  d. r+ t% h2 @: l3 d
    烧写完一次后,不能再次烧写,开始以为是硬件的问题,查来查去没有发现硬件哪里有问题。最后发现问题在调试的那几个引脚上。7 t6 |3 o- Q; C0 N
1 S( Q4 ]' G- W
    通常我使用的是jlink仿真器,使用的引脚是
. ]4 `  `* m  Y8 K- V    PA13--SWDIO* I( w% A; }1 ~$ V7 h
    PA14--SWCLCK
9 G5 C* g5 x, T0 F    PA15--JTDI/ S$ P, w. E  v9 p1 |! t3 t5 x5 Y
    PB3--JTDO
8 }( D6 K: a+ p( B( a    PB4--JNTRST
. j( a8 A8 m0 r& C) T# |# P
+ e& p4 R) p$ O$ I- d    而这个板子只使用了PA13和PA14作为调试引脚。( R  F6 }  n- e+ W9 |/ a
7 W6 r# [( v/ n0 F4 _2 _9 B
    找到了这个地方,再看下数据手册。为了在调试期间可以使用更多的GPIOs,通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)的SWJ_CFG[2:0]位可以改变重映射配置。
; h" r5 M/ x. k" J3 x( J QQ截图20161007151234.png
& a5 ~+ S6 o, x5 n4 I
    现在的重映射需要再寄存器里更改一下' _# s8 T& M2 x# b0 J: s
QQ截图20161007151554.png

: m; J. l* A& v( v2 T+ t( \$ c

! n7 Z" ~* k5 ?6 J9 x- H* [6 U    好了找到寄存器的重映射,

4 @. q4 b" I& D+ d8 j8 A- Q. c* i
#define AFIO_MAPR_SWJ_CFG_Pos                (24U)                             
( R, U* ~  m1 I% d2 ?. X#define AFIO_MAPR_SWJ_CFG_Msk                (0x7U << AFIO_MAPR_SWJ_CFG_Pos)   /*!< 0x07000000 */' O  ^5 i9 s" E3 r2 o9 m& x
#define AFIO_MAPR_SWJ_CFG                    AFIO_MAPR_SWJ_CFG_Msk             /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */
% g+ R( t. ~, ^9 O
#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos    (25U)                             : c7 U) H0 \' G* h6 I) n4 L3 K8 G
#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk    (0x1U << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */
5 h. ~  |+ V% d#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE        AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk /*!< JTAG-DP Disabled and SW-DP Enabled */  x7 w1 s! k+ T" h3 s& A/ {1 X
' {2 n" _4 r6 p" |* |/ s* n
#define READ_BIT(REG, BIT)    ((REG) & (BIT))
#define CLEAR_REG(REG)        ((REG) = (0x0))
#define WRITE_REG(REG, VAL)   ((REG) = (VAL))
#define READ_REG(REG)         ((REG))
#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))9 B. U& s2 \. f1 _- U6 a
% P: Y5 g* D0 m" i# o5 i' V
#define __HAL_AFIO_REMAP_SWJ_NOJTAG()   MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_JTAGDISABLE)
5 T, g6 ?4 K5 b4 Y: M& b/ k
* J: [0 d: p( X% y) I& ^4 E
    当程序调用一下这条语句:__HAL_AFIO_REMAP_SWJ_NOJTAG();就可以了。
. ~9 P9 g2 v/ S! x8 ^

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

赞 收藏 2 评论1 发布时间:2016-10-7 15:11

举报

1个回答
zhangdaijin 回答时间:2016-10-7 18:27:00
支持一下
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版