STM32存储器 — STM32实现IAP

发布者:翅膀小鹰最新更新时间:2015-09-01 来源: 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程序设计

 [page]

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  存储器  IAP 引用地址:STM32存储器 — STM32实现IAP

上一篇:对于STM32别名区的理解
下一篇:STM32存储器 — <2>STM32存储器知识的相关应用

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

利用直接时钟控制技术实现存储器接口数据采集
提要   本应用指南介绍了在 VirtexTM-4 器件中实现存储器接口的直接时钟控制数据采集技术。直接时钟控制方案利用了 Virtex-4 系列所独有的某些架构特性(例如,每个 I/O 模块 (IOB) 中均具备一个 64-tap 的绝对延迟线)。 简介   大多数存储器接口都是源同步接口,从外部存储器器件传出的数据和时钟/ 选通脉冲是边沿对齐的。在 Virtex-4 器件采集这一数据,需要延迟时钟/ 选通脉冲或数据。利用直接时钟控制技术,数据经延迟,并与内部 FPGA 时钟实现中心对齐。在这个方案中,内部 FPGA时钟采集传出的数据。存储器传出的时钟/ 选通脉冲用于决定与数据位相关的延迟值。因此,与选通脉冲相关的数
[嵌入式]
STM32——高级定时器、通用定时器、基本定时器 的区别
TIM1和TIM8定时器的功能包括【增强型】: ● 16位向上、向下、向上/下自动装载计数器 ● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值 ● 多达4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出 ● 死区时间可编程的互补输出 ● 使用外部信号控制定时器和定时器互联的同步电路 ● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器 ● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态 ● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发
[单片机]
STM32库函数SystemInit()的理解
SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()这个函数从来没有关心过,只知道这是进行 STM32 系统初始化的一个函数。今天决定仔细看看,重新开始STM32的学习。这个函数在system_stm32f10x.c中,此C文件主要就是干具体硬件配置相关的工作。 void SystemInit (void) { RCC- CR |= (uint32_t)0x00000001; #ifndef STM32F10X_CL RCC- CFGR &= (uint32_t)0xF8FF0000; #else R
[单片机]
STM32_入门程序LED
*********************************************************************************************************************************************************** 开发板 :奋斗STM32 cpu :STM32F103 开发环境:keil uVsion4 ********************************************************************************************************
[单片机]
STM32_入门程序LED
stm32 SPI 读取和写入的问题
stm32 SPI的读取和写入和USART 一样需要判断标志位 unsigned char SPI1_ReadWrite(unsigned char writedat) { /* Loop while DR register in not emplty */ while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET); /* Send byte through the SPI1 peripheral */ SPI_I2S_SendData(SPI1, writedat); /* Wait to receive a byte */ while(SP
[单片机]
STM32 TIM定时器 库函数学习笔记
一些库函数的用法手册上讲得不甚详细,网上也几乎没有资料,把我个人理解的一些东西和大家分享一下,如有错漏请批评指正。 TIM_DeInit(TIM2); //注意:按缺省值复位后,时钟源为内部时钟,不必再调用函数设置。如需要更改定时器计时的时钟源, //调用后面的那几个相关函数就行。定时器的时钟不是直接来自APB1/2,而是来自于输入为APB1/2的一个倍频器。 //当APB1/2的预分频系数为1时,定时器的时钟频率等于APB1/2的频率; //当APB1/2的预分频系数为其它数值时,定时器的时钟频率等于APB1/2的频率两倍。 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructur
[单片机]
STM32获取当前系统时钟
代码如下: RCC_ClocksTypeDef get_rcc_clock; //获取系统时钟状态 RCC_GetClocksFreq(&get_rcc_clock); //仿真的时候就可以在结构体get_rcc_clock中看见各个外设的时钟了 注意: 上述代码中的结构体RCC_ClocksTypeDef原型,可以在库文件stm32f10x_rcc.h中找到,如下: typedef struct { uint32_t SYSCLK_Frequency; /*! returns SYSCLK clock frequency expressed in Hz */ uint32_t HCLK_Frequen
[单片机]
基于DSl210的微处理器存储系统电源监控
   0 引言   在现代电子系统之中,特别是对于一些逻辑芯片或者微处理器来说,如果工作电源所提供的电压超过了正常的电源电压范围,就可能会发生逻辑混乱、信号干扰等一些意想不到的问题,微处理器系统对电源的要求也就比较高。而对于计算机系统中的存储器单元,如果电源的不稳定度超出了一定的偏差范围,也会对存储器的工作造成很大的影响,从而引发读写数据的错误。因此,为了保证数据存储的正确、可靠、以及系统的正常工作,就需要对基于微处理器的存储系统电源进行监控。DSl210电源监视电路就是一款可对计算机中的微处理器和存储器进行电源监控的理想器件。为此,本文对非易失性控制器芯片DSl210的主要性能进行了介绍,并给出了利用DSl2lO芯片设计微处理
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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