STM32F091空片编程后怎样直接运行用户代码
我们的直观思维都是出现问题解决问题,但是看了上面的描述,这样的解决办法还真有点麻烦。那有没有什么其他简单的办法呢?答案是有的,我们不要把思维停留在出现问题解决问题上,而是如何去避免产生问题。下面来理一理思路:
这个问题的根源在于查空标志的存在,所以需要思考的是怎么避免查空标志的影响?
来看一下查空标志产生的条件:
a) 使用了BOOT0 引脚;
b) BOOT0 引脚为低电平,启动区域指向MainFlash memory;
c) 读取0x0800 0000 地址的值为0xFFFF FFFF;
由于是空片编程,所以第三种条件是肯定是成立的;由于硬件设计,BOOT0 引脚的电平也不方便改来改去;所以需要把关注点放在第一个条件上——"使用了BOOT0 引脚"。由于STM32F091的特性,刚好有机会可以不使用BOOT0 引脚,而是直接使用选项字节,所以解决的办法有了。
步骤如下:
i. 打开STM32 ST-LINK Utility,点击"Connect to the target"按钮进行连接;
ii. 从菜单"Target → Option Bytes"调出选项字节对话框
将"nBoot0_SW_Cfg"的打勾去掉,点击"Apply",改成使用选项字节中的nBoot0 和nBoot1 来控制启动区域
iii. 再打开需要烧写的代码文件,点击"Program Verify"按钮,对话框中勾选"Reset after programming",点击"Start"完成烧写动作就可以了。
这样就可以看到用户代码已经在运行了,是不是很简单。
如果,希望更简单的完成,可以使用ST-LINK_CLI,写一个批处理文件,包含以下动作:
ST-LINK_CLI -c SWD UR
ST-LINK_CLI -ME
ST-LINK_CLI -p xxxxxxxx.hex-v "while_programming"
ST-LINK_CLI -OBnBOOT0_SW_Cfg=0
ST-LINK_CLI –Rst
ST-LINK_CLI.exe位于STM32 ST-LINK Utility 安装目录里,关于命令请参考《ST-LINKUtility UM.pdf》。
结论
由于查空检测机制,导致STM32F091 空片在使用ST-LINK编程后,不断电的情况下复位将回到System Memory,无法进入MainFlash memory 去运行用户代码。所以,在特殊应用中,如果无法进行断电再上电,需要使用办法对这种机制进行破坏。
处理
将Boot 启动配置为用选项字节进行控制,而不是使用Boot0引脚,以此来破坏查空机制的影响。
建议
对于问题的解决,一般从两个方向进行思考:一是出现了问题再来找解决问题的办法;二是如何避免出现问题。很多时候,由于思维惯性,很多工程师可能会更喜欢直接从第一种方向去思考问题;然而,事实上,如果能从第二种方向思考,阻止问题的产生,那才是最好的办法。
- 盘点STM32-NUCLEO开发与仿真平台(03-28)
- 一种基于ZigBee和STM32的室内智能照明系统的设计(05-13)
- 大联大友尚集团推出ST STM32马达控制Nucleo开发工具包,可直接开始运转无刷直流马达(05-27)
- 这些VR设备“内脏”构造大解剖!绝对有你没见过的(02-14)
- 在变频空调风机中永磁同步电机矢量控制方案的运用(04-04)
- 基于STM32和SIM900A的无线通信模块设计(10-07)