GD32通过U盘更新App固件遇到的问题 --- USB MSC

单片机型号:GD32F425RET6

内核:M4

最大主频:200MHz

Flash大小:512KB

Bootloader大小和地址:①size:64KB;②address:0x0800 0000 ~ 0x0801 0000

1、遇到的问题点描述:

当经过bootloader程序后,跳转到app固件后,会出现U盘识别不了的bug,需要插拔多几次才能被正常的初始化。

Bootloader阶段:初始化完USB_MSC之后,插入U盘,能正常识别U盘,可以显示U盘目录文件,在跳转app前关闭了所有中断/与usb有关的中断,防止在跳转时有中断触发,打断跳转,从而导致失败;

App阶段:初始化完后,usb的连接状态有一个默认未连接的状态,U盘的目录读取不出来,经过几次插拔之后,才能正常显示。

(注:从上电时就开始插着U盘)

解决:

(1)、APP中USB识别不出来的问题

① APP在初始化USB前做操作:USB 卸载操作取消按复位键后无法识别的问题 USB_Disconnected();        // 这个操作在CDC内也可以写上

void USB_Disconnected(void)
{
    /* 使能 LED 引脚对应的时钟 */
    rcu_periph_clock_enable(RCU_GPIOC);
    /* 配置 */
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_12);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);

    gpio_bit_reset(GPIOA, GPIO_PIN_11);
    gpio_bit_reset(GPIOA, GPIO_PIN_12);

    delay_ms(100);    // 延时100ms
}

② App程序在初始化完USB后,设置一个函数来在规定次数内获取USB的状态。

问题解决参考:

【五一创作】STM32F103内置USB接口作USB Device(CDC MSC等) 板子复位后需要反复拔插USB才能使用的问题-CSDN博客

2、参考资料:

(1)、STM32单片机实现Bootloader跳转的关键步骤:

https://www.eeworld.com.cn/mcu/eic667825.htmlhttps://www.eeworld.com.cn/mcu/eic667825.html

(2)、USB烧录程序参考:

stm32单片机的USB烧录程序-电源网

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值