stm32 IAP 实现

发布者:艺泉阁最新更新时间:2016-08-25 来源: eefocus关键字:stm32  IAP 手机看文章 扫描二维码
随时随地手机看文章
在对STM32存储器结构及相关知识了解后,我们就可以进行IAP的设计了。

在上一篇笔记中,进行了一个简单的IAP程序结构,以及和User App程序的相互联系的系统设计。

本篇对IAP实现的细节进行了较为详细的论述,包括源码结构的设计;我们从上位机(PC—C#)和下位机(MCU—C)共同描述IAP功能的实现过程。

 

1 STM32的IAP实现平台

IAP功能的实现需要两个方面(上位机和STM32上的IAP程序)的密切合作。因此,我们除了需要知道STM32芯片上的IAP程序结构,我们还需要了解上位机的程序结构,这样才能使上位机和STM32很好的相互工作。

下位机(指的是STM32构成的单片机系统):

本下位机系统使用C语言进行编程,项目功能是实现IAP(In Application Programming);

下位机使用IAR Embedded Workbench for ARM 6.10 Kick start开发环境;

使用STM32F103C8-PKT开发板进行调试和验证;

 

上位机(指的是PC构成的PC系统):

本上位机系统使用C#语言进行编程,项目功能是配合下位机实现IAP;

上位机使用Visual Studio 2008开发环境;

使用一般的PC机进行调试和验证;

 

上位机和下位机通讯(串口通讯):

上下位机之间通过串口进行通讯;

上位及通讯一定的通讯协议将需要更新的程序通过串口传输给IAP程序,再由IAP程序将数据写到用户的Flash区域;从而达到IAP功能,如图所示:

STM32存储器 <wbr>鈥 <wbr><3> <wbr>STM32实现IAP(上位机和IAP程序设计)

 

2 STM32和上位机的通讯协议

如何将更新程序的bin文件数据传输到STM32系统内部?

如何将串口接收到的一连串数据给解析出来,进行有效数据的写Flash?

如何得知数据传输的开始?

又如何得知数据传输的结束?

……

以上的种种疑惑,都是我们必须要关心的问题;而这些问题都隐藏着一样的本质——如何获取PC端有用的信息?

对于如何获取有用信息,有几个问题需要考虑:

通过何种方式获取?——我们采用USART;

何种数据才是有用的?——我们指定一个简单的协议;

又是如何实现IAP程序和APP程序的切换的;

在硬件上,USART的实现较为简单;我们重点在于协议的设计和理解;

3 STM32—IAP程序的实现

1、IAP通过USART和上位机通讯,实现数据的下发和在应用编程;如图:

STM32存储器 <wbr>鈥 <wbr><3> <wbr>STM32实现IAP(上位机和IAP程序设计)

 

2、上位机和STM32系统USART之间通过一个简单的协议进行连接;

当连续收到4次0xBB后,表示开始接收用户代码;

当连续收到4次0xEE后,表示结束接收用户代码;如图:

STM32存储器 <wbr>鈥 <wbr><3> <wbr>STM32实现IAP(上位机和IAP程序设计)

 

3、IAP程序位于Flash启动的起始地点,判断相应标志,是更新程序,或是运行用户程序;IAP程序更新之后,设定标志,跳转到用户程序区去,完成IAP,实现新的用户功能;如图:

STM32存储器 <wbr>鈥 <wbr><3> <wbr>STM32实现IAP(上位机和IAP程序设计)

 

4 STM32—上位机程序的实现

如图,为一个简单的上位机界面:

STM32存储器 <wbr>鈥 <wbr><3> <wbr>STM32实现IAP(上位机和IAP程序设计)

 

上位机主要分为两个部分:

1、串口配置部分:

选择端口、波特率,和数据类型,点击USART Open按钮;

2、串口通讯部分:

通讯部分,可以通过三步进行一次IAP功能的实现;

A、发送起始字节——0xBBBBBBBB

B、发送用户代码——通过转换Hex文件获取

C、发送结束字节——0xEEEEEEEE

 

5 上位机和STM32实现IAP功能的注意

1、上位机和STM32系统需要有相对应符合的通讯协议;

2、上位机和STM32系统的设计,要考虑到程序处理时间;防止时间的因素而无法响应;

3、为提高可靠性和安全性,需要设计更为友好的通讯协议;

 

 

 

 

 

 

 

 

 

 

 

至此,关于《STM32实现IAP(上位机和IAP程序设计)》知识已经结束;

至此,关于STM32存储器知识等三篇笔记都已经结束。

完成STM32存储器知识过程中,一共参考了以下官方文档:

《RM0008 Reference manual》

《Cortex-M3技术参考手册》

《PM0042 Programming manual:STM32F10xxx Flash programming》

《AN2557 Application note:STM32F10x in-application programming using the USART》

等等;

另外也参考了很多无私网友的奉献,在此感谢。

 

关于我的STM32存储器知识共有三篇文章,分别是:

《stm32的存储器》

《STM32存储器知识的相关应用(IAP、Bit Banding)》

《STM32实现IAP(上位机和IAP程序设计)》

关键字:stm32  IAP 引用地址:stm32 IAP 实现

上一篇:stm32 启动文件的选择
下一篇:stm32 升级程序方案

推荐阅读最新更新时间:2024-03-16 15:06

STM32 USB学习笔记2
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library STM32Cube库中提供了一些有关USB的例程,在其工程目录下的Applications目录中,这里打开STM3210E_EVAL目录,可以看到如下例程: 这里选取一个简单的例子CDC_Standalone,为一个USB通信例程,具体实现是一个USB转串口的功能,相当于USB串口线。把示例里面的inc和src目录下的文件拷贝到新建工程中,这里是把跟usb通信相关的文件放到了vcp目录下。文件目录结构如下: 其中BSP目录很简单,由于所购
[单片机]
图说CRC原理应用及STM32硬件CRC外设
在嵌入式产品应用中,常常需要应对系统数据在存储或者传输过程中的完整性问题。 所谓完整性是指数据在其生命周期中的准确性和一致性。这些数据可能存储在EEPROM/FLASH里,或者基于通信协议进行传输,它们有可能因为外界干扰或者程序错误,甚至系统入侵而导致被破坏。如果这些数据在使用前不做校验,产品功能可能失效。在一些特定领域,严重时可能会危及用户财产甚至生命安全。 本文就来聊聊使用较为广泛的循环冗余校验技术,以及在STM32中的一些具体使用体会。 所谓循环冗余校验(CRC:Cyclic Redundancy Check)是一种错误检测算法,通常在通信协议中或存储设备中用于检测原始数据的意外变动。可以简单理解成对有用数据按照一定
[单片机]
图说CRC原理应用及<font color='red'>STM32</font>硬件CRC外设
STM32 DMA理解
通道配置过程 1、 在DMA_CPARx寄存器总设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是传输的源或目标 2、 在DMA_CMARx寄存器中设置数据存取器的地址,发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址 3、 在DMA_CMARx寄存器中设置要传输的数据量,在每个数据传输后,这个数值递减。 4、 在DMA_CCRx寄存器的PL位中设置通道的优先级 5、 在DMA_CCRx寄存器中设置数据传输方向、循环模式、外设和寄存器的增量模式、外设和存储器的数据宽度、传输一半产生中断或传输完成产生中断 6、 设置DMA_CCRx寄存器的ENABLE位,启动该通道 一旦启动了DMA通道,它即可
[单片机]
C语言在STM32中的内存分配
01前言 不说废话,先上示例代码 uint8_t num_byte ; uint32_t num_word; const uint32_t num_word_const = 0x1234; uint32_t *point_heap; int main(void) { uint8_t num_byte_stack; static uint8_t num_byte_static; point_heap = (uint32_t *)malloc(4); *point_heap = 0x3421; free(point_heap); num_byte_stack = 0x11; #pragma secti
[单片机]
C语言在<font color='red'>STM32</font>中的内存分配
stm32处理器调试模式下运行正常,上电自启动后运行不正常
最近负责一个项目,用到stm32f4的一款高性能芯片。研发过程中遇到一个很诡异的现象,前前后后折腾了两三天,最后才搞定。由于是新手,经验不足,排故过程很纠结~~ 现象如下: 1.采用JLINK下载程序后,断电让其上电重新启动,发现有时可以正常运行,有时候无法正常运行,大约每两、三次就有一次无法正常上电启动。 2.通过JLINK调试程序,每次均正常运行。太诡异了! 发现问题后开始定位原因。首先考虑是BOOT启动出问题了,stm32f4启动方式分三种:User FLash、SystemFlash和EmbeddedSRAM,通过BOOT0和BOOT1管脚配置。程序正常运行时从User FLash启动,如果BOOT0和BOOT1配置不正确
[单片机]
STM32学习笔记(一)GPIO
GPIO的使用: 一共四组IO口16*3+3:ABCD 库函数 necessity: 1.RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE)使能时钟 2.系统初始化(GPIO_Init) IN: GPIO_InitStruct:模式,引脚,GPIO的最大输出速率, GPIOA(用于参照指示寄存器地址的指针) OUT: CRH/CRL GPIO_InitTypeDef *GPIO_InitStruct; GPIO_InitStruct- GPIO_Mode= GPIO_Mode_Out_PP; GPIO_InitStruct- GPIO_Pin=GPIO_Pin_15
[单片机]
STM32通过DMA采集多通道AD
环境: 主机:XP 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 通过脚PA1,PA2采集AD。每路AD采集10次。 参考链接:http://hi.baidu.com/kangxuebin/item/f4f4370f9d7f3c123a53ee30 源代码: #include ad_driver.h //全局变量 //AD采样存放空间 __IO uint16_t ADCConvertedValue ; //函数 //初始化AD void init_ad(void) { ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeD
[单片机]
基于STM32的FreeRTOS开发(1)----FreeRTOS简介
为什么使用freertos FreeRTOS 是一个免费和开源的实时操作系统,它主要用于嵌入式系统。它非常轻量级,可以在很小的硬件资源上运行,因此非常适合在限制硬件资源的嵌入式系统中使用。 FreeRTOS提供了一组简单的任务管理功能,可以让您在嵌入式系统中实现多任务环境,这对于涉及多个独立功能的系统是非常重要的。它还提供了一些高级功能,如事件组、信号量、邮箱等,可用于实现任务之间的同步和通信。 FreeRTOS还提供了许多可移植性,可以在各种不同的硬件平台上运行,并且有大量的文档和示例代码可以帮助您快速上手。 总之,FreeRTOS是一个非常受欢迎的嵌入式实时操作系统,因为它简单易用,资源占用小,功能丰富,可移植性好,对于嵌入式
[单片机]
基于<font color='red'>STM32</font>的FreeRTOS开发(1)----FreeRTOS简介
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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