利用ST提供的USB例程实现USB IAP功能

发布者:PeacefulWarrior最新更新时间:2016-06-30 来源: eefocus关键字:ST  USB例程  IAP功能 手机看文章 扫描二维码
随时随地手机看文章
我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是System Flash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是User Flash,这一部分是供用户自由使用的。STM32自带USB 2.0 Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用ST STM32xx USB Development Kit提供的DFU代码来实现上述功能。我用STM3210EVB来演示这个功能。

下列步骤将介绍如何通过ST官方的USB升级代码实现程序的下载更新的功能(IAP)。 

1、打开STM3210B-EVAL demonstration software压缩包,在STM3210B-EVAL demonstration software/Demo/source下打开main.c文件,找到void InterruptConfig(void) 函数 

  /* Set the Vector Table base address at 0x08000000 */ 
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00); 

    这里我们需要修改代码的中断矢量起始地址,这样做的目的是为了处理IAP代码在Flash存放的区域与Application Code部分的存放空间不会发生地址冲突。这里我们假设IAP存放在User Flash的0x08000000~0x08003FFF区域,Application code存放在User Flash的0x08004000~0x0801FFFF区域。因为Application code的开始地址是由0x08004000开始,这样我们需要为应用代码的中断向量地址做一个重映射。因此我们修改该代码为: 

  /* Set the Vector Table base address at 0x08004000 */ 
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);   

    请注意这里NVIC_SetVectorTable函数的型参送入的是相对偏移地址,而不是绝对地址; 

2、在STM3210B-EVAL demonstration software/Demo/project/EWARM下找到lnkarm_flash.xcl文件,在XCL文件中找到下面的配置,该配置用于定制应用代码在Flash区域的存放空间和代码运行是RAM可以提供的空间。 

    // Code memory in FLASH 
    -DROMSTART=0x8000000 
    -DROMEND=0x803FFFF 

    // Data in RAM 
    -DRAMSTART=0x20000000 
    -DRAMEND=0x20004FFF 

    由于我们的目标应用代码将是在0x08004000区域运行,因此我们修改为: 

    // Code memory in FLASH 
    -DROMSTART=0x8004000 
    -DROMEND=0x801FFFF 

    // Data in RAM 
    -DRAMSTART=0x20000000 
    -DRAMEND=0x20004FFF 

    在编译的时候请确保Project->Options->Linker->Config标签下的链接命令文件选择的是上述lnkarm_flash.xcl文件; 

3、应用部分改好,现在我们修改USB固件升级部分的代码,打开STM32F10xxx USB developer kit开发包。 

4、在开发包下面找到 /STM32F10xUSBLib/USBLib/demos/Device_Firmware_Upgrade例程,该例程是一个在STM32F10xx系列MCU上实现运行在User Flash区域的IAP自升级代码,通过STM32自身提供的USB接口实现。在/STM32F10xUSBLib/USBLib/demos/Device_Firmware_Upgrade/source路径下找到main.c文件,在56行: 

       if (DFU_Button_Read() != 0x00) 
       { /* Test if user code is programmed starting from address 0x8003000 */ 
               if (((*(vu32*)0x8003000) & 0x2FFF0000 ) == 0x20000000) 
               { /* Jump to user application */ 

              JumpAddress = *(vu32*) (ApplicationAddress + 4); 
               Jump_To_Application = (pFunction) JumpAddress; 
               /* Initialize user application's Stack Pointer */ 
               __MSR_MSP(*(vu32*) ApplicationAddress); 
              Jump_To_Application(); 
               }     
  } /* Otherwise enters DFU mode to allow user to program his application */ 

    这段代码的功能是对应用部分的代码开始地址做判断,这里的地址与我们之前的步骤1、2都是对应的。 

    同样这个代码做如下更改: 
        /* Test if user code is programmed starting from address 0x8004000 */ 
               if (((*(vu32*)0x8004000) & 0x2FFF0000 ) == 0x20000000) 

5、hw_config.h中定义: 
    #define ApplicationAddress 0x08003000 
    改为 
    #define ApplicationAddress 0x08004000 
     
    编译代码,下载到STM3210 Evaluation Board。 

6、在ST的网站中找到USB IAP的PC端用于程序DfuSe USB Device Firmware Upgrade,安装后执行DfuSe Demonstration程序。

 

CortexM3的中断向量表处理比ARM7方便了很多,它可以设定中断向量表的起始位置,而ARM7如果要实现IAP,则必须用“两级跳”的方式来实现中断处理,即中断到来时先跳到0地址为起始地址的相应中断入口,这个入口实际又是一个跳转,它跳转到RAM中的中断向量表(系统启动后需要注册相关中断向量到此位置),进而进入ISR。所以说CortexM3系统可以有N个中断向量表,只要修改一下起始地址就可以了。

 

 

部分回帖

. ApplicationAddress对应着你的应用程序"stm32f10x_vector.c"这个文件中的__vector_table 
*(__IO uint32_t*)ApplicationAddress 与 __vector_table[0]是一样的 
*(__IO uint32_t*) (ApplicationAddress + 4) 与 __vector_table[1]是一样的 
__vector_table[0]是应用程序栈的顶 
__vector_table[1]是应用程序的启动地址 

(X & 0x2FFE0000 ) == 0x20000000 意思是说X是不是在0x20000000与0x2001FFFF之间,即栈顶是不是在以0x20000000开始的128K 的范围内,这里便是STM32的RAM区域,虽然现在最大的只有64k

关键字:ST  USB例程  IAP功能 引用地址:利用ST提供的USB例程实现USB IAP功能

上一篇:STM32启动模式及API
下一篇:Cortex-M3 VS ARM7

推荐阅读最新更新时间:2024-03-16 14:59

别小看意法半导体,狠起来也是自动驾驶“一霸”
文 | 大壮旅 来自新智驾(AI-Drive)的报道 汽车行业正掀起一场自动驾驶平台大战,但作为世界上最大半导体公司之一的意法半导体却显得有些不动声色,看起来与老对手英伟达、英特尔和瑞萨完全不在一个量级上。 不过,这种看扁意法半导体的想法绝对可以用无知来形容,它在全球汽车市场的地位依然无可动摇。虽然意法还未推出正式产品,但该公司为快速变化的汽车市场备足了各种黑科技。 首先,它有一个强大的 MCU(微控制器)家族,该系列产品基于 ARM Cortex-R52,采用六核设计,主攻汽车行业中不断膨胀的数据流问题。 除此之外,意法半导体还携手神秘合作伙伴(并非 Mobileye)研发了 360 度专用集成电路(ASIC)视觉处理器
[汽车电子]
别小看<font color='red'>意法半导体</font>,狠起来也是自动驾驶“一霸”
ST官网下载STM8/32的官方例程
01、进入ST官网 参考网址: https://www.st.com 02、参考下图 03、参考下图 04、参考下图 05、参考下图 06、参考下图 07、参考下图 08、参考下图 09、参考下图 10、参考下图 11、参考下图 12、参考下图 13、参考下图 14、参考下图 15、参考下图 - 登录成功,会弹出下载界面
[单片机]
从<font color='red'>ST</font>官网下载STM8/32的官方<font color='red'>例程</font>
ST联手Fieldscale为基于STM32的智能设备带来简单直观的触控体验
半导体供应商意法半导体(STMicroelectronics,简称ST; 纽约证券交易所代码:STM)与ST授权合作伙伴、仿真软件提供商Fieldscale合作,简化基于STM32微控制器(MCU)的智能设备的触控用户界面开发过程。 触控功能方便省事,对最终用户很有吸引力,并且可以提高产品的可靠性、入口防护级别和成本效益。另一方面,触控界面开发具有挑战性。当采用常规的迭代设计方法时,优化系统,消除意外影响并确保触控响应性在任何操作条件下都保持一致,用户可能需要开发多个原型。 现在,意法半导体和Fieldscale公司合作,让Fieldscale的SENSE开发平台支持意法半导体的Arm® Cortex®-32位MCU
[单片机]
<font color='red'>ST</font>联手Fieldscale为基于STM32的智能设备带来简单直观的触控体验
意法半导体推出一款小尺寸、低功耗、高分辨率全局快门图像传感器
新产品应用广泛,包括 AR/VR、个人机器人、工业机器人、无人机、条形码、生物识别、手势识别、嵌入式视觉和场景识别 2023年12月18日, 中国-服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST), 推出一款能够增强智能计算机视觉的全局快门图像传感器。当拍摄正在移动的对象或使用近红外光源补光时,全局快门图形传感器有助于捕捉无失真的图像。 意法半导体执行副总裁、影像产品部总经理 Alexandre Balmefezol 表示:“我们的新全局快门图像传感器分辨率很高,同时尺寸很小,适用于智能眼镜和 AR/VR 耳机等穿戴式设备,还是个人机器人、工业机器人以及智能家
[传感器]
<font color='red'>意法半导体</font>推出一款小尺寸、低功耗、高分辨率全局快门图像传感器
意法半导体ST)推出先进智能IC卡
中国,2012年10月8日 —— 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布针对公共交通、银行以及电子身份证应用的下一代安全微控制器。这款安全微控制器沿用意法半导体的90纳米先进制程,可提高智能卡的安全性,并支持在全球主要地区所实施的智能卡标准。 新产品是目前市场上唯一能够自动识别ISO 14443 A类或B类非接触式读卡器并选用正确的通信协议回应读卡器的安全微控制器,双协议的灵活性让意法半导体能够锁定重要市场,为客户提供开发应用软件的便利性,不论使用哪一种协议,只需开发一个应用软件。采用意法半导体最新芯片的公共交通、电子支付以及
[半导体设计/制造]
<font color='red'>意法半导体</font>(<font color='red'>ST</font>)推出先进智能IC卡
ST高温Snubberless™800V H系列可控硅,更省空间更可靠
意法半导体发布800V H系列可控硅,其在最大额定输出电流时最高结温达到150°C,因此可以将交流负载驱动器的散热器尺寸缩减多达50%,开发紧凑尺寸与高可靠性兼备的交流驱动器。 新的800V H系列可控硅适用于工业制造设备、个人护理产品、智能家居产品和智能建筑系统,利用意法半导体最新的Snubberless™高温技术实现了出色的耐用性。低导通电压(VTM)确保开关具有较高的工作能效,并最大程度地降低器件本身的自发热量,具有很低的漏电流,并能够长时间保持低漏电流,从而降低了待机电能损耗。此外,高临界关断电流斜率配合稳健的动态性能,可防止发生多余的换向操作。 800V H系列可控硅 能够安全地驱动感性负载,让设计人员能够
[半导体设计/制造]
<font color='red'>ST</font>高温Snubberless™800V H系列可控硅,更省空间更可靠
e络盟开售来自意法半导体和伍尔特电子的1kW高效模拟无桥PFC
这款PFC设备采用BARBI拓扑结构设计,性价比高、性能强大,且简单易用 中国上海,2023年6月2日 – 安富利旗下全球电子元器件产品与解决方案分销商e络盟现货发售来自意法半导体和伍尔特电子的1kW 模拟无桥功率因数校正(PFC)设备,采用BARBI拓扑结构设计。 BARBI是一种创新型无桥功率因数校正(PFC)拓扑结构,可提高电源转换效率和功率密度。 它仅使用两个MOSFET作为同步整流器即可实现更高效率,无需借助由4个二极管组成的传统桥式整流器。尽管采用无桥设计,BARBI仍然可以通过模拟控制器进行控制,而无需使用复杂的晶体管驱动电路,这是因为其开关仅由LS栅极驱动器驱动。 EVL4986A-1KWBL演
[电源管理]
e络盟开售来自<font color='red'>意法半导体</font>和伍尔特电子的1kW高效模拟无桥PFC
ST为SIRIUS Backseat TV汽车后座椅电视提供数字卫星广播芯片
SIRIUS卫星广播数字电视机在克莱斯勒新车型上为消费者提供优质的节目接收功能 中国,2007年6月26日 — 意法半导体(纽约证券交易所代码 STM)今天宣布为SIRIUS Backseat TV提供数字广播芯片组,SIRIUS Backseat TV是一套从最好的家庭电视广播公司直接向汽车提供直播节目的全新的电视服务。SIRIUS后座椅电视将在今年晚些时候在2008车的克莱斯勒、Jeep和Dodge的新车上开播。 SIRIUS后座椅电视服务提供三个家庭电视节目频道,接收这三套节目需要一个车用卫星电视机和两个小型车顶天线。SIRIUS后座椅电视的数字音像信号采用与SIRIUS的无线电广播相同的频谱分配方案。 这个车用卫星
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved