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

STM32 中JTAG 引脚作为普通IO口设置方法

[复制链接]
STMCU小助手 发布时间:2023-1-7 11:58
第一次画STM32 的PCB ,因为采用了SWD 调试,认为JTAG的引脚PB3,PB4,没有用到就做了普通IO口,麻烦从此引起了。
6 X: Q; m3 V5 B( E6 o
2 {6 b  d1 a1 c! ]% T3 R) L设置PB3,PB4均为输出口,且输出高电平,用万用表测量,PB4为高,PB3不是高电平,在看MDK 中的寄存器值,PB3,PB4都是高啊?寄存器的值怎么和实际的值不一样了?
1 k  _1 n# \/ |* r6 `; _7 f
* v# L7 T. x* O) F& g- K. W唉,都让我怀疑是不是引脚接错了,反复测量后发现引脚确实是对的,但为什么PB3能输出高,而PB4不可呢?' [, F$ `4 F; F: v+ k7 ]
2 j- G# H( Z: N+ A5 H& @
不知道,问度娘,后来在一个帖子上发现了相关回复:
1 v: E1 T2 A  z+ P5 K3 V

+ O, P, e; K- v7 g5 ~8 }首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些/ R0 S8 W4 Y3 g; N: k) U
端口设置为普通I/O口。具体方法如下:- u  j* t! I/ C" q
在GPIO_Configuration(); // 配置使用的 GPIO 口:
( C3 A+ }0 w& p& W* @$ O/ S
, v3 a4 M' Q2 D
  1. GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);. V% J( I# S% b2 X! q
  2. // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
    7 o8 Q" b! M( i. {. L
  3. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
      z) o$ d* d2 U( n5 D6 f
  4. // 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能: W0 B/ S# Q  r# ^) ?& N0 m# o1 m
  5. : L/ _( K# t, c+ ]% ?

  6. 6 }" s! _" w. R, I5 |
  7.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;- Z- q, g% m' w. F  \
  8.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;; m/ \2 B0 Q9 m  _' @
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    ! v6 E- U* m- M6 m
  10.   GPIO_Init(GPIOB, &GPIO_InitStructure);8 d/ u. A0 J5 l+ Z/ H% X$ M5 l
  11. 5 ?+ x& |7 ^& Z
  12. + m: x9 Y# M% }4 X
  13.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;# H6 W: ^8 X0 m0 V4 \3 R
  14.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    / o9 B6 l5 G- N0 y) H/ ^, w
  15.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    * l6 z9 _0 x$ o6 l) f1 t
  16.   GPIO_Init(GPIOA, &GPIO_InitStructure);
复制代码

2 o7 B+ g* _/ ^# b% u注意:不要忘记在RCC_Configuration()中开启AFIO时钟,) O7 J7 z5 S4 G9 X! s( X
  //AFIO时钟3 X- X4 i% N4 F% Z, h- D0 \) k  J
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
6 [. `8 t% u5 a4 d+ P# {. U3 h0 C, o( z

4 {: h9 K0 u. k: a9 L6 y/ Z! IAFIO 时钟未设置,GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE) 这句不会生效,也就是要先设置时钟,才能配置相应端口
5 _; A, I! a; _7 ]0 C
* l( C) \' z% e3 }

) S7 Q# n( y% z  B后变换了下顺序,先设RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);,再调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE)  就完美可以了7 P4 x, K9 n9 f6 G9 m( o9 b
————————————————
4 K0 x! h1 k0 T* `& A8 V版权声明:律随心动( i1 E  \) i; l. ]6 b8 j
$ O2 U1 R; J( K  \3 G
赞 收藏 评论0 发布时间:2023-1-7 11:58

举报

0个回答

所属标签

相似技术帖

官网相关资源

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