历史上的今天
返回首页

历史上的今天

今天是:2025年08月15日(星期五)

正在发生

2018年08月15日 | STM32-串口IAP升级

2018-08-15 来源:eefocus

对于写好的程序来说如何烧录到芯片中是十分重要的的过程,在平时测试开发的时候可以直接通过Jlink,swd,usart等方式直接将编译好的程序直接烧录到芯片的Flash中,但是对于已经开发好的产品来说,特别的已经进行了分布部署的设备来说,一个一个升级可以是不可能的事情,一般的升级方式都是通过网络或者其他远程方式来进行固件的升级,但是无论通过什么方式来进行升级,基本上都是将要升级的代码段下载到指定的Flash存储区域中,这也就是IAP升级的主要内容。


IAP升级主要是将不同的程序放置到内部存储区域的不同的位置,然后通过相应的跳转函数,来指向不同的地址空间,这样就可以运行不同的APP程序了。对于STM32来说内置的Flsah分为不同大小的,128,256,512不同大小的容量。首先要根据不同容量来确定不同程序段的存放位置,之后还有了解一下STM32的启动方式,两个方面,一是它不同BOOT电平的不同启动方式,可以通过手册来了解,二是它在启动的时候的寻址模式,因为如果我们需要执行新的APP程序的时候,就是进行中断响应,在我们的新程序中就要从新配置中断向量表的位置,是原先的中断向量表映射到我们新程序的地方,一般的程序都是从0x8000000的地址空间开始运行的,之后跟的就是中断向量表的地址。实现的方式就是更改一下相应的寄存器,但是原理一定要了解,这样才能根据实际的问题来解决。下面贴出一个实现程序跳转的JUMP函数,功能就是是程序运行的指针跳转到我们指定的地方执行,也就是我们新程序的起始地址。


void Jump(void)

{

       /*Ìø×ªÖÁÄ¿±ê³ÌÐò*/

        /* Test if user code is programmed starting from address "ApplicationAddress" */

        printf("%x\r\n",*(__IO vu32*)0x08010000);

        if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

        { 

          /* Jump to user application */

          FLASH_Lock();

          JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);

          Jump_To_Application = (pFunction) JumpAddress;

          /* Initialize user application's Stack Pointer */

          __set_MSP(*(__IO uint32_t*) ApplicationAddress);

          Jump_To_Application();

        }

}

我们程序的起始地址是需要在MDK中进行配置的

这里写图片描述

注意看那个IROM1的地址,需要自定义为0x8002000,这个就是我们程序的起始地址了,执行JUMP函数之后,我们的程序就开始运行我们所升级的程序了。

下面是两个我已经写好的工程,包含两个部分,一个是IAP的BootLoader,一个是执行的跳转程序,也就是我们通过串口进行下载到内部FLASH中的程序


推荐阅读

史海拾趣

Bellnix Co Ltd公司的发展小趣事

随着产品线的不断丰富,Bellnix开始积极拓展市场。公司通过与各大电子厂商建立合作关系,将产品应用于手机、电脑、家电等多个领域。同时,Bellnix还加强品牌建设,通过参加国际电子展会、举办技术研讨会等方式,提升品牌知名度和影响力。这些举措有效地推动了公司的市场拓展,为公司的持续发展奠定了坚实基础。

Cambridge Electronic Industries Ltd公司的发展小趣事

随着公司实力的增强和产品线的丰富,CEI开始积极寻求市场拓展的机会。公司不仅在国内市场取得了显著的成绩,还开始拓展国际市场。CEI与国际电子巨头建立了紧密的合作关系,共同研发新产品,分享技术和市场资源。这些合作不仅提升了CEI的技术水平和市场竞争力,也为其带来了更广阔的发展空间。

Calmos Systems Inc公司的发展小趣事

随着电子行业的快速发展,Calmos Systems Inc公司意识到技术创新是企业发展的核心动力。因此,公司加大了研发投入,引进了一批高水平的技术人才,建立了完善的研发体系。经过多次试验和失败,公司成功开发出了一款具有颠覆性的新技术,这项技术在行业内引起了广泛关注。凭借这一技术创新,公司在市场上获得了竞争优势,实现了快速发展。

宇阳科技(EYANG)公司的发展小趣事

宇阳科技自2001年成立以来,一直致力于片式多层陶瓷电容器(MLCC)的研发和生产。2002年,公司成功研发出0402 BME微型片式多层陶瓷电容器,并通过了新产品鉴定,填补了国内市场的空白。这一创新不仅彰显了宇阳科技在MLCC领域的技术实力,也为公司赢得了市场的认可,为后续的发展奠定了坚实的基础。

旌芯半导体(GN)公司的发展小趣事

宇阳科技自2001年成立以来,一直致力于片式多层陶瓷电容器(MLCC)的研发和生产。2002年,公司成功研发出0402 BME微型片式多层陶瓷电容器,并通过了新产品鉴定,填补了国内市场的空白。这一创新不仅彰显了宇阳科技在MLCC领域的技术实力,也为公司赢得了市场的认可,为后续的发展奠定了坚实的基础。

Alutronic Kuhlkorper Gmbh & Co Kg公司的发展小趣事

作为电子行业的领军企业之一,宇阳科技始终坚持以创新为驱动的发展战略。公司不断投入研发资金,加强技术团队建设,积极引进先进技术和管理经验。通过持续创新和技术升级,宇阳科技成功推出了多款具有自主知识产权的新型电子元器件产品,并引领了行业潮流。同时,公司还积极参与行业标准制定和技术交流合作等活动,为推动电子行业的发展做出了积极贡献。

以上五个故事梗概概述了宇阳科技在电子行业中的发展历程和主要成就。这些故事不仅展现了公司的技术实力和市场地位,也体现了公司不断创新、追求卓越的发展理念。

问答坊 | AI 解惑

贴片式的MAX1898芯片在无PCB板的情况下如何焊接和调试呢?

想先用线搭个板子调试,单片机有管脚座,但是没想到MAX1898电源管理芯片那么小,放在2根牙签粗细的一个塑料管里,这要是我的焊接技术,所有管脚直接短接....有没有大虾介绍下经验阿.... [ 本帖最后由 zxpla 于 2010-4-15 12:54 编辑 ]…

查看全部问答>

无线监控是发展方向 技术改进势在必行

无线监控和传统的监控方案相比,具有以下三大优点:     1、综合成本低,只需一次性投资,无须挖沟埋管,特别适合室外距离较远及已装修好的场合;在许多情况下,用户往往由于受到地理环境和工作内容的限制,例如山地、港口和开阔地等特殊 ...…

查看全部问答>

告别网站被入侵,被安装病毒!

网站被挂马,被入侵,相信这是很多站长的一个心病! 针对这个问题,国内几大idc主机提供商还没有找到解决方案! 为什么我的网站没有漏洞,还会被入侵?这个问题主要出现在服务器安全配置上! 攻击者一般都是跨站攻击,首先就是在同一个服务器 ...…

查看全部问答>

●SQLSERVER CE不支持嵌套查询吗?●

如以下语句: SELECT id,name FROM 表A WHERE id = (SELECT MAX(id) FROM 表A) 这样的语句在2000里运行OK,但是在SQLSERVER CE里却报错。 是SQLSERVER CE不支持吗?有什么解决方案?…

查看全部问答>

单片机串口通信

小弟现在做一个与单片机串口通信有关的设计,具体如下:   主片:PC上连一个无线模块,并装有串口调试助手V2.2.   从片:单片机连一个无线模块,在P1口有8个带锁的按键.    前提:硬件连接没有问题. 要求:把P1口的P1 ...…

查看全部问答>

无刷直流电机(BLDC)基础

无刷直流电机(BLDC)是一种正快速普及的电机类型是,它可在家用电器,汽车,航空航天,消费品,医疗,工业自动化设备和仪器等行业中使用。…

查看全部问答>

《CM3权威指南》

《CM3权威指南》 https://bbs.eeworld.com.cn/frame.php?frameon=yes&referer=http%3A//bbs.eeworld.com.cn/iclist-17.html…

查看全部问答>

求国嵌视频

谁能提供国嵌的加密视频,不求免费,只求不贵。我的邮箱robot1126@126.com。…

查看全部问答>

再来一帖,这次是关于DSP的

想拿下c2000开发板,故发些DSP方面的相关书籍,有些还是英文的,给有能力的人看吧。…

查看全部问答>

怎样使cc2530设备重新搜索、加入网络?

cc2530设备开始时在网络中,通信正常。使用某种机制,设备得知自己所处的网络不存在了,此时怎样才能使设备重新搜索、并加入新的网络?…

查看全部问答>