历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2019年01月16日 | stm32 iap跳转isp实现上电isp下载

2019-01-16 来源:eefocus

概述:本程序上电等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;

 };

      

}


推荐阅读

史海拾趣

宝乘(baocheng)公司的发展小趣事

随着产品质量的提升和技术的不断创新,宝乘公司开始积极拓展市场。公司与多家知名企业建立了战略合作关系,共同推动半导体功率器件在LED照明、电源、消费类电子等多个领域的应用。同时,宝乘还积极参加国内外电子行业的展览和交流活动,与同行交流学习,不断提升自身的竞争力。

AZ Displays公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,AZ Displays始终保持着创新的活力。公司不断投入研发资源,推出具有创新性和领先性的产品。同时,AZ Displays还积极关注行业动态和新兴技术,不断调整和优化产品策略,以确保公司在市场中的领先地位。

这些故事展示了AZ Displays在电子行业中的发展历程和成就,体现了公司不断创新、追求卓越的精神。未来,随着科技的不断进步和市场需求的不断变化,AZ Displays将继续保持创新活力,为客户提供更优质的产品和服务。

铨力(ALLPOWER)公司的发展小趣事

铨力(ALLPOWER)公司成立于XXXX年,由一群热衷于绿色能源技术的创新者共同创立。公司初期专注于太阳能电源产品的研发和生产,凭借着对技术的深入研究和市场需求的敏锐洞察,很快在行业中崭露头角。通过不断的技术创新和产品优化,铨力逐渐在太阳能电源领域建立起自己的品牌地位。

Helicomm公司的发展小趣事

铨力(ALLPOWER)公司成立于XXXX年,由一群热衷于绿色能源技术的创新者共同创立。公司初期专注于太阳能电源产品的研发和生产,凭借着对技术的深入研究和市场需求的敏锐洞察,很快在行业中崭露头角。通过不断的技术创新和产品优化,铨力逐渐在太阳能电源领域建立起自己的品牌地位。

ETEQ Microsystems Inc公司的发展小趣事

ETEQ Microsystems Inc一直将品质管理作为公司的核心竞争力之一。公司建立了严格的质量管理体系,从原材料采购到产品生产、测试、包装等各个环节都严格把控。同时,公司还鼓励员工积极参与品质改进活动,通过持续改进不断提升产品质量和客户满意度。

AW Industries Inc公司的发展小趣事

近年来,电子行业经历了巨大的变革,新技术、新产品层出不穷。面对这一挑战,AW Industries Inc积极调整战略,加大了对新技术、新产品的研发力度。同时,公司还通过优化生产流程、提高生产效率等方式降低成本,以保持竞争优势。这些措施使公司在行业变革中保持了稳定的发展态势。

问答坊 | AI 解惑

24bit ECC问题

TH58NVG6D2ETA20 的nand  flash要求1KB 24 bit ECC,如果我用512B 12 bit ECC代替是否会有风险,谢谢~~    nand flash的bit error rate跟那些因素相关?…

查看全部问答>

急聘高级硬件工程师和硬件开发部经理(广州)

高级硬件工程师,年薪最低10万,根据个人能力而定: 1 熟悉单片机,数字电路,熟悉VC/C++,Protel99,USB及NT下的编程 2 有32位单片机应用开发经验者优先 3 电子,通讯类相关专业,有大型嵌入式开发经验者优先 硬件开发部经理,年薪最低12万,根据个人能力 ...…

查看全部问答>

鼠标移动检测。

嵌入式系统,usb的鼠标,已经检测到了mouse0设备了,并且上层程序可以打开open了设备了,如何检测鼠标移动了呢?…

查看全部问答>

底层开发

做wince驱动开发, bootloader 开发(ARM下). 需要有哪些预备知识? 或 怎么去学习它? 请个个步骤,谢谢!…

查看全部问答>

ARM9开发板的选购

请大家帮忙推荐一款ARM9开发板吧,主要是用来学习,首要考虑的是其提高的资料是否齐全,其次是价格。请大家帮忙推荐一下吧,小弟不太懂,在此谢过了!…

查看全部问答>

★★★最新中文版STM32数据手册和技术参考手册可供下载★

STM32的数据手册是根据2007年11月英文第四版翻译而成。英文原文下载地址:http://www.st.com/stonline/products/literature/ds/13586.pdfSTM32的技术参考手册是根据2007年11月英文第二版翻译而成。英文原文下载地址:http://www.st.com/stonli ...…

查看全部问答>

ST触摸库抗干扰问题

用ST触摸库做了几款产品了, 在办公室测试没有问题, 但是到车间生产的时候灵敏度就明显下降 目前总出货量已经超过8K了,也没有接到相关投诉,所以我想是不是我们车间特有的什么干扰造成的 想问问其他TX有没有这样的问题??怎么解决的?? 谢谢!…

查看全部问答>

能不能开展一个FPGA的USB仿真器的DIY活动呀

现在只是在论坛上看到了FPGA的板子,可是要到哪里才能弄到仿真器呢? 希望论坛能够开展一个“USB接口的FPGA仿真器”的DIY活动, 谢谢…

查看全部问答>

电子设计大赛实用资料

本帖最后由 paulhyde 于 2014-9-15 09:35 编辑 电子设计大赛的一些高频模块资料,蛮好  …

查看全部问答>

【我给XILINX资源中心做贡献】EEWORD史上最全的FPGA论文集

EEWORD史上最全的FPGA论文集 大小 200M 传上来不容易呀 [ 本帖最后由 wanghongyang 于 2011-4-27 12:18 编辑 ]…

查看全部问答>