我制作了一个STM32F042k6电池供电的设备,可以通过vi DFU协议进行闪存。
为此,我断开电池连接,将BOOT0拉到VCC,然后将设备插入PC的USB3端口(没有USB2)。无法识别并显示设备 VID:0000 PID:0002(案例I)
但是,当我第一次连接电池,然后将设备连接到PC时,可以毫不费力地识别出来(情况II)。
我面临的问题是我想通过软件中的命令启动跳转到引导加载程序的程序-但是后来我达到了与情况I完全相同的条件。
您能帮助我确定我违反了哪些条件才能正常启动吗?
编辑: 我发现问题的方式是当我实现软件跳转到引导加载程序时。它似乎根本不起作用(VCP设备消失了,并且错误的<>设备出现在系统PID:0002 VID:0000中)。 我想通过拉高BOOT0引脚来进入引导加载程序,但是我看到只有在重启电池后,我才能成功。 USB电源周期导致了相同的“失败描述符”设备。
我怀疑通过USB供电时,booloader会出现一些通讯问题,并且无法建立正确的PID和VID。通过电池供电时-不存在此问题。
答案 0 :(得分:0)
您有发现板吗?
我已阅读STM32F042x4 / x6参考手册(DocID025832 Rev 5):
STM32F042x4 / x6嵌入了兼容全速USB设备的外设 带有USB规范版本2.0。
(第3.19部分,第27页)。
在AN2606(Rev 33)中,有一个表格显示了DFU Bottolader在USB FS(全速)中使用的USB配置:
我假设引导加载程序中的USB是2.0,但是USB 3.0必须符合USB 2.0。因此可以使用USB 3.0端口。
我建议您使用ST的DfUSe Demo。它的界面包括一个标签,在其中检测到可用的DFU设备。我可以按照以下步骤在另一个STM32x上进行尝试:
您也可以尝试直接使用PA11和PA12(根据表12 )来代替板子的USB端口。
编辑:
无需驱动boot0即可升级固件的另一种解决方案是直接跳入固件内部ST的DFU引导加载程序。否则,您可以设计自己的IAP引导加载程序(应用程序内编程)。
我希望有帮助。