[STM32F4]

如何将调试接口配置成普通IO口及JTAG和SWD禁用解除

[复制链接]
356|16
手机看帖
扫描二维码
随时随地手机跟帖
ym0sly|  楼主 | 2022-11-26 19:28 | 显示全部楼层 |阅读模式
关于GPIO的复用
STM32F10x系列及AT32F4xx的MCU复位后,PA13/14/15/ PB3/PB4默认配置为JTAG功能。那么为了充分利用芯片的I/O口资源,就会把这些端口设置为通用I/O口,意味着将这些引脚复用为普通I/O功能。以AT32F4xx系列为例。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:29 | 显示全部楼层
在数据手册有以下介绍:
960046381f88009862.png

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:29 | 显示全部楼层
在用户手册里复用功能I/O章节和调试设置章节有关复用说明:
590166381f8a106692.png

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:41 | 显示全部楼层
根据以上手册内容可知:
1、默认JTAG调试功能,那么PA13/PA14/PA15 /PB3/PB4都不能做普通I/O口使用;
2、关闭JTAG-DP且同时关闭SW-DP,则PA13/PA14/PA15/PB3/PB4窦可做普通I/O口使用。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:43 | 显示全部楼层
根据所要配置成普通I/O口选择关闭JTAG-DP or SW-DP。

以PB3为例:可以选择SWJTAG_GRMP[2: 0]位 的010和100,优先选择关闭少的,即选择010所对应的(AFIO_MAP)的设置。尽量不要关闭SW-DP,关闭SW-DP就不能使用SWD下载(无法使用J-LINK调试),给调试带来不便。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:44 | 显示全部楼层
将PB3作为普通I/O的设置包括以下步骤:
1、时钟配置:添加 RCC_APB2Periph_AFIO


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:45 | 显示全部楼层
添加调试I/O配置寄存器AFIO_MAP
GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);  //AFIO_MAP的SWJTAG_GRMP[2: 0]位 为010(优先)

GPIO_PinsRemapConfig(GPIO_Remap_SWJ_ALLDisable, ENABLE);  //AFIO_MAP的SWJTAG_GRMP[2: 0]位 为100

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:46 | 显示全部楼层
//一般在库文件的xx_gpio.h中会有关于AFIO_MAP_define

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:46 | 显示全部楼层
其他代码就是普通引脚配置了;(选择芯片不同,配置GPOI也会有些差异)
270076381fc8f4a965.png

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:47 | 显示全部楼层
配置好后,若此IO口控制输出就用万用表测量输出器件状态;也可直接测量MCU引脚PB3的对地电压变化,在0V/3.3V切换。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:48 | 显示全部楼层
若是STM的请参考:
385176381fce84ca65.png

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:49 | 显示全部楼层
若同时禁止JTAG-DP和SW-DP,怎么使用SWD下载?

1、若你使用的仿真器支持SWD仿真模式,就不受这个禁止JTAG功能的影响。但受SW-DP影响。在重新上电的之前,保证BOOT0为高电平,BOOT1为低电平(可将BOOT0引脚直接和高电平相连),此时禁止程序从烧写过的代码启动,重新烧写程序即可。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:50 | 显示全部楼层
2、若使用JTAG-DP,则
设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将FLASH擦除,之后恢复JTAG功能。
或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。将开发板断电后重新上电,此时就因不是在用户程序模式,所以不会执行禁用JTAG的语句,JTAG-DP可用。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:50 | 显示全部楼层
扩展:启动模式

三种启动模式对应的存储介质均是芯片内置。控制启动模式的管脚BOOT0和BOOT1,它们在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:51 | 显示全部楼层
BOOT0=0 BOOT1=x从用户闪存启动,为正常的工作模式,用户闪存=芯片内置的Flash。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:53 | 显示全部楼层
BOOT0=1 BOOT1=1从内置SRAM启动,SRAM掉电后数据就丢失,这种模式可用于调试。SRAM=芯片内置的RAM区,即内存。

使用特权

评论回复
ym0sly|  楼主 | 2022-11-26 19:54 | 显示全部楼层
BOOT0=1 BOOT1=0 从系统存储器启动,这种模式启动的程序功能由厂家设置;系统存储器=芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROROMM区。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

161

帖子

1

粉丝