微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32存储器知识的相关应用“>STM32存储器 — STM32存储器知识的相关应用

STM32存储器知识的相关应用“>STM32存储器 — STM32存储器知识的相关应用

时间:11-28 来源:互联网 点击:
在我的另一篇笔记《stm32的存储器》中讲述了STM32的存储器结构,及个人理解。

本篇文章将重点描述在对存储器有了比较深入了解之后的一些相关的操作案例;重点在于STM32启动设置和IAP使用,以及bit banding的理解,加上一个简单的IAP程序设计。

1 STM32的启动

根据参考手册RM0008中的图表:

得知STM32的启动有三种模式,三种模式的选择在于芯片上的两个Boot引脚,如RM0008种描述:

在系统复位之后的四个上升沿后索存BOOT引脚,从而决定启动方式;用户对BOOT引脚的设置决定了系统复位之后的启动模式。

三个不同的启动区域有着不同的起始地址,STM32这样规定:

注意的是:只有当从SRAM启动,只有一个单一的地址0x2000 0000可以访问;而其他两种启动方式除了从各自的地址访问,还可以从0x0000 0000地址访问。

不同的启动方式,决定了程序在设计过程中的方法,因此必须确认好程序存放空间和系统启动模式。

所以,通过设置BOOT0和BOOT1引脚,可以选择相应的启动模式。

2 STM32的ICP

In Circuit Programming,在电路编程。

ICP能够通过JTAG、SWD或Boot Loader去下载用户程序,以达到更新整个Flash的目的;

ICP提供一个快速的、有效的设计迭代,并消除不必要的包装处理或设备套接。

这里对ICP不做过多的论述。

3 STM32的ISP

In System Programming,在系统编程。

STM32在出厂时,已经固化了一段程序在System memory(medium-density devices的地址为:0x1FFF F000,大小为2KB)存储器中。

这段程序就是一个固定好的,并且没法修改的Boot Loader,如编程手册PM0042种描述的:

这个固定好的,出厂就有的Boot Loader可以通过USART1进行用户程序的烧写、更新;

当然,烧写软件(烧写流程)的设计需要按照其固定好的Boot Loader的烧写协议来进行。

因此在特殊的要求烧写方式的场合,使用ISP是不太方便的,可以采用更为方便的IAP编程方法,以下会详细介绍。

4 STM32的Bit Banding

Bit Banding功能是相对于以往能够进行bit操作的单片机而言的。

通过Bit Banding功能可以像51单片机的bit操作一样。MCS51可以简单的将P1口的第2位独立操作:P1.2=0;P1.2=1;就是这样把P1口的第三个脚(BIT2)置0或置1了。

而现在STM32的位段、位带别名区就为了实现这样的功能。只不过他是为需要操作的地址(1字节)的每一个位(共8位)起个别名,分别对应别名区的一个字(word)。也就是别名区的大小是Bit Band区的32倍。这样,对32MB的别名区地址的操作,就是对相应Bit Band区的位的操作。

注意:别名字的位[31:1]在bit-band位上不起作用。写入0x01与写入0xFF的效果相同。写入0x00与写入0x0E的效果相同。

如图是跟Bit Banding有关系的存储器结构:

STM32有两个Bit Band区域,分别是:

0x2000 0000——0x2010 0000:该地址是STM32的SRAM低1MB的地址区域;

0x4000 0000——0x4010 0000:该地址是STM32的Peripherals低1MB的地址区域;

另外,STM32还有两个对应的Bit Band区域的别名区,分别是:

0x2200 0000——0x23FF FFFF:共32MB的空间,对应相应1MB的每一个位;

0x4200 0000——0x43FF FFFF:共32MB的空间,对应相应1MB的每一个位;

接下来的问题是如何确定Bit Band区字节的位所对应的那个别名区的字(word)。Bit Band区和别名区是一一对应的,具体的公式为:

bit_word_addr=bit_band_base+ (byte_offset×32) + (bit_number×4);

bit_band_base:32MB别名区首地址;

byte_offset:1MB位段区偏移量,即为bit-band区中包含目标位的字节的编号;

bit_number:位段中目标位的位位置(0-7);

注意:别名字的位[31:1]在bit-band位上不起作用。写入0x01与写入0xFF的效果相同。写入0x00与写入0x0E的效果相同。

举个例子(通过别名区访问地址):

1、想操作SRAM中Bit Band区地址为0x2000 0018字节的第2位

计算别名区对应子地址:0x2200 0000 +(18*32)+(2*4) =0x2200 0248

所以,对0x2200 0248地址的操作,就是对0x2000 0018字节的第2位进行操作;

2、想操作Peripherals中Bit Band区地址为0x4000 0021字节的第7位

(可能是一个功能寄存器);

计算别名区对应子地址:0x4200 0000+(21*32)+(7*4)=0x4200 02BC

所以,对0x4200 02BC的操作,就是对0x4000 0021字节的第7位进行操作;

对比使用Bit Banding功能和直接访问Bit Band区域,如图:

5 STM32的IAP

In Application Programming,在应用编程。

5.1什么是IAP

IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top