在我的另一篇笔记《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供给一个快速的、有用的规划迭代,并消除不必要的包装处理或设备套接。
这儿对%&&&&&%P不做过多的论说。
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位独立操作:
而现在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位进行操作;