本帖最后由 飞鹰嵌入式 于 2012-3-5 15:16 编辑
刚开始学习stm32肯定会遇到怎么下载程序,怎么跑程序的问题,一般的都只是介绍启动方式,就是如下:Stm32的启动方式Boot0 Boot1 00sram start0 1ststerm boot start1 1 flash start我来介绍一下具体怎么设置,怎么操作才能达到这样,因为这个问题我也弄了好几天,纠结了几天,环境:MDK硬件:stm32开发板
1、现在来说一下flash start,只要把boot0设置成1就可从flash启动,然后连接jlink, 关键就是代码中的问题: /******************************************************************************** Function Name : NVIC_Configuration* Description : Configures Vector Table base location.* Input : None* Output : None* Return : None*******************************************************************************/
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif}
一般的程序都会有这段,只要没有宏定义VECT_TAB_RAM ,则程序就被设置成在flash里启动然后在MDK里面如下设置我是用的将link下载的,所以选择的是上面的cortexm3-jlink。以上是在falsh里启动的介绍,这样掉电上电后可以正常运行的。
2、下面是说如何在sram中启动,因为在调试阶段最好都在sram里面调试,这样可以对flash进行有效的保护,而且调试下载速度比较快,节省时间。环境:MDK硬件:stm32开发板硬件中必须跳线到boot0 和boot1都为0,还是这段代码: /******************************************************************************** Function Name : NVIC_Configuration* Description : Configures Vector Table base location.* Input : None* Output : None* Return : None*******************************************************************************/
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif}
要进行宏定义VECT_TAB_RAM ,下面就是关键的一步了,就是在MDK中的设置了,如下
initialization file 必须加载,这个文件是如下编写:
FUNC void Setup (void) { PC = 0X20000000;}LOAD .\Obj\GPIO.axf INCREMENTALSetup();g,main只要按照上面的步骤做就可随便想在哪里启动了。 |