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

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

相关文章推荐

ISP与IAP的区别

ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。IAP(In...

ISP与IAP的区别

ISP与IAP的区别                                            两者在操作方式,结果和应用场合区别:  什么是ISP(in system progr...

关于STM32的ISP指令

关于STM32的ISP指令---读写数据缓存 在测试擦除命令的时候发现,写入和读出的数据是有缓存的,目前测试的结果为:写入数据有四个字的缓存,读取数据有15个字的缓存。 例如:最后写入的4个字数据,在...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

关于STM32F030的ISP下载问题

本文将简单介绍STM32系列微控制器的ISP功能和使用该功能时需要注意的一些细节问题。...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

STM32下载不成功问题汇总

在某宝上买了五个最小系统核心板是STM32F103C8T6的芯片,刚拿到手准备下载程序调试,上电后板子自带LED闪烁,这是商家自己下载的示例程序,说明芯片工作着,用KEIL4进行下载自己程序,把自己编...

fscanf()函数详解

以前解析有规律的文件的时候要么用正则表达式,要么就是傻傻的自己写程序来解析有规律的文件。今天突然发现c的库函数中有一个现成的可以解析有规律的文件的函数,就是fscanf()函数。哎 以前自己做了这么多...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stm32 iap跳转isp实现上电isp下载
举报原因:
原因补充:

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