bootloader+APP中,有些APP引脚无法正常使用?

问:bootloader+APP程序中,为什么有些APP引脚无法正常使用?无法设置高低电平


主控芯片GD32F415,参考案例bootloader中的引脚使用:

参考案例APP程序的引脚使用:

以及个人使用的无线模组,高电平使能引脚:

多次测试给PB13引脚给高电平,均未成功。经过分析得知,是PB13引脚在bootloader中定义成CAN1_TX,再次使用需要GPIO引脚去初始化!


GPIO引脚去初始化方法(GD32芯片,C语言)

在GD32微控制器中,GPIO引脚的去初始化通常包括以下几个步骤:

基本去初始化步骤

  1. 禁用GPIO时钟(如果需要完全释放资源)

  2. 配置引脚为模拟输入模式(高阻态,最安全的状态)

  3. 禁用相关中断(如果之前使能了)

示例代码

复制代码
#include "gd32fxxx.h"  // 根据具体型号包含对应的头文件

void gpio_deinit(uint32_t gpio_periph, uint32_t pin)
{
    // 1. 配置引脚为模拟输入模式(高阻态)
    gpio_init(gpio_periph, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, pin);
    
    // 2. 禁用该引脚的中断(如果之前使能了)
    exti_init(EXTIx, EXTI_INTERRUPT, EXTI_TRIG_NONE); // 禁用对应EXTI线
    exti_interrupt_flag_clear(EXTIx); // 清除中断标志
    
    // 3. 禁用GPIO时钟(谨慎操作,确保没有其他引脚在使用)
    // rcu_periph_clock_disable(RCU_GPIOx); // 一般不推荐,除非确定不再使用该GPIO端口
}

注意事项

  1. 时钟禁用要谨慎:如果GPIO端口的其他引脚还在使用,不要禁用时钟

  2. 中断处理:如果引脚配置了中断,必须正确禁用相关EXTI线

  3. 复用功能:如果引脚配置了复用功能(如UART、SPI等),需要先禁用外设

  4. 具体型号差异:不同GD32系列可能有细微差异,请参考对应型号的参考手册

完整示例(带外设释放)

复制代码
void peripheral_gpio_deinit(uint32_t gpio_periph, uint32_t pin)
{
    // 1. 重置引脚配置
    gpio_init(gpio_periph, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, pin);
    
    // 2. 禁用中断
    switch(pin) {
        case GPIO_PIN_0: exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_NONE); break;
        case GPIO_PIN_1: exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_NONE); break;
        // ... 其他引脚
    }
    
    // 3. 清除中断标志
    exti_interrupt_flag_clear(pin);
    
    // 4. 如果有上拉/下拉电阻,也禁用
    gpio_pullup_enable(gpio_periph, pin); // 或 pulldown,根据情况
}

复位GPIO函数(直接复位一组GPIO)

根据使用的具体GD32型号和开发环境调整上述代码。

相关推荐
傻啦嘿哟6 分钟前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670797 分钟前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
Rocktech_ruixun15 分钟前
机器人本地跑LLM大模型对主板硬件有什么要求?瑞迅科技RK3588/3568方案选型解析
人工智能·科技·嵌入式硬件·机器人·边缘计算
李少兄1 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh1 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei2 小时前
Java 写 Agent:模型只是组件
java·开发语言
天空'之城2 小时前
单片机基础核心知识点汇总(三十四)
单片机·嵌入式硬件
小玮看世界2 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
Horn Still Sounds3 小时前
51单片机入门:硬件基础、位运算、数码管动态显示完整梳理
嵌入式硬件·mongodb·51单片机
繁星蓝雨3 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进