本帖最后由 loudianxin 于 2016-9-23 19:57 编辑
程序收尾总想着以后更新的方便性,采用在应用编程(In Application Programming),通过Bootload引导单片机自己往程序存储器里写数据或修改程序。下面简介STM32F030的IAP方法。不同于STM32F1系列,F0没有中断向量偏移寄存器。所以在APP程序的开头要添加以下代码。为什么这样做??可以看到函数用了for循环将矢量表拷贝到0 x20000000 SRAM的基地址,即将矢量表由Flash映射到了SRAM。所以在MDK里面设置Flash偏移地址的时候,同时要设置SRAM偏移地址。如下截图[mw_shl_code=c,true]//APP程序开头加入IAP_Set(void)函数
//Falsh address
#define APPLICATION_ADDRESS ((uint32_t)0x08001400)
//SRAM Address 0x020000C0
void IAP_Set(void)
{
uint32_t i = 0;
/* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/
/* Copy the vector table from the Flash (mapped at the base of the application
load address 0x08003000) to the base address of the SRAM at 0x20000000. */
for(i = 0; i < 48; i++)
{
*((uint32_t*)(0x20000000 + (i << 2)))=*(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
}
/* Enable the SYSCFG peripheral clock*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Remap SRAM at 0x00000000 */
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
}[/mw_shl_code]
有Target对话框可以看出APP程序有Flash地址0x8001400开始执行。Sram数据则有0x20000c0出开始存储。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
不要这样打击别人嘛,分享是好处,比如我就不会,受益匪浅
一周热门 更多>