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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将STM32的调试口设置为普通IO口相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

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

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

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

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

设置启动模式为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功能的影响了。

stm32的双向io口

 # stm32的io端口双向设置问题,须将io端口模式配置为 open-drain mode

  > 在io端口配置为输出模式时,输入通道上的施密特触发器一直是打开的,所以读取IDR是能检测到端口电平的

  > 排除 push-pull mode 模式的依据是,推挽输出是强输出电流模式,在此模式下的输出通道上的推挽结构MOS管,属于强上拉和强下拉的,这会影响读取IDR时的值,强上拉意味着会将来自外部的低电平输入强制置高,强下拉意味着会将来自外部的高电平输入强制置低

  > 在 open-drain mode 模式下,要读取来自外部的输入信号前,须将输出端口设置为开漏结构,且输出高电平信号(即NMOS不导通),该结构下io端口方能准确反映来自外部的输入信号

  > 在复用模式下,暂未尝试,相信会有奇妙的发现

 

以上是关于如何将STM32的调试口设置为普通IO口的主要内容,如果未能解决你的问题,请参考以下文章

stm32 普通IO口模拟串口通信

STM32JTAG口用作普通IO的配置

求stm32高手,我想用pb3当普通io口,为啥不成功呢?,看资料上显示,开启sw,关闭jtag就可以啊

关于STM32初次使用SWD方式连接报错问题

stm32的双向io口

stm32中外部中断IO口设置后,会影响同一组的其他引脚吗?