大家好,请教下关于stm32f407 软件升级问题 设备:1、官方的discovry的开发板MB997B 2、官方提供的STM32F4-Discovery_FW_V1.1.0\Project\FW_upgrade 开发包 3、编译环境使用KEIL MDK 问题:1、利用该程序将自己编译生成的systick的二进制文件下载到0x08008000地址,程序执行COMMAND_JUMP() 后无法启动 2、使用官方提供的.bin文件就可以,就可以正常运行 3、我编译的systick的二进制文件时,同时生成的hex文件,利用STM32 ST-LINK Utility 下载到0x0800 0000地址是可以运行的。(侧面论证了用于编译的原程序无任何问题) 4、编译生成的二进制文件使用的是KEIL自带的二进制生成器来生成的 5、二进制文件是通过单步仿真下载到0x0800 8000 地址,可以确认二进制.bin文件时下载到片内flash内 6、大概问题应该是出在自己编译的.bin文件和官方提供的.bin文件存在差异导致(仅个人推断) 各位大牛如有遇到过该问题的,请指点指点,谢谢! |
RE:STM32F407 USB upgrade问题
RE:STM32F407 USB upgrade问题
0x08000000
??
RE:STM32F407 USB upgrade问题
2、使用官方提供的.bin文件就可以,就可以正常运行
3、我编译的systick的二进制文件时,同时生成的hex文件,利用STM32 ST-LINK Utility 下载到0x0800 0000地址是可以运行的。(侧面论证了用于编译的原程序无任何问题)
---------------------------------------------------------------------------------------------
1、我猜这是笔误。因为0x0800 0000是cortex M3的复位起始地址,用来存放IAP的 ,APP是存放在Boot跳转的位置, 如0x08008000。
2、我猜你的代码无法运行的原因是没有修改中断向量表的映射,在APP的main函数中需要新增一条语句,
void NVIC_SetVectorTable(0x8000000, 0x8000); 用来表示复位/中断发生后,IAP的中断可以映射到APP的 中断 向量表,即可以映射到地址0x08008000。
具体查看datasheet 和stm32的库函数NVIC_SetVectorTable
RE:STM32F407 USB upgrade问题
如果在APP中不重新设置中断向量表为0x08008000,以后发生中断后,中断又映射到地址0x08000000,导致APP的中断无法响应
如果设置了中断向量表,中断发射后映射到地址0x08000000,然后发生有设置的中断映射表在0x08008000,中断重新产生一次映射。
如果需要细究最好看看arm怎么启动的,中断怎么映射的
RE:STM32F407 USB upgrade问题