关于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

相关文章

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个