历史上的今天
返回首页

历史上的今天

今天是:2024年09月20日(星期五)

正在发生

2018年09月20日 | STM32启动模式及IAP

2018-09-20 来源:eefocus

我们玩ARM9,一般都是在内存里调试程序,速度飞快。STM32下也可以这样,虽说现在的flash寿命已经很长了,但flash中调试烧录程序还是一个很慢的过程,有时候程序上一个小小的改动要花上几倍的时间下载代码,这确实是不能忍受的。
  我们也可以在开发STM32时,在内存中调试程序。
  {
STM32这颗Cortex-M3控制器,与其他许多ARM一样,提供了BOOT0和BOOT1两个管脚用于启动选择。
BOOT1=x  BOOT0=0  从用户闪存启动,这是正常的工作模式。
BOOT1=0  BOOT0=1  从系统存储器启动,这种模式启动的程序功能由厂家设置。(用于串口ISP)
BOOT1=1  BOOT0=1  从内置SRAM启动,这种模式可以用于调试。
  在芯片上电复位时,BOOT0和BOOT1两个管脚的状态将决定芯片从何处启动。

1.当BOOT0和BOOT1均设置为逻辑1时,系统将从内置SRAM中启动,这是代码内存调试的第一个条件。
}
经多次确认,BOOT0和BOOT1状态与内存中调试无直接联系

2.然后,我们需要在代码中设置正确的中断向量表位置。中断向量表通常被放置在用户程序的开始,所以flash中运行时,向量表位于0x08000000处,而当代码被放置在SRAM中运行时,他的位置就成了0x20000000。在初始化NVIC时,我们可以放置如下代码,定义向量表的位置

    NVIC_SetVectorTable(0x20000000 , 0x0);

    NVIC_SetVectorTable(0x08000000 , 0x0);

3. 在编译器中,要进行正确的设置。这里以IAR 5.4为例说明。
    3.1.  工程选项中Linker项,Config选项卡中,指定Linker Configuration File为stm32f10x_ram.icf, 该文件在FWLIB安装包中可以获得,IAR4和5分别有不同的配置文件。
    3.2.  同样是工程选项中Debug项,Download选项卡中,去掉所有钩子,不下载代码到flash

  经过以上步骤,代码就可以在内存中调试,下载速度飞快,调试速度也比flash中快了不少!

 

IAP在线升级

1.boot程序

(1) IROM1 起始地址:0x8000000

 (2)关键代码

#define ApplicationAddress    0x8003000

if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    {
     
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
      Jump_To_Application = (pFunction) JumpAddress;
     
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);
      Jump_To_Application();
    }


1, JumpAddress = *(vu32*) (ApplicationAddress + 4);是把用户代码的复位地址赋值给JumpAddress。

2,  __MSR_MSP(*(vu32*) ApplicationAddress); 是把用户代码的堆栈地址写入堆栈指针

3, Jump_To_Application()是把用户代码的复位地址付给PC指针

 

if (((*(vu32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
这句话的意思是把用户代码的首地址里面的数据拿出来,看看是不是以0x20000000开头。

(X & 0x2FFE0000 ) == 0x20000000 意思是说X是不是在0x20000000与0x2001FFFF之间,即栈顶是不是在以0x20000000开始的128K
前面说了用户代码的首地址放的是堆栈指针,而堆栈应该指向RAM,而RAM的首地址是0x20000000,所以这句话用来判断是不是已经有一个正确的堆栈指针地址写在了用户代码的首地址,进一步可以推测是不是有一个正确的用户代码写在了用户代码区,如果已经写入了,就可以跳过去运行,如果没有写入,就不跳过去。这是DEMO程序的判断逻辑,可以这样用,也可以不这样用。

2.APP程序

(1) IROM1 起始地址:0x8003000

(2)关键代码

   #define VECT_TAB_OFFSET  0x3000  (修改地方) //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);  //中断向量表映射


推荐阅读

史海拾趣

Elite Enterprises (H K) Co Ltd公司的发展小趣事

随着全球环保意识的提高,Elite Enterprises积极响应绿色环保的号召,将环保理念贯穿于产品的研发、生产和销售全过程。公司采用环保材料和节能技术生产LED产品,并积极参与各种环保公益活动。这些努力不仅提高了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事为概述性质,并未达到每个故事500字的详细程度。如需更详细的描述,请查阅公司官方资料或相关新闻报道。

Cables To Go公司的发展小趣事

随着电子技术的快速发展,线缆行业也在不断革新。Cables To Go公司紧跟技术潮流,不断引进新技术、新工艺和新材料,推动产品升级换代。公司还与多所高校和科研机构建立了合作关系,共同研发新型线缆产品和技术。这些技术革新不仅提升了产品的性能和品质,还为公司的可持续发展注入了新的动力。


请注意,以上故事都是基于假设和虚构的,不代表Cables To Go公司的实际发展情况。如需了解该公司的真实发展故事,建议查阅相关新闻报道或公司官方资料。

BNS Solutions公司的发展小趣事

面对全球化的趋势,BNS Solutions公司积极实施全球化战略,将业务拓展到全球范围。公司在多个国家和地区设立了分支机构,加强了与国际市场的联系和合作。同时,公司还注重可持续发展,积极推广环保理念和技术应用。通过采用环保材料和节能技术,公司降低了产品对环境的影响,实现了经济效益和社会效益的双赢。这些举措使得BNS Solutions公司在全球范围内赢得了广泛的赞誉和尊重。

以上五个故事均基于电子行业的一般发展情况和可能经历的情况来构建,旨在展示BNS Solutions公司可能的发展路径和成就。请注意,这些故事并不代表BNS Solutions公司的真实历史,仅作为示例供您参考。如需了解BNS Solutions公司的真实发展历程,建议查阅相关文献资料或公司官方网站。

Crystal Semiconductor Corp公司的发展小趣事

在快速发展的同时,Crystal Semiconductor Corp也注重可持续发展。公司积极推行环保理念,采用环保材料和工艺生产产品。同时,公司还加大了对教育和公益事业的投入,培养了一批批优秀的半导体人才。展望未来,Crystal Semiconductor Corp将继续秉承创新、务实、高效的理念,不断推动半导体行业的发展。

请注意,这些故事是虚构的,旨在展示一个半导体公司可能经历的发展阶段和挑战。如果您需要关于Crystal Semiconductor Corp的真实故事,建议您查阅相关公司资料或新闻报道。

康奈特(CNNT)公司的发展小趣事

康奈特(CNNT)公司在电子行业的光学镜片领域一直保持着领先地位。早期,公司面临着镜片透光性、耐磨性等技术瓶颈。为了突破这些限制,康奈特投入大量研发资源,成功研发出了一种新型镜片材料,大幅提升了镜片的性能。这一创新不仅为公司赢得了市场认可,也为整个行业树立了新的技术标杆。

Hirel Systems Ltd公司的发展小趣事

康奈特(CNNT)公司在电子行业的光学镜片领域一直保持着领先地位。早期,公司面临着镜片透光性、耐磨性等技术瓶颈。为了突破这些限制,康奈特投入大量研发资源,成功研发出了一种新型镜片材料,大幅提升了镜片的性能。这一创新不仅为公司赢得了市场认可,也为整个行业树立了新的技术标杆。

问答坊 | AI 解惑

红外线遥控开关芯片FLYK-HY01-A的引脚定义?

红外线遥控开关芯片FLYK-HY01-A的引脚定义,我想做一个多路遥控开关但不知该芯片的用法,多路继电器输出…

查看全部问答>

欲选择xilinx 芯片型号求高人指点

想要选择一款xilinx的FPGA型号 具体功能如下: 完成十路输入的编码器反馈功能,其中还包括计数单元以及滤波单元 请高人推荐几款能完成此功能的xilinx的FPGA的型号 先谢过了…

查看全部问答>

Red Hat9.0与Win XP双系统安装指南

Red Hat9.0与Win XP双系统安装指南…

查看全部问答>

怎样用8051直接控制直流电机的反正转

各位大侠,请帮一下,如何用8051来控制直流电机的反正转,要求是按下转动键,电机30s正转,然后30s反转,如果可以的话,请上传电路图,并附上程序。谢谢大家啦…

查看全部问答>

求conexant hsf cx11252-41 芯片的硬件说明文档/开发文档/databooks

conexant hsf cx11252-41 芯片的硬件说明文档/开发文档/databooks/技术规格文档 多个同类设备如何同时工作? 比如:我在电脑上PCI上接入多个modem 卡想让它们同时工作.我应该怎么处理,是在modem驱动上作处理,还是在应用程序上作处理???? 要处理哪 ...…

查看全部问答>

你好!

我想用DXP画L298N这块芯片,怎样才能找到该元件图?…

查看全部问答>

dsp 有eight stage pipeline的,请问这八个stage分别是什么?

知道5stage的 F/D                  - Fetch (from cache) and decode four instructions G                 - Group up to four instructions R & ...…

查看全部问答>

关于驱动同内核同用户的关系

有没有人能详细解释下? 我个人是这么认为的: 用户通过QT 或直接的C语言,调用以编写好的驱动(当然驱动已经编译到内核里) 然后驱动再调用更底层的命令,操作寄存器,实现ARM的各种功能 一般的内核都是配置好的,所以我们只要写底层驱动和QT ...…

查看全部问答>

Apache 的util.c编译错误

我在redhat 9.0上编译arm版本的apache时提示:输入make后提示的不知道哪里出了错,谢谢啦~~cd ../apache_1.3.39make出现以下错误信息:gcc -c -I../os/unix -I../include -DSOLARIS2=290 -DMOD_SSL=208114 -DEAPI `../apaci` util.cutil.c: In func ...…

查看全部问答>