[研电赛技术支持] GD32引脚功能异常解决方案

[复制链接]
186|0
Puchou 发表于 2025-10-9 18:33 | 显示全部楼层 |阅读模式
GD32 引脚功能异常问题分享
问题描述
在使用 GD32F303 芯片完成伺服电机控制时,我选择了 PB3 引脚产生 PWM。这个选择是为了代替 STM32F103 的 PB3 引脚。在 STM32 上,该引脚表现正常,没有任何问题,但是移植到 GD32 上后出现了奇怪的现象:

只有在 debug 模式下,或者下载程序的第一次才可以正常输出 PWM;
如果重新上电,PB3 就完全没有输出;
问题发现
起初一直以为是配置问题。
查阅 GD32 手册后,发现 PB3 被其他功能占用:

JTDO
SWO
而且排列在较靠前的位置,导致冲突。

1.png

解决方案
首先打开手册,找到这部分的介绍

2.png

手册提到可以通过 SWJ_CFG 寄存器 来解决这个问题。官方封装了对应函数:

gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);


输入变量说明

#define GPIO_SWJ_NONJTRST_REMAP          ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(1) >> 16)) /*!< 全部禁用 JTAG-DP + SW-DP,但保留 NJTRST */
#define GPIO_SWJ_SWDPENABLE_REMAP        ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(2) >> 16)) /*!< 禁用 JTAG-DP,保留 SW-DP */
#define GPIO_SWJ_DISABLE_REMAP           ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(4) >> 16)) /*!< 全部禁用 JTAG-DP + SW-DP */




GPIO_SWJ_NONJTRST_REMAP:全部禁用 JTAG-DP + SW-DP,但保留 NJTRST

GPIO_SWJ_SWDPENABLE_REMAP:只禁用 JTAG,保留 SWO

GPIO_SWJ_DISABLE_REMAP:全部禁用


为了下次还能顺利下载程序,同时减少芯片损失,我选择了 禁用 JTAG 并保留 SWO:

gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);




但即便如此,PB3 仍然无法正常工作。

进一步查手册,发现 PB3 还可能被 异步跟踪功能占用:

3.png

异步跟踪(Asynchronous Trace)

如果不使用 PB3,则只需禁用对应下载功能即可;但是如果选择 PB3,必须禁用异步跟踪。
扒拉了半天手册,找到了禁用的寄存器

4.png

官方提供了禁用函数:

dbg_trace_pin_disable(); // 禁用跟踪引脚分配


禁用后,PB3 就可以正常输出 PWM。可以正常玩耍了

总结

其他下载引脚:只需禁用对应下载功能


gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);//禁用jtag保留swd


PB3 特殊情况:除了禁用 JTAG,还要禁用跟踪引脚


dbg_trace_pin_disable(); // 禁用跟踪引脚分配
gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);//禁用jtag保留swd


这样就可以避免PB3引脚被下载功能占用,PWM 正常输出。
————————————————
版权声明:本文为CSDN博主「攻城狮V_1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52184562/article/details/151623936

您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

266

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部