主机无法识别使用系统引导程序的DFU模式下的STM32,或者连接不可靠。但USB用户应用程序运行良好。
 

这里的问题可能是由AN2606中提到的HSE晶体引起的(见第21页第3.1节):

“对于使用DFU/CAN接口嵌入引导加载程序的STM32设备,其中DFU/CAN操作需要外部时钟源(HSE),HSE值的检测由引导加载程序固件动态完成,并基于内部振荡器时钟(HSI、MSI)。”

如果内部振荡器精度由于温度或其他条件而改变到公差带以上(理论值周围的1%),则引导加载程序可能计算出错误的HSE频率值。然后使用错误的HSE值来计算PLL参数。这使得MCU和MCU外围设备以意想不到的频率工作。
如果使用引导加载程序DFU/CAN接口,则使用不正确的通信频率;如果使用DFU,则USB主机无法与该设备通信,该设备无法连接。

AN2606的推荐解决方案

  • 在温度受控的环境中使用引导加载程序,例如在环境温度下使用生产线
  • 如果使用UART,则使用9600波特的较低波特率,以最大限度地减少通信错误
  • 如果使用USB或CAN,强烈建议使用低于或等于8MHz的较低外部晶体值。
    该值越低,HSE计算的精度越好。
AN2606推荐的解决方案只是降低了问题可见性的概率,但仍然不能保证问题会被预防。由于系统引导加载程序是固定的,所以不可能更改其代码,防止所述问题的唯一选项是在用户内存中使用自定义引导加载程序。用户内存中的引导程序代码可以完全自定义,此外还可能包括系统引导程序中缺少的安全功能。
客户注意事项:
1) 如果您想提交评论,反馈或者关于这篇文章或我们的知识数据库的任何建议,您可以通过电子邮件至kb.feedback@st.com
2) 如果您需要特定的(产品)支持请参阅我们的
支持主页(https://www.st.com/content/st_com/en/support/support-home.html)您可以从各种在线支持选项中进行选择,并选择最符合您要求的服务。