打印
[STM32F1]

STM32F103系列jtag编程端口作为普通IO口使用问题

[复制链接]
962|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2023-2-6 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST-LINK编程时  遇到一个问题是SWDIO引脚,SWCLK引脚用做普通IO口  无法控制端口状态。端口一直有个0.9V 左右的电压输出  拔掉编程口也控制不了。

    有没人遇到类似情况   是否初始化需要设置什么? 高手有在吗!急!!! 在线等

使用特权

评论回复
沙发
软核硬核| | 2023-2-7 14:14 | 只看该作者
应该是没有配置好吧,好像有一段语句,让芯片失能SWDIO和SWCLK引脚。

使用特权

评论回复
板凳
LLGTR| | 2023-2-7 14:15 | 只看该作者
和程序有关系,但是建议不要用这个引脚当普通IO

使用特权

评论回复
地板
芯路例程| | 2023-2-7 14:16 | 只看该作者
禁用调试功能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //全功能SW+JTAG,禁用JTRST,PB4可用
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //启用SW,禁用JTAG,PA15、PB3、PB4可用
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //完全禁用SW+JTAG,PA13、PA14、PA15、PB3、PB4可用

SWJ调试端口,只能使用以上3种重映射方法,不可对单独引脚设置。

使用特权

评论回复
5
软核硬核| | 2023-2-7 14:17 | 只看该作者
SWJ调试端口设置成普通I/O口程序

/* 禁用 JTAG,PB3、PB4、PA15重定义为普通IO */
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);//使能PA和PB端口时钟

       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//启用SW,禁用JTAG,PA15、PB3、PB4可用

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3;        //端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //IO口速度为50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);                                        //根据设定参数初始化
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                                //端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //IO口速度为50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                        //根据设定参数初始化

使用特权

评论回复
6
SantaBunny| | 2023-2-11 16:28 | 只看该作者

应该是没有配置好

使用特权

评论回复
7
公羊子丹| | 2025-4-6 07:36 | 只看该作者
看起来问题出在 JTAG/SWD 的引脚复用上。STM32F1系列的 SWDIO 和 SWCLK 默认是作为调试接口使用的,在使用它们作为普通 IO 口之前,需要先关闭调试接口。

使用特权

评论回复
8
周半梅| | 2025-4-6 07:37 | 只看该作者
可以通过设置 RCC_APB2ENR 寄存器,关闭调试端口,或者在 SysTick 配置之前,执行 DBGMCU->CR &= ~DBGMCU_CR_DBG_SLEEP; 来禁用调试接口。

使用特权

评论回复
9
帛灿灿| | 2025-4-6 07:39 | 只看该作者
我遇到过类似的问题,最后是因为调试接口未被禁用,导致这两个引脚无法作为普通 IO 使用。可以尝试在代码里显式禁用调试接口。

使用特权

评论回复
10
童雨竹| | 2025-4-6 07:40 | 只看该作者
你可以试试在 STM32CubeMX 中,设置正确的引脚复用模式,确保没有启用 JTAG 或 SWD 模式。

使用特权

评论回复
11
万图| | 2025-4-6 07:41 | 只看该作者
在代码中通过 HAL_GPIO_DeInit() 禁用这些引脚的调试功能,或者通过 GPIO_Init() 重新配置它们为普通 IO。确保在使用之前调试端口已经完全关闭。

使用特权

评论回复
12
Wordsworth| | 2025-4-6 07:43 | 只看该作者
还要检查下 SWDIO 和 SWCLK 是否被其他功能占用,比如说 SWD 或 JTAG 相关的外设。如果这些端口被占用,就需要修改它们的复用设置。

使用特权

评论回复
13
Bblythe| | 2025-4-6 07:44 | 只看该作者
另一个常见的错误是,在关闭 JTAG 后,需要确保没有对这些引脚进行任何调试操作。可以通过 HAL_DBGMCU_DisableDebug 或类似函数彻底禁用调试。

使用特权

评论回复
14
Pulitzer| | 2025-4-6 07:45 | 只看该作者
如果拔掉编程口之后还无法控制引脚状态,可能是因为 STM32 处于某种特殊的模式下,比如调试模式或系统锁定。可以检查一下系统的启动和复位流程。

使用特权

评论回复
15
Uriah| | 2025-4-6 07:47 | 只看该作者
可以查看 STM32 的调试相关文档,确认是否在复位时正确设置了调试接口的状态。SWDIO 和 SWCLK 默认情况下会占用这些端口,所以需要明确地配置。

使用特权

评论回复
16
Clyde011| | 2025-4-6 07:48 | 只看该作者
你可以先尝试在调试接口配置完成后,清空 AFIO_MAPR 寄存器中的相应位,确保不再使用 JTAG 或 SWD 的功能。

使用特权

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

本版积分规则

434

主题

2804

帖子

3

粉丝