关于JTAG引脚设置为普通IO口

2024-01-24 13:38
文章标签 设置 io 普通 引脚 jtag

本文主要是介绍关于JTAG引脚设置为普通IO口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自https://blog.csdn.net/wang370064915/article/details/8176363

简介

在这里插入图片描述
STM32单片机中的JTDO与JNTRST是JTAG引脚复用,一般最好不用JTAG-DP调试端口,而是用SW-DP,只需要JTMS/SWDIO与JTCK/SWCLK。这样可以省下有限的IO资源。
但是stm32复位后,JTAG与SW默认同时开启的,即所有的JTAG端口均被系统保留,软件设置GPIO是不起作用的,所以导致JNTRST一直为高电平,JTDO一直为低电平,ST的文档里说明,如果要释放多余的JTAG端口,需设置SWJ_CFG[2:0]为010,关闭JTAG-DP,启用SW-DP
实际测量PA3,PA4都在2.7V左右,为高电平

设置步骤

//打开复用的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
//完全失能(JTAG+SW-DP)
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
/ 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
// 然后配置使用的 GPIO 口
用普中的6806L按键实验测试

void LED_Init()
{GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//在AFIO寄存器设置RCC_APB2PeriphClockCmd(LED_PORT_RCC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4;GPIO_Init(GPIOB,&GPIO_InitStructure); 	GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4);GPIO_InitStructure.GPIO_Pin=LED_PIN;  //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	 //设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  //设置传输速率
GPIO_Init(LED_PORT,&GPIO_InitStructure); 	   /* 初始化GPIO */GPIO_SetBits(LED_PORT,LED_PIN);   //将LED端口拉高,熄灭所有LED
}
while(1){key=KEY_Scan(0);   //扫描按键switch(key){case KEY_UP: PBout(3)=0;break;      //按下K_UP按键    点亮D2指示灯case KEY_DOWN: PBout(3)=1;break;    //按下K_DOWN按键  熄灭D2指示灯case KEY_LEFT: PBout(4)=1;break;    //按下K_LEFT按键  点亮D3指示灯case KEY_RIGHT: PBout(4)=0;break;   //按下K_RIGHT按键 熄灭D3指示灯}i++;led1=0;//这里必须给低电平,跟板子设计有关,led2=0;led3=0;delay_ms(10);	}

程序下载后D1,D2,D3号灯亮
把PB3,PB4连接到PC0,PC1,则D1,D2号灯灭,D3常亮不变
此时就可以通过按键控制PB3,PB4口电平从而控制灯亮灭了

注意程序里要把PC0,PC1,PC2置0 ,因为板子设计的原因,如果为1,则灯无法控制一直全灭

注意

stm32 JTAG和普通IO复用,当软件设置为普通IO时,理论上能用JTAG下载软件因为在下载的时候,通过RESET时序进入了下载模式了。
但是注意硬件的接法不要强制拉高拉低,也不要让其芯片的输出脚接过来。这样就会影响到JTAG了,但是普中的板子恰恰硬件设计不合,下载了禁用JTAG的程序后就只能用usb或者SW去刷掉了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用SW下载可以自己连线也可以用JTAG排线,按时keil 的port要选择SW,这样圆圈处才能识别

在程序中,通常禁止JTAG的函数如下所示://改变指定管脚的映射  GPIO_Remap_SWJ_Disable SWJ 完全失能(JTAG+SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//改变指定管脚的映射  GPIO_Remap_SWJ_JTAGDisable  JTAG-DP 失能 + SW-DP使能GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

当设置了以上语句后,当运行了这两个语句后,JTAG仿真就与目标失去去联系。

解决办法有:

在这里插入图片描述

1、设置启动模式为ISP模式(BOOT0=1、BOOT1=0)或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。

将开发板断电后重新上电,此时就因不是在用户程序模式,因此就不会执行禁用JTAG的语句,JTAG功能也就可以正常使用。

2、设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将STM32的FLASH擦除,之后就可恢复JTAG功能。

3、如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。

直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。

在这里插入图片描述
SW用到的引脚为PA13,PA14,用板子上的IO口也可以下载,

这篇关于关于JTAG引脚设置为普通IO口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639868

相关文章

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字