如题,谷歌百度一堆,以及查看数据手册,都知道STM32F103芯片靠BOOT0和BOOT1以及NVIC中断向量表的相关配置,可以做到3种启动模式:从内置用户FLASH启动、从SRAM内存启动、从系统存储器启动。 一般地球人都是用FLASH启动,又可以烧进去程序,又可以在线调试。或者用SRAM启动,可以调试小函数。 二者的启动方法在数据手册都有很容易的说明,谷歌百度也可以马上查到。 我想说的是,如何从系统存储器启动?如果是定义NVIC中断向量表,只能使用: NVIC_SetVectorTable(0x20000000, 0x0);//SRAM启动(芯片内存) NVIC_SetVectorTable(0x08000000, 0x0);//FLASH启动(芯片内置的用户闪存) 但是,没法用NVIC来写以下代码: NVIC_SetVectorTable(0x1FFFF000, 0x0);//System启动(ISP串口下载,预置Bootloader) 因为不存在0x1FFFF000这个实参。 BOOT0和BOOT1我已经按照正确配置了,这个很简单,不必多说。 我也试过STM32_ISP下载程序,当时BOOT0=1,BOOT1=0,可以把hex程序文件下载进去,但是还是需要BOOT0和BOOT1都清零才可以运行程序,也就是说还是变成FLASH启动模式才能运行程序。 究竟怎样做才能在BOOT0=1,BOOT1=0的情况下,把程序烧进去,并且从系统存储器启动呢? 请高手赐教! |
回答
你说的这个所谓的系统存储器就是进入ISP
这个烧完之后必须返回到flash模式才能运行的,这个系统存储器的概念你理解错了,具体如下
1)用户闪存 = 芯片内置的Flash。
2)SRAM = 芯片内置的RAM区,就是内存啦。
3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
可见这个系统存储器只是帮你通过ISP程序下载hex进去的
下载的时候自动搞boot的方法你可以看看这个
http://www.daxia.com/bibis/moredata_1789880_32217.shtml
我以前在咱们坛子里看到过,不过找不到了,就找到这个,你可以自己找找,
https://www.amobbs.com/thread-5048816-1-1.html?_dsign=b2001043