单片机型号: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.html
https://www.eeworld.com.cn/mcu/eic667825.html
(2)、USB烧录程序参考:

被折叠的 条评论
为什么被折叠?



