stm32 iap跳转isp实现上电isp下载

原创 2016年08月28日 19:46:18

概述:本程序上电等3秒种,期间每隔10ms检测一次串口是否收到握手指令(0x7F),若收到则跳转到isp程序执行。可以用mcuisp软件通过串口1直接升级程序。是一种简单的iap程序。初次下载需要手动让mcu进入isp模式。

1先看看最终效果:成功!

2.实现isp跳转

stm32的isp程序在系统存储区,可以通过boot0,boot1引脚选择,也可以通过程序直接跳转,isp程序的入口地址为 0x1FFFF000

跳转函数如下:

#define ISP_ADDR        0x1FFFF000

void IspProgramRun(void)
{

    u32  IspSpInitVal;           //IAP程序的SP初值.

    u32  IspJumpAddr;            //IAP程序的跳转地址.即,IAP程序的入口.

    void    (*pIspFun)(void);       //定义一个函数指针.用于指向APP程序入口.

  //  NVIC_DeInit ();                                 //恢复NVIC为复位状态.使中断不再发生.
   
    IspSpInitVal = *(u32 *)ISP_ADDR;             //取APP的SP初值.

    IspJumpAddr = *(u32 *)(ISP_ADDR + 4);        //取程序入口.

 __set_MSP(IspSpInitVal);     //设置SP.
                   
    pIspFun = (void (*)(void))IspJumpAddr;              //生成跳转函数.

    (*pIspFun) ();                                  //跳转.不再返回.
}
3.主函数代码如下:
int main(void)

 
 SystemInit();//初始化RCC 设置系统主频为72MHZ
  
 delay_init(72);      //延时初始化
 
 Usart_Init(115200);
 
 for(bootcount = 0;bootcount < 300;bootcount++)
 {
  if(USART1_RX_BUF[0] == 0x7F) IspProgramRun();
  delay_ms(10);
 } 
 
 LED_Init();
 KEY_Init();
 
 while(1)
 {
  keynum = KEY_Scan();
  if(keynum == 1)
  {
   if(RESET == GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8))   LED0_OFF();
   else LED0_ON();
  }
  if(keynum == 2)
  {
   if(RESET == GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2))   LED1_OFF();
   else LED1_ON();
  }
  keynum = 0;
 };
      
}

LED 按键 串口代码请自行查阅相关资料
代码下载地址  http://download.csdn.net/detail/linis_yes/9615283

版权声明:本文为博主原创文章,未经博主允许不得转载。

STM32的ISP下载程序

  • 2013年03月01日 00:33
  • 76KB
  • 下载

STM32_ISP下载源码

  • 2014年09月01日 11:58
  • 5.82MB
  • 下载

stm32的三种编程下载方式

转自:http://blog.chinaunix.net/uid-20788517-id-263475.html J-link几乎可以调试所有的arm芯片,不得不说是个好东东。这里记录三种stm32...
  • u012252959
  • u012252959
  • 2016年09月18日 16:42
  • 1385

stm32的程序下载方式ISP、JFLASH、MDK总结

1.首先看一下stm32启动模式  stm32的启动模式由32芯片的boot0与boot1引脚决定。分为内嵌flash启动模式(正常启动模式)、内存启动模式、rom启动模式 启动方式与引脚...
  • Android_Linux_Unix
  • Android_Linux_Unix
  • 2017年06月09日 08:34
  • 1089

ISP与IAP的区别

ISP与IAP的区别                                            两者在操作方式,结果和应用场合区别:  什么是ISP(in system progr...
  • lijing198997
  • lijing198997
  • 2014年03月27日 14:59
  • 4045

stm32的程序下载方式ISP、JFLASH、MDK总结

1.首先看一下stm32启动模式  stm32的启动模式由32芯片的boot0与boot1引脚决定。分为内嵌flash启动模式(正常启动模式)、内存启动模式、rom启动模式 启动方式与引脚...
  • Android_Linux_Unix
  • Android_Linux_Unix
  • 2017年06月09日 08:34
  • 1089

STM32 ISP烧录过程

STM32在芯片生产过程中内嵌了一段引导程序,其作用就是通过串口将程序下载到Flash中,为以后的软件更新提供了极大的便利,用户不需要利用仿真口进行下载程序,从而极大的提高了工作效率。 STM32复位...
  • cao_yanjie
  • cao_yanjie
  • 2017年07月28日 16:24
  • 717

在线编程的两种方法——IAP,ISP

In Application Programming 是指在应用编程,单片机程序自己可以往程序存储器里写数据或修改程序!...
  • ysmz4
  • ysmz4
  • 2014年05月07日 09:27
  • 879

stm32下载方式之串口ISP\swd(JLink)

1.首先看一下stm32启动模式  stm32的启动模式由32芯片的boot0与boot1引脚决定。分为内嵌flash启动模式(正常启动模式)、内存启动模式、rom启动模式 启动方式与引脚...
  • xiaoke5177
  • xiaoke5177
  • 2014年12月18日 21:05
  • 4502

stm32l01系列单片机通过串口编程(ISP)

通过串口给stm32l01系列单片机编程方法总结官方给出的ISP软件(串口烧录软件)FlashLoader Demonstrator不支持stm32l01系列的单片机那么我们怎么使用串口给这个型号的单...
  • duanqiaocanying
  • duanqiaocanying
  • 2017年03月02日 10:40
  • 387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stm32 iap跳转isp实现上电isp下载
举报原因:
原因补充:

(最多只允许输入30个字)