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

stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用

当项目调试的时候,发现PA15引脚无论配置输出高还是低或者输入,均只能输出3.3V的高电平。

目前STM的硬件调试有两种方法,JTAG和SW的方式,目前个人认为最好的方式就是SW,因为它只占用PA13和PA14两个IO。而JTAG还要多占用PB3,PB4,PA15三个IO口。很浪费资源。

通常使用SW的方式,但是STM默认会启用SW和JTAG两种。也就是说,默认情况下,PA13、PA14、PB3、PB4、PA15均不能作为普通io使用。


因为没有使用JTAG,所以为了让PB3,PB4,PA15这三个IO变为普通io,必须解除调试端口复用。

        AFIO(Alternate Function Input/Output)模块主要用于配置一些外设的复用功能(alternate function)。

        配置步骤:

1.打开AFIO时钟

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

2.查芯片引脚手册

这里我们将PA15从JTDI变成PA15普通引脚。

3.使用GPIO_PinRemapConfig()函数

 这里我们主要看蓝色的三个参数:

第一个,GPIO_Remap_SWJ_NoJTRST,就是解除 JTRST 引脚的复用。在引脚定义表中就是 NJTRST 也就是PB4。使用 GPIO_Remap_SWJ_NoJTRST 参数,PB4 就变为正常的GPIO口了。其他四个端口PA13、PA14、PA15、PB3仍然是调试端口,不能当做GPIO口来使用。


第二个,GPIO_Remap_SWJ_JTAGDisable,就是解除 JTAG 调试端口的复用,在引脚定义表中就是PA15、PB3、PB4这三个端口全都变回GPIO口,PA13和PA14任为SWD的调试端口。


第三个,GPIO_Remap_SWJ_Disable,就是把SWD和JTAG的调试端口全部解除,在引脚定义表中就是PA13、PA14、PA15、PB3、PB4这5个引脚全部变成普通的GPIO,没有调试功能了。这个参数不可随意调用,一旦调用这个参数并且下载程序后,调试端口就没有了,这之后的STLINK就下载不进去程序了,这时只能使用串口下载,下载一个没有解除调试端口的新的程序。这样调试端口才能重新使用。

以上描述对应参考手册中的以下两个表:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //PB4

GPIO_Remap_SWJ_NoJTRST:只将PB4变成普通IO口(GPIO)。

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //PA15|PB3|PB4

GPIO_Remap_SWJ_JTAGDisable:JTAG-DP 禁用 + SW-DP 使能。只将PA15 ,PB3 ,PB4变成普通IO口。

 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //PA13|PA14|PA15|PB3|PB4

GPIO_Remap_SWJ_Disable:将上述串口都变成普通IO口,完全禁用(JTAG+SW-DP)。使调试端口失效,不建议使用。

通常就是解除 JTAG 的复用,保留 SWD 的复用,所以这里选GPIO_Remap_SWJ_JTAGDisable参数。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO时钟,即端口复用时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//失能JTAG

这两句就ok了,以后就可以将上述三个引脚作为普通io了。

 


http://www.kler.cn/a/381967.html

相关文章:

  • 从传统服务器到虚拟化:虚拟机 VM 如何改变计算游戏规则?
  • 【python/C++ 使用 Optimum-Intel 和 OpenVINO GenAI 优化和部署大模型 IntelCPU/集显GPU/N卡GPU】
  • BERT框架
  • vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由
  • Hugging Face 两种加载模型的方式有什么区别
  • qt QWizard详解
  • 基于SSM+uniapp的营养食谱系统+LW参考示例
  • 【数据结构与算法】LeetCode: 贪心算法
  • 【用Rust写CAD】前言
  • 【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
  • ONLYOFFICE 8.2深度体验:高效协作与卓越性能的完美融合
  • 学习threejs,将多个网格合并成一个网格
  • spring-第十三章 AOP
  • 【强化学习理论】基于策略的强化学习——深度确定性策略梯度算法
  • Python内置模块-Json:轻松处理数据交换的艺术
  • 项目实战使用gitee
  • Golang | Leetcode Golang题解之第538题把二叉搜索树转换为累加树
  • 质数的和与积
  • 什么是ajax,为什么使用ajax?ajax都有哪些优点和缺点?
  • 「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目
  • 恢复Ubuntu+Windows10双系统安装前状态及分区还原详细步骤
  • L5.【LeetCode笔记】移除链表元素
  • 如何修改远程分支?修改了会影响什么?
  • python中t是什么意思
  • 直播系统搭建教程安装说明
  • IT架构管理