前言
针对客户在使用某些具有空检机制的STM32芯片时碰到的启动模式问题进行分析,并结合不同的调试及烧录工具做了相关配置的介绍。
一、 问题描述
有客户使用STM32L011D4P6,发现尽管已经为Boot0引脚提供了低电平,在利用STVP进行烧录时,需要先利用串口发送0x7F信息(收到0x79回应),然后才能正常连接。同样,利用MDK-ARM开发工具时,也无法直接正确识别芯片。STLINK调试器的设置界面如下所示。
二、 问题分析
结合客户问题的描述可以判断出在MCU上电后,STM32L011D4P6进入了自举程序模式(详细内容参见AN3155)。查看STM32L011D4P6启动模式配置,如下图所示:
在Boot0脚为低电平时,根据Boot配置应该进入main Flash program memory (STM32L011D4P6没有nBOOT_SEL)。利用STVP读出Optionbyte如下所示:
为什么在这种配置情况,还会进入System memory呢? 查看手册可以发现STM32L011x/021x采用了一种有别于STM32L0系列中其它微控制器的启动机制。
该类芯片使用了芯片空检测功能。用于Boot0配置为低电平,初始配置为从用户Flash program memory启动的前提下,先检测Flashprogram memory区是否含有有效用户程序,或者说检测芯片是否为空片。如果属于空片,则转而进入系统自举程序(即从Systemmemory中执行程序),以便对Flash memory进行编程。
通过询问客户得知,出现这种问题的STM32L011D4P6芯片都是没有烧录过用户程序的空片。当在Flash memory中烧录用户程序后,上面连接异常问题消失。
三、 开发工具配置
针对具有这种启动机制的MCU,在使用相关开发工具(例如MDK-ARM, IARfor ARM)时,需要对调试/编程选项进行配置,并需使用STM32L011x/021x的Reset引脚及连接。
ST-Link utility对应的配置(配置位置:Target\Setting)如下所示:
MDK-ARM 对应的配置(配置位置 : Project\Option\Debug\Setting)如下所示:
IAR for ARM对应的配置(配置位置:Project\Option\ST-Link)如下所示:
四、小结
STM32各大系列中,有部分芯片是具有空检功能的。比如STM32F0系列中的STM32F04X/09X,STM32L0系列中的STM32L011x/021x等,它们能够在Flash program memory中无有效用户程序时,自动从用户Flash区启动切换到System memory中的自举程序。要注意的是,在实际开发中需为调试/编程器提供Reset的硬件连接,并做适当配置。