[APM32F1] 极海APM32F103 USB无法识别问题

[复制链接]
2043|1
 楼主| hexbei 发表于 2024-4-19 18:34 | 显示全部楼层 |阅读模式
本帖最后由 hexbei 于 2024-4-22 09:50 编辑

项目中遇到一个问题,主程序需要用usb,但bootloader中不需要usb,所以usb的初始化代码是放主程序里面的。如果在bootloader消耗的时间长一点,等到主程序初始化usb的时候,就会出现usb无法识别的问题
4e37ec60a44aba5894ebb9a9d2289b0-20240419173841-4u1jp8h.png
排查后发现,用极海的开发板在跑没有用到usb的例程时,连接电脑也会有类似弹框。于是拿极海usb cdc例程来尝试复现问题。

修改例程,在usb初始化前增加延时来模拟实际情况。编译下载工程,果然问题复现。
  1. void Delay(void)
  2. {
  3.     volatile uint32_t delay = 0xfffff;

  4.     while(delay--);
  5. }


  6. int main(void)
  7. {
  8.     APM_MINI_LEDInit(LED2);
  9.     APM_MINI_LEDInit(LED3);
  10.     APM_MINI_LEDOff(LED2);
  11.     APM_MINI_LEDOff(LED3);
  12.     for (int i = 0; i < 30; i++)
  13.     {
  14.         Delay();
  15.     }
  16.     CDC_Init();
  17.     while(1)
  18.     {
  19.         Delay();
  20.         APM_MINI_LEDToggle(LED2);
  21.         APM_MINI_LEDToggle(LED3);
  22.     }
  23. }

仔细观察发现,弹框是在usb初始化前的延时循环时出现的。初步怀疑问题原因是usb的引脚电平不稳导致电脑误识别,之后等到usb初始化后也不会重新连接设备。

尝试修改,上电时就将DM DP 这两个引脚拉低。再测试,问题解决
  1. void gpio_init(void)
  2. {
  3.     GPIO_Config_T gpio_config;
  4.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
  5.     gpio_config.pin = GPIO_PIN_11 | GPIO_PIN_12;
  6.     gpio_config.mode = GPIO_MODE_OUT_PP;
  7.     gpio_config.speed = GPIO_SPEED_2MHz;
  8.     GPIO_Config(GPIOA, &gpio_config);
  9.    
  10.     GPIO_ResetBit(GPIOA, GPIO_PIN_11 | GPIO_PIN_12);
  11. }

  12. void Delay(void)
  13. {
  14.     volatile uint32_t delay = 0xfffff;

  15.     while(delay--);
  16. }


  17. int main(void)
  18. {
  19.     APM_MINI_LEDInit(LED2);
  20.     APM_MINI_LEDInit(LED3);
  21.     gpio_init();
  22.    
  23.     APM_MINI_LEDOff(LED2);
  24.     APM_MINI_LEDOff(LED3);
  25.     for (int i = 0; i < 30; i++)
  26.     {
  27.         Delay();
  28.     }
  29.     CDC_Init();
  30.     while(1)
  31.     {
  32.         Delay();
  33.         APM_MINI_LEDToggle(LED2);
  34.         APM_MINI_LEDToggle(LED3);
  35.     }
  36. }
image-20240419181137-2hd52ha.png
最后回到实际项目里,在boot loader初始化增加拉低usb的两个引脚电平,问题迎刃而解。

SUNKE9 发表于 2024-4-21 08:46 | 显示全部楼层
谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

21

帖子

2

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