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

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

[复制链接]
mantishell 发布时间:2016-10-7 15:11
    前些日子买了块板子,当时比较忙就束之高阁了。最近要用到USB,手里没有一块合适的板子,然后就想到了它。和板子配套的程序是C++编写且不开放源码,没有实现USB功能,添加起代码来比较费劲,然后就想到了st提供的CubeMX。然后用它生成工程后先要调试一把试试感觉,结果问题来了。+ d7 Q8 U: n8 ^- m% i0 Q' t
3 s* S+ X, I8 ~
    烧写完一次后,不能再次烧写,开始以为是硬件的问题,查来查去没有发现硬件哪里有问题。最后发现问题在调试的那几个引脚上。/ S$ Z  C" ~" o% E9 C1 M, a" p1 ~
) p: w6 x! m2 I. o4 O' {
    通常我使用的是jlink仿真器,使用的引脚是
: h2 J* F) g5 N* u; P2 H8 w    PA13--SWDIO, S, K- ]7 s" H" ^
    PA14--SWCLCK
- b0 d. @9 P: B7 @7 Q    PA15--JTDI2 |' W- c" ?7 \- D( z
    PB3--JTDO7 H! L  I* |* w. A8 a( t- O
    PB4--JNTRST
7 a6 {+ H+ O$ O& [# z
6 S% Q0 z0 V, |3 u! j    而这个板子只使用了PA13和PA14作为调试引脚。
; ]: [) Y+ n0 Q/ R% x$ _/ V  W" P* }1 W" q
    找到了这个地方,再看下数据手册。为了在调试期间可以使用更多的GPIOs,通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)的SWJ_CFG[2:0]位可以改变重映射配置。# }) x* N+ D2 c1 `2 ]1 Z- @- x! g
QQ截图20161007151234.png
  G  ^5 b1 `7 O1 B2 c3 f; [" y; B" U
    现在的重映射需要再寄存器里更改一下
1 G6 Q% O5 p+ p1 z% S1 |0 o) Q
QQ截图20161007151554.png
% O' v- C1 _4 k  j/ z

+ t: \5 Q, h" h    好了找到寄存器的重映射,

/ n/ L3 ^) m. R* H* i( |
#define AFIO_MAPR_SWJ_CFG_Pos                (24U)                             
( J4 Q0 f( h& J5 D9 n#define AFIO_MAPR_SWJ_CFG_Msk                (0x7U << AFIO_MAPR_SWJ_CFG_Pos)   /*!< 0x07000000 */# q1 I; ^* R* F
#define AFIO_MAPR_SWJ_CFG                    AFIO_MAPR_SWJ_CFG_Msk             /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */

9 T' U8 L6 m# |  S#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos    (25U)                             8 G! D& F6 B* Z& P" l6 [3 ]
#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk    (0x1U << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */) ^  s9 G" I- R' M, S0 l
#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE        AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk /*!< JTAG-DP Disabled and SW-DP Enabled */5 R+ s, @6 w( T9 y1 y

1 ?; @& `0 \# b4 x! b+ L3 Z1 t
#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)))8 n/ T% f- Z) l/ r
! Y/ r" y9 |, R2 C$ B4 t: t7 D/ E
#define __HAL_AFIO_REMAP_SWJ_NOJTAG()   MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_JTAGDISABLE)4 r, B# f. y$ v/ i; M
6 W( Q3 s# m/ H" m
    当程序调用一下这条语句:__HAL_AFIO_REMAP_SWJ_NOJTAG();就可以了。" v' n5 b. Z1 P4 ^/ \( u$ j! f

评分

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

查看全部评分

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

举报

1个回答
zhangdaijin 回答时间:2016-10-7 18:27:00
支持一下

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版