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

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

[复制链接]
STMCU小助手 发布时间:2023-1-7 11:58
第一次画STM32 的PCB ,因为采用了SWD 调试,认为JTAG的引脚PB3,PB4,没有用到就做了普通IO口,麻烦从此引起了。

设置PB3,PB4均为输出口,且输出高电平,用万用表测量,PB4为高,PB3不是高电平,在看MDK 中的寄存器值,PB3,PB4都是高啊?寄存器的值怎么和实际的值不一样了?

唉,都让我怀疑是不是引脚接错了,反复测量后发现引脚确实是对的,但为什么PB3能输出高,而PB4不可呢?

不知道,问度娘,后来在一个帖子上发现了相关回复:

首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些
端口设置为普通I/O口。具体方法如下:
在GPIO_Configuration(); // 配置使用的 GPIO 口:

  1. GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
  2. // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
  3. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
  4. // 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能


  5.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
  6.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  8.   GPIO_Init(GPIOB, &GPIO_InitStructure);


  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
  10.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  12.   GPIO_Init(GPIOA, &GPIO_InitStructure);
复制代码

注意:不要忘记在RCC_Configuration()中开启AFIO时钟,
  //AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);


AFIO 时钟未设置,GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE) 这句不会生效,也就是要先设置时钟,才能配置相应端口


后变换了下顺序,先设RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);,再调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE)  就完美可以了
————————————————
版权声明:律随心动

收藏 评论0 发布时间:2023-1-7 11:58

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版