当前位置: 首页 > news >正文

如何把STM32的调试口设置为普通的IO口?

目录

一、背景

二、STM32的调试方式选择

三、关闭所有的JTAG和SWD调试功能

3.1 仅关闭JTAG调试功能

四、关闭JTAG和SWD调试方式后如何更新程序以及仿真

4.1 关闭JTAG如何更新程序

4.2 关闭JTAG及SWD调试功能后的补救措施


一、背景

最近有一个项目用到了STM32F103RB系列单片机,由于引脚数量较少,不得不使用到了单片机的PB3和PB4两个引脚。而这两个引脚刚好又是STM32系列的JTAG调试引脚,如果要用于普通IO的功能需要先进行一定的设置。

二、STM32的调试方式选择

STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是开启的。

STM32 IOJTAG IOSWD IO
PB3NC
PB4NC
PA13
PA14
PA15NC

由此我们可以知道: 如果要使用JTAG调试功能,那么PB3,PB4,PA13,PA14,PA15都不能使用; 而如果我们关闭JTAG功能,但是开启SWD调试功能,那么PB3,PB4,PA15都可以当作普通IO来使用了;

ST官方3.5的库有提供关闭调试功能的两个接口。

三、关闭所有的JTAG和SWD调试功能

慎用,一旦执行该命令,程序运行后将不能通过JTAG或SWD方法进行烧写和下载补救措施见文末

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

执行上面语句后,PB3,PB4,PA13,PA14,PA15都可以当作普通iO来使用,此时不能通过J-Link进行调试了;

3.1 仅关闭JTAG调试功能

该方法的好处是,解放了JTAG功能占用的引脚,但是SWD调试功能依旧可以使用。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

执行上面语句后,PB3,PB4,PA15都可以当作普通iO来使用,且可以通过SWD进行调试。

四、关闭JTAG和SWD调试方式后如何更新程序以及仿真

4.1 关闭JTAG如何更新程序

关闭JTAG调试功能以后,STM32不再支持在线仿真,且更新程序也需要通过一定操作才可以完成。此方法在开发阶段慎用!

建议程序启动时延时3-5秒后再关闭JTAG调试模式,如此,单片机断电复位后立即点击烧写按钮也是可以进行程序烧录的。

4.2 关闭JTAG及SWD调试功能后的补救措施

补救措施一:

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

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

补救措施二:

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

补救措施三:

如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。

如有侵权,联系删除。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PHP同城派送系统小程序源码
  • 富格林:深究安全出金做单经验
  • 电路中电阻,电容和电感作用总结
  • 大模型算法面试题(二十)
  • Scala基础入门:从零开始学习Scala编程
  • BVH、FBX 文件学习
  • 黑马微服务—Docker
  • 外企面企必备:IT技术面试英文高频面试题
  • 【C语言】qsort函数的介绍和使用
  • 《kubernetes权威指南第五版》读书笔记
  • RISC-V竞赛|第二届 RISC-V 软件移植及优化锦标赛报名正式开始!
  • 【OpenCV C++20 学习笔记】提取图片中的水平和垂直对象
  • K8s部署篇之手动部署二进制高可用集群架构
  • Windows 系统学习之路
  • 【机器学习西瓜书学习笔记——神经网络】
  • Angular6错误 Service: No provider for Renderer2
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Druid 在有赞的实践
  • es6要点
  • express + mock 让前后台并行开发
  • Github访问慢解决办法
  • JS专题之继承
  • Kibana配置logstash,报表一体化
  • Nodejs和JavaWeb协助开发
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • swift基础之_对象 实例方法 对象方法。
  • 笨办法学C 练习34:动态数组
  • 分布式熔断降级平台aegis
  • 关于使用markdown的方法(引自CSDN教程)
  • 如何利用MongoDB打造TOP榜小程序
  • 如何学习JavaEE,项目又该如何做?
  • 我建了一个叫Hello World的项目
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 原生js练习题---第五课
  • Java数据解析之JSON
  • Mac 上flink的安装与启动
  • ​如何使用QGIS制作三维建筑
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #565. 查找之大编号
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (07)Hive——窗口函数详解
  • (4.10~4.16)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)Linux+Windows下安装ffmpeg
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (译) 函数式 JS #1:简介
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net core 6 redis操作类
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)