32F103xx系列单片机/PA13|PA14|PB15|PB3|PB4作为普通GPIO口/JTAG|SWD调试仿真接口作为GPIO使用/GPIO_SWJ_SWDPENABLE_REMAP

相信大家在对单片机编程时都遇到过端口复用的问题,特别是在引脚数量有限的MCU当中;今天给大家讲解下在使用ARM Cortex-M内核的下载/调试接口JTAG和SWD引脚如何作为普通GPIO的使用方法。

一、准备工作

1、32F103xx系列单片机的用户手册和数据手册【我这边以国产GD32系列单片机为例】

二、JTAG|SWD调试仿真接口讲解

1、前言:在产品的软件开发阶段,单片机的调试是一个很关键的步骤,然而很多山寨的程序在开发中,甚至都没有调试的概念,而只是把程序生成的映像文件hex或bin,通过串口直接烧入片子,再根据错误症状来判断问题,然后修改程序重新烧,周而复始,直到问题解决或放弃为止。在开发比较大的应用程序时,强劲的调试手段是非常重要的。当 bug 复杂到无法分析时,只能用调试来追踪它。如果没有调试手段,简直就束手无策。正因为此,在 CM3 中,调试机能突然在一夜之间,就从丑小鸭变成了白天鹅,得到了登峰造极般的,令人非常惊艳的强化。CM3 提供了多种多样的调试模型和调试组件,其中我们使用做多的莫过于JTAG和SWD的调试仿真接口了。

2、接口定义

在用户手册的调试章节中,我们会看到如下的介绍:

可以看到这里讲解的是ARM Cortex-M3内核,并不是某一款单片机的型号,所以在使用ARM Cortex-M3内核单片机时都有相同且标准的调试接口,大家可以以一举三,适用于任何CM3的内核MCU;

关于具体引脚的定义如下:

需要注意的是,下面红色框框中的引脚在MCU上电复位后的功能是调试模式,具体引脚定义和引脚功能描述可以在数据手册中进行查看(PA13/PA14/PA15/PB3/PB4):

简单总结JTAG|SWD调试仿真接口引脚定义如下:

那么如何把引脚作为普通的GPIO使用呢?

下面图中给出了我们禁止JTAG|SWD调试仿真接口寄存器设置方法:

三、JTAG|SWD调试仿真接口作为GPIO口使用的具体方法:

如果仅仅是把调试接口作为普通的GPIO口,根据上图可知:我们可以通过配置SWJ_CFG[2:0]寄存器的这三个bit位即可(可以看出默认000的情况下,MCU的PA13/PA14/PA15/PB3/PB4引脚都是作为了调试接口),当然如果采用库函数进行开发的话,也可以通过相应的API函数进行配置;

 gpio_pin_remap_config(uint32_t gpio_remap, ControlStatus newvalue);

//其中参数uint32_t gpio_remap有以下几种选择:
GPIO_SWJ_NONJTRST_REMAP    // full SWJ(JTAG-DP + SW-DP),but without NJTRST,对应寄存器SWJ_CFG[2:0]的001;注明:这种方式下可以使用JTAG和SWD的接口进行程序下载;
GPIO_SWJ_SWDPENABLE_REMAP  //JTAG-DP disabled and SW-DP enabled,对应寄存器SWJ_CFG[2:0]的010;注明:这种方式下可以使用SWD接口进行程序的下载;JTAG接口已经不能在使用了,此种方式使用最为广泛;
GPIO_SWJ_DISABLE_REMAP     //JTAG-DP disabled and SW-DP disabled,对应寄存器SWJ_CFG[2:0]的100;注明:仿真调试接口被全部禁止,所以引脚都作为了GPIO口进行使用,除非GPIO引脚十分紧张的情况下,否则不推荐采用此种设置方法,会造成使用SWD时程序下载和仿真都失效的情况;当然在实际的使用过程中,还是需要根据自己项目的真实情况进行相关引脚的配置。

针对GD系列的单片机,可以参考以下的代码(GD32F103RCT6为例):

void LED_Flash_Init(void)
{
 
	//Enable the peripherals clock
	rcu_periph_clock_enable(RCU_GPIOA);
	rcu_periph_clock_enable(RCU_GPIOB);
	
	/* configure led GPIO port */ 
	gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_15);
	gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3|GPIO_PIN_4);
	
	//设置初始化后的引脚电平状态
	gpio_bit_set(GPIOA,GPIO_PIN_15);
	gpio_bit_set(GPIOB,GPIO_PIN_3|GPIO_PIN_4);
	
}


/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
  //For use the delay function 
	systick_config();	
	
	
	//For use the Printf function 
	USART_Init();
	
	rcu_periph_clock_enable(RCU_AF);	
//	gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP,ENABLE);			//full SWJ(JTAG-DP + SW-DP),but without NJTRST
	gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);		//JTAG-DP disabled and SW-DP enabled
//	gpio_pin_remap_config(GPIO_SWJ_DISABLE_REMAP,ENABLE);				//JTAG-DP disabled and SW-DP disabled
	
	
	printf("JTAG-DP disabled and SW-DP enabled demo code\r\n");	
	printf("PA13/PA14 USE SW-DP, PA15/PB3/PB4 USE GPIO\r\n");	
	//For use the GPIO function 
	LED_Flash_Init();

	while(1)
	{
		
		//Led light on
		gpio_bit_set(GPIOA,GPIO_PIN_15);
		gpio_bit_set(GPIOB,GPIO_PIN_3|GPIO_PIN_4);
		delay_1ms(500);

		//Led light off
		gpio_bit_reset(GPIOA,GPIO_PIN_15);
		gpio_bit_reset(GPIOB,GPIO_PIN_3|GPIO_PIN_4);
		delay_1ms(500);

    }
}

需要特别说明,因为此功能涉及到了复用功能,有操作AFIO_PCF0的寄存器,所以同样需要打开AF时钟,库函数操作如下:

rcu_periph_clock_enable(RCU_AF);

四、如何恢复SWD的功能:

如果在使用的过程中配置为了GPIO_SWJ_DISABLE_REMAP,SWD的功能都禁止了,那么单片机是不是就废了,这颗MCU就不能再进行仿真的操作了呢?答案是否定的,首先是需要把代码中的GPIO_SWJ_DISABLE_REMAP替换为GPIO_SWJ_SWDPENABLE_REMAP ,替换后重新去编译工程文件,生成最新的Hex文件;然后可以通过以下两种方案进行解决:

1、在复位引脚上下功夫,操作相对简单,但是有一定的技巧性:

如果MCU的复位操作是通过外部物理按键实现的话,可以按住复位按键,再点击download程序下载按钮,此时再同步松开MCU的复位按键,特别注意复位按键松开的时间和点击下载按钮的时间需要保持一定的同步,所以说有一定的技巧性;如果设备没有复位按键,同样可以采用镊子短路复位引脚上的电容进行实现;

2、采用MCU的ISP方式进行程序的再次下载,这个需要硬件上修改BOOT的上下拉电平配置,操作上相对复杂一些:

因为MCU在出厂前都有一段固定在Flash内部的BootLoader,通过串口可以进行程序的下载;但需要通过修改Boot的连接方式,具体Boot的配置如下第②中方式:

然后通过MCU原厂的ISP上位机即可实现单片机的ISP程序下载,UART的配置一般为115200-8-1-N,如果你恰巧使用的是GD的MCU,可以通过搜索“GigaDevice_MCU_ISP_Programmer_V3.0.2.5782”进行免费获取。

以上就是针对Cortex-M内核MCU中JTAG|SWD调试仿真接口做为普通GPIO使用的简单说明,希望可以帮助到正在不断调试的你。

------------------------------------------------------------------------------------------------------------------------------------------

因为小编自己能力水平有限,文中难免有错误或表达不到的信息,还望广大阅读者留言批评指正,谢谢。

基于STM32单片机设计的智能水温控制系统
01-18 5335
本项目研究并实现了一种基于STM32单片机的智能水温控制系统。系统以STM32F103RCT6作为主控制器,通过DS18B20温度传感器实时采集水温数据,利用PID控制算法精确调节5V直流防水型70W加热棒的功率输出,确保水温恒定在设定范围内。此外,采用OLED显示屏显示当前水温和预设上限阀值,并集成ESP8266-WiFi模块与自研Android手机APP进行远程通信和控制。用户可通过本地按键或手机APP设置温度阀值,实现实时监控与智能化管理。整个系统设计旨在提高水资源利用效率,提升生活及工业用水环境的舒
使用STM32CubeMX实现STM32F103C8T6bulepill简单的LED灯点亮
qq_74234033的博客
05-24 913
初步学习了STM32CubeMX的使用,了解到其运行方法,这个工具极大地提升了stm32的开发的便捷性。
STM32 中JTAG 引脚作为普通IO设置方法
北风
06-21 3万+
第一次画STM32 的PCB ,因为采用了SWD 调试,认为JTAG的引脚PB3,PB4,没
STM32 JTAG的引脚用作GPIO引脚
asdfjkl01的专栏
11-19 2955
STM32启动时默认PB4PB3、PA15三个引脚不是普通IO,而是JTAG的复用功能,分别为JNTRST、JTDI、JTDO。
电子电路设计日志(1):Type-C接口使用 | JTAG & SWD 接口定义了解
最新发布
Xmasacm的博客
09-13 640
本次主要了解USB2.0使用场景下的知识。只了解可能用到的部分。
GD32笔记(一)--GPIO_SWJ_DISABLE_REMAP按下复位烧录出现Could not stop Cortex-M device!Please check the JTAG cable
yasinawolaopo的博客
12-09 932
使用SWJ_DISABLE_REMAP函数(关闭SW烧录函数)之后出现Could not stop Cortex-M device! Please check the JTAG cable.问题后怎么烧录程序
GD32F103xx用户手册V1.0
07-22
GD32F103xx用户手册V1.0(中文版)
STM32F1系列PB3PB4PA13PA14,PA15用作普通IO的特殊配置
热门推荐
qhw5279的博客
05-22 6万+
最近博主用STM32F103C8T6做了一个温度测控模块,用到PB3PB4,PA15等引脚控制外设。发现不管怎么配置,这三个引脚都不能置零。后来发现是包括这三个引脚在内的PB3PB4PA13PA14,PA15是特殊的IO,用作JTAG/SWD仿真器调试接口。其中PA13PA14分别作为SWD调试的SWIO和SWCLK;PB3PB4PA13PA14,PA15共同用于JTAG。这五
JTAGSWD的引脚占用
weixin_42595206的博客
12-18 1622
在用STM32F103ZET6的时候,对于JTAGSWD的引脚PB3.PB4.PA13.PA14.PA15在程序下载之后不会输出程序所要求的电平状态,在这种情况下需要将这些引脚默认的功能重映射为普通IO管脚。SWJ(SWD+JTAG)引脚说明: 灵活的引脚配置: 具体的代码: void JTAG_Set(u8 mode) { RCC_APB2PeriphClockCmd(RCC_APB2Pe...
STM32F1系列简单介绍及入门学习
houlile_sunny的博客
10-09 1万+
STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星。STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。ARM 公司并不生产芯片,而是出售其芯片技术授权。
GD32F103xx系列芯片的数据手册
06-01
这是关于国产GD32F103xx系列芯片的数据手册,因为之前这方面资料网上比较难找,所以特别分享
原创GD32与STM32 引脚复用问题-GPIO_SWJ_NONJTRST_REMAP/GPIO_SWJ_SWDPENABLE_REMAP/GPIO_SWJ_DISABLE_REMAP
11-30 2161
- 完全禁用SW+JTAGPA13PA14、PA15、PB3PB4可用,会导致无法下载程序,不建议采用此选项,之前在设计产品时,使用此方式导致MCU无法烧录,进而无法使用GPIO_SWJ_DISABLE_REMAP – 完全禁用SW+JTAGPA13PA14、PA15、PB3PB4可用,会导致无法下载程序,不建议采用此选项,之前在设计产品时,使用此方式导致MCU无法烧录,进而无法使用。用SW,禁用JTAG烧录,释放PA15、PB3PB4普通IO可用;
STM32调试记录-JTAG接口当作普通GPIO使用
qq_30136173的博客
08-18 1230
因项目中STM32的GPIO不够,使用JTAG的部分管脚为GPIO,保留SWJ接口。需要调用: // 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); 如过连同SWJ都要禁用,则: // 改变指定
STM32-GPIOJTAG
MR_Fclef的博客
02-21 1785
1.TTL施密特触发器有开/关,相应的一个32位锁定寄存器(GPIOx_LCKR)可以控制开关让输入数据寄存器保持当前的状态,达到一个锁定的效果,在某些应用场合很有效果。   2.GPIO的每个位可以由软件分别配置。 输入模式: 输入浮空            输入上拉            输入下拉            模拟输入 输出模式: 开漏输出(I2C)      
模拟JTAG协议脱机编程
beiguodexueCSDN的博客
08-01 6590
        已经做了将近20天了吧,今天总算是把程序在从机上实现了,今天写博客和大家分享下。 所用的主机是STM32C8T6,从机是MSP430,现在实现的功能是通过模拟JTAG协议,把点亮LED灯的程序下载进从机,并且能够控制从机的LED亮。   一:       首先说下所用到的工具,文档和相关代码。      1.最重要的文档是英文文档《430 Memory Programmin...
SWD 仿真模式
xiaoxingzi_gxz的博客
01-31 1619
转自https://zhidao.baidu.com/question/1540350472729018387 1)SWD 仿真模式概念简述 先所说 SWD 和传统的调试方式有什么不一样: 首先给大家介绍下经验之谈: (一): SWD 模式比 JTAG 在高速模式下面更加可靠. 在大数据量的情况下面 JTAG 下载 程序会失败, 但是 SWD 发生的几率会小很多. 基本使用 JTAG 仿真模式的情...
关于STM32F4 SWD复用为普通GPIO做输入输出用
u010134355的博客
12-08 5125
首先板子上电启动默认是SWD模式。 对于F1系列,复用SWD普通GPIO,可以调用这个函数进行专门的禁止: 对于F4系列,首先我们要认识到一点,系统上电后,所有引脚都是AF0复用,F4系统共支持AF0-AF15种复用 具体到每种复用,查看数据手册就行,比如这个: ==================================================== 对于F4系列,没有专门的禁止函数了,系统上电,这几个引脚默认是配置成AF0复用,且用于JTAG/SW调试模式。 ● PA15: JTDI 处
STM32将PA13/PA14当做普通IO使用,无法下载程序解决方法
ic2121的博客
02-09 5026
毕竟程序下载不进去是更大的麻烦,如果MCU有其他的IO,尽可能选择其他的IO,如果IO都用完了,那你还是选其他IO更多的MCU吧,总之不建议将这两个当IO来使用。主函数里面是PA13PA14输出高电平,万用表测量确实都为高电平,说明程序下载成功,且PA13 PA14成功配置为IO输出。、PA14一般用来当做下载,但是如果想要将其当做IO来用,也是可以的,但是不建议将这两个来做IO。弊端也随之而来,当你修改程序,重新下载的时候,哦吼,程序下载失败。二、如何将PA13/PA14当做普通IO使用
STM32 单片机之 串重映射(USART Remap)
* . Benirus的专栏
01-05 1万+
大家好,从今天开始.本人将自己在工作中遇到的问题 和学习体会 跟大家一起分享并探讨.下面跟大家说一下STM32单片机的端重映射,因为是以自己为实例.这里是以USART1的重映射为例..          因为我要一个TFT_LCD屏的主控板,考虑到FSMC 我选用了STM32F103VCT6 型号的CPU,一不小心串接到USART1上了.因为在调程序时才发现错了,没得办法,只能通过端
GD32F103C8T6单片机PB4引脚控制LED闪烁教程
资源摘要信息:"GD32F103C8T6单片机是基于ARM Cortex-M3内核的32位通用微控制器,广泛应用于嵌入式系统中。这款单片机以其高性能、低功耗的特点,成为开发者实现各类项目的优选平台。在本例中,我们将重点关注如何...
写文章

热门文章

  • 史上最全面的JTAG和SWD接口的定义/STM32/STM8工程师的福音/JTAG转SWD接口仿真/告别杂乱的仿真线/终于讲清楚了JTAG/SWD 34828
  • 全网最全最明白的全球运营商无线网络频段分布2G/3G/4G说明及国内NB-IoT的网络部署频段说明 25105
  • 兆易创新GD32单片机的入坑简介 17235
  • OneNET平台MQTT协议MQTT.fx-1.7.1客户端接入步骤详细说明 14637
  • 全网最详细解释Keil-MDK中Code、RO-data、RW-data、ZI-data的含义 14104

分类专栏

  • 兆易创新GD32系列单片机 14篇
  • 物联网知识学习 13篇
  • STM8L系列单片机 5篇
  • ABOV现代单片机 19篇
  • NCRE嵌入式备考试-试题分析 2篇

最新评论

  • Keil 5编译出现misc.c(90): error: no member named ‘IP‘ in ‘NVIC_Type‘

    2301_81058510: 为什么我这个文件是只读的 改不了啊 大佬

  • Keil 5编译出现misc.c(90): error: no member named ‘IP‘ in ‘NVIC_Type‘

    swj1010474696: 请问为什么我修改不了代码

  • 关于ABOV单片机MC96F1206的系统时钟配置问题

    好金: 非常感谢有ABOV的单片机教程,刚入职正在做一个小项目正在烧脑子+emo看到了压力瞬间小了不少

  • 全网最详细解释Keil-MDK中Code、RO-data、RW-data、ZI-data的含义

    单手御龙: 感谢博主,另外,稍微指正个小问题 “当程序开始运行时,内核直接从ROM中读取代码” 所有cpu都有一个rom,和flash不同的是,这个row用户无法修改,也就是固化代码,cpu执行的第一条指令就是这个rom中的,rom中的代码功能就是从flash(地址0x80000000)中加载指令,所以比起“内核”,更准确的称谓是“rom code”

  • Keil 5编译出现misc.c(90): error: no member named ‘IP‘ in ‘NVIC_Type‘

    码得: 大佬大佬,小弟膜拜膜拜你

大家在看

  • 【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律
  • 【JavaEE】【多线程】单例模式 730
  • PTA 7-2创建一个倒数计数线程
  • python--学生管理系统案列
  • 大模型算法岗常见面试题100道(值得收藏)非常详细收藏我这一篇就够了

最新文章

  • 手把手讲解RTX5操作系统在GD32F407上的移植
  • Keil 5编译出现misc.c(90): error: no member named ‘IP‘ in ‘NVIC_Type‘
  • 详细讲解32F103/MS51单片机串口ISP程序下载的方法和操作步骤
2024年2篇
2021年13篇
2020年29篇
2019年5篇

目录

目录

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家杭州市临安区商场美陈布置安装张家口玻璃钢人物雕塑厂家南安玻璃钢花盆定制佛山玻璃钢雕塑有哪些广东个性化玻璃钢雕塑订做价格台州玻璃钢雕塑价格玻璃钢几何动物雕塑濮阳玻璃钢神像雕塑舟山道路护栏玻璃钢花盆天津大型玻璃钢雕塑批发玻璃钢雕塑生产流程都匀玻璃钢雕塑厂有哪些玻璃钢雕塑贵州地区的透明玻璃钢雕塑定做厂家电话黑龙江户外玻璃钢雕塑供应商红色玻璃钢人物雕塑有哪些玻璃钢雕塑需要翻模吗银川博物馆玻璃钢雕塑二连浩特玻璃钢雕塑厂家保山玻璃钢雕塑厂家玻璃钢广场雕塑设计厂家江苏景区玻璃钢雕塑市场户外植物园玻璃钢雕塑设计河北园林玻璃钢花盆宽城玻璃钢雕塑厂家商场中庭美陈工厂人物卡通玻璃钢雕塑生产厂家长宁玻璃钢雕塑潮州玻璃钢雕塑批发定制倒模玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化