0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用STM32F10xxx SWJ引脚作为标准IO

lcdz66 来源:雨飞工作室 2022-12-23 11:47 次阅读

本文介绍了如何使用GPIO固件库来释放SWJ-DP引脚(串行JTAG调试端口),并且重用为标准IO。SWJ-DP IO能够用作标准IOs,它的性能可以达到标准IO的80%。

09626282-81df-11ed-8abf-dac502259ad0.png

09902938-81df-11ed-8abf-dac502259ad0.png


当系统复位后,会默认把以上引脚复用为调试功能:PA15引脚复位后的主要功能为 JTDI、PB3为JTDO、PB4为JNTRST;如果把这些引脚作为普通引脚使用时,则需要进行重映射。通过设置复用重映射和调试I/O配置寄存器 (AFIO_MAPR) 的SWJ_CFG[2:0]位,可以改变上述重映像配置。

09ac55a4-81df-11ed-8abf-dac502259ad0.png

1、硬件描述

LED灯与SWJ-DP引脚相连。

09d6fd18-81df-11ed-8abf-dac502259ad0.png

2、固件描述

提供的GPIO驱动通过一系列的函数支持所有的GPIO 特性。

首先,SWJ-DP被禁用,SWJ-DP引脚配置为输出推挽式。5个LED连接到PA13(JTMS/SWDIO),PA14(JTCK/SWDCLK),PA15(JTDI),PB03(JTDO),PB04(JTRST),这些LED在无限循环中被翻转。

注意:一旦SWJ-DP被禁用,和主机的调试器的连接将断开。只要JTAG IO仍然禁用,就不能重新建立调试连接。为了避免这种情况,PB09被连接到一个按钮,该按钮用来禁用或者不禁用JTAG IOs。

●在复位时按钮按下,JTAG IO禁用。

●在复位时按钮没有按下,JTAG不改变。

3、注意事项

重映射的方式一共有三种。分别描述如下:

1.GPIO_Remap_SWJ_JTAGDisable:/*< JTAG-DP Disabled and SW-DP Enabled */  即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试。

2.GPIO_Remap_SWJ_Disable:/*< Full SWJ Disabled (JTAG-DP + SW-DP) */  5个引脚全为普通引脚,但不能再用JTAG&SWD仿真器调试,只能用ST-Link调试。

3.GPIO_Remap_SWJ_NoJTRST:/*< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */PB4可为普通IO口,JTAG&SWD正常使用,但JTAG没有复位。

如果你用到所有的五个引脚当做普通IO口,那么上述步骤二中的重映射配置应写为:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试,则重映射配置应写为:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);



举例:PA15管脚默认为JTAG接口的JTDI,做普通IO口使用时需Remap,否则将出现一直输出高电平的情况。

void BUZ_Init(void)
{ 
  GPIO_InitTypeDef GPIO_InitStruct;


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);


  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关键,禁用JTAG 只使用SWD
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_15;         
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //复用时钟使能,开启AFIO时钟

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//引脚影射,禁止JTRST功能
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStruct);
}



PB3这个调试引脚,比较特殊一点,需要设置 DBGMCU_CR寄存器,这个寄存器位说明如下:

09f3c0d8-81df-11ed-8abf-dac502259ad0.png

0a1fa662-81df-11ed-8abf-dac502259ad0.png

要做的就是配置TRACE_IOEN=0,不分配跟踪引脚。异步跟踪功能只能在SW-DP调试接口上实现,当我们在软件上选择使用SW-DP调试时,便会把一开始默认的JTAG-DP切换到SW-DP,而对应的,也会开启异步跟踪功能,使得我们可以在IDE上可以进入DEBUG模式调试。

释放PA15、PB3、PB4总的代码就是:

//不分配跟踪引脚,释放PB3
DBGMCU->CR=DBGMCU->CR&~((uint32_t)1<<5);  
//使能复用时钟和引脚 GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);  
//切换 SWJ调试,释放 PA15,PB4, PB3
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  

值得注意的是,当释放禁用了PB3的异步跟踪后,就无法正常进行DEBUG调试了。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 引脚
    +关注

    关注

    16

    文章

    1045

    浏览量

    48968
  • GPIO
    +关注

    关注

    16

    文章

    1135

    浏览量

    50578
  • STM32F10xxx
    +关注

    关注

    0

    文章

    25

    浏览量

    8203
  • 固件库
    +关注

    关注

    2

    文章

    93

    浏览量

    14837

原文标题:使用STM32F10xxx SWJ引脚作为标准IO

文章出处:【微信号:雨飞工作室,微信公众号:雨飞工作室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【资料分享】STM32F10xxx参考手册

    STM32F10xxx参考手册参考手册小,中和大容量的STM32F101xx, STM32F102xx和STM32F103xx ARM内核32位高性能微控制器导言本参考手册针对应用开发
    发表于 03-21 15:27

    STM32F10xxx Reference Manual

    "STM32F10xxx Reference Manual",出来献上薄礼一份。{:1:}
    发表于 04-27 10:59

    STM32F10XXX使用手册

    STM32F10XXX使用手册
    发表于 07-22 20:32

    STM32F10xxx标准外设库体系结构由什么组成?功能是什么?

    STM32标准外设库是什么?有什么优势?STM32F10xxx标准外设库体系结构由什么组成?功能是什么?
    发表于 09-27 06:56

    STM32F10XXX标准外设库介绍

    STM32F10XXX标准外设库是什么?怎样去使用STM32F10XXX标准外设库?
    发表于 09-30 07:45

    如何去使用STM32F10XXX标准外设库呢

    什么是STM32标准外设库呢?如何去使用STM32F10XXX标准外设库呢?
    发表于 11-02 09:14

    STM32F10xxx芯片调试接口用到哪些引脚

    STM32F10xxx芯片支持哪几种调试接口呢?STM32F10xxx芯片调试接口用到哪些引脚呢?
    发表于 12-06 06:02

    使用STM32F10xxx实现低成本现实的应用方案

    本文档适用于STM32F1系列微控制器。文档描述了在没有片内LCD驱动硬件的情况下,使用STM32F10xxx微控制器驱动LCD的技术。此技术提供了使用STM32F10xxx实现低成本现实的应用方案,可通过固件控制LCD对比度。
    发表于 12-01 06:26

    请问STM32F10xxx标准外设库最新的PDF文件/chm文件在哪里?

    现有的 STM32F10xxx 固件库用户手册 UM0427 将被删除,取而代之的是一个包含所有 STM32F10xxx 标准外设库组件的 CHM 文件。许多旧链接都失败了。最新的 PDF 文件/chm 文件在哪里?谢谢。
    发表于 12-30 06:04

    STM32F10xxx GPIO应用示例

    STM32F10xxx GPIO应用示例:这节介绍如何使用GPIO固件库来释放SWJ-DP引脚,并且重用为标准IO
    发表于 11-13 14:41 20次下载

    STM32F10xxx数据手册

    STM32F10xxx数据手册
    发表于 10-16 13:49 87次下载
    <b class='flag-5'>STM32F10xxx</b>数据手册

    STM32F10xxx使用教程之GPIO应用示例资料免费下载

    何使用GPIO固件库来释放SW.I-DP引脚(串行JTAG调试端口),并且重用为标准IO 把LED灯与SWJ-DP引脚相连 这篇应用笔记是为
    发表于 08-29 14:27 19次下载
    <b class='flag-5'>STM32F10xxx</b>使用教程之GPIO应用示例资料免费下载

    STM32F10xxx参考手册

    STM32F10xxx参考手册
    发表于 09-30 16:33 16次下载

    AN2953_如何从STM32F10xxx固件库V2.0.3迁移到STM32F10xxx标准外设库V3.0.0

    AN2953_如何从STM32F10xxx固件库V2.0.3迁移到STM32F10xxx标准外设库V3.0.0
    发表于 11-21 08:11 0次下载
    AN2953_如何从<b class='flag-5'>STM32F10xxx</b>固件库V2.0.3迁移到<b class='flag-5'>STM32F10xxx</b><b class='flag-5'>标准</b>外设库V3.0.0

    如何从STM32F10xxx固件库V2.0.3升级为STM32F10xxx标准外设库V3.0.0

    电子发烧友网站提供《如何从STM32F10xxx固件库V2.0.3升级为STM32F10xxx标准外设库V3.0.0.pdf》资料免费下载
    发表于 09-21 09:32 1次下载
    如何从<b class='flag-5'>STM32F10xxx</b>固件库V2.0.3升级为<b class='flag-5'>STM32F10xxx</b><b class='flag-5'>标准</b>外设库V3.0.0