CKS32F103微控制器教学课件3 存储器映射_第1页
CKS32F103微控制器教学课件3 存储器映射_第2页
CKS32F103微控制器教学课件3 存储器映射_第3页
CKS32F103微控制器教学课件3 存储器映射_第4页
CKS32F103微控制器教学课件3 存储器映射_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CKS32F103微控制器教学课件03存储器映射第3章存储器映射核心内容存储器分类及CKS32F103的存储器芯片内部有哪些类型的存储器?它们各自的容量和用途是什么?存储器映射存储器在芯片的地址空间中是如何分布的?CPU如何找到它们?访问SRAM的方法在程序运行过程中,如何高效地对SRAM进行读写操作,处理实时数据?访问FLASH的方法如何利用FLASH实现程序代码的固化和重要数据的掉电非易失性存储?01存储器分类存储器是用于存放程序和各种数据的电子器件,通常分为随机存储器RAM和只读存储器ROMRAM:分为静态随机存储器SRAM和动态随机存储器DRAM。SRAM通电即可保持数据,不需刷新,速度快但集成度低,常用于高速缓存。DRAM需要周期性刷新才能保持数据,集成度高,常用于内存条等大容量存储。01存储器分类RAM请上网查找一款SRAM和DRAM,给出型号和存储容量易失性存储器VolatileMemoryROM属于非易失性存储器,主要用于存储固定信息或程序。常见类型包括可编程可擦除只读存储器EPROM、电可擦除可编程只读存储器EEPROM、一次性可编程存储器OTP和快闪存储器Flash,其共同特点是擦写次数有限。01存储器分类ROMFlash主要有NORFLASH和NANDFLASH两种架构CKS32F103的存储器:SRAM+FLASHCKS32F103系列MCU内置NORFlash程序存储器和SRAM数据存储器。CKS32F103x8和xB系列的Flash分别为64K和128K字节,SRAM容量为20K字节。应用中如需更大容量,可扩展外部Flash或RAM以满足需求。SRAM标准配置容量:20KBytesFLASH标准配置容量:64KBytesCKS32F103的存储器:SRAM易失性存储器

主要用途•存储全局变量和静态变量,作为程序运行的基础数据区。

•充当堆栈(Stack),保存函数调用上下文及局部变量,支持程序流跳转

•用作数据缓冲区,如UART串口的接收与发送缓冲。关键特性•掉电易失:电源切断后存储数据即刻消失,无法长期保存。

•高速读写:支持CPU零等待周期快速访问,性能显著优于Flash/ROM。

•直接寻址:支持CPU通过指针直接对物理地址进行读写操作。SRAM:FLASH:NORFlash非易失性存储器▍主要用途•用户程序代码:CPU从Flash中取指并执行,是程序运行的载体。•常量数据:程序中使用const关键字定义的数据。•关键参数:掉电后需要保存的系统配置、校准系数等。▍关键特性•掉电不丢数据:区别于SRAM最根本的特性。•操作限制:需要特定电压和流程,擦写速度相对较慢,需先擦除为全1才能写入,典型擦写寿命约10,000次。CKS32F103的存储器:FLASH请上网查找一款EPROM、EEPROM、OTP和Flash,给出型号和存储容量02存储器映射MEMORYMAPPING了解了存储器类型后,接下来学习存储器在芯片的地址空间中是如何布局的,简单来说,就是如何给每个存储资源分配一个独一无二的地址,以便CPU通过访问这些地址来操作存储器CKS32F103的内核为Cortex-M3,其地址分配需要遵循ARM的存储器分配框架。内核中,存储器是一个广义概念,不仅包括的FLASH程序存储器和SRAM数据存储器,还涵盖所有需要被内核直接访问的硬件资源,如外设寄存器和系统控制部件等Cortex-M

地址分配ARM为Cortex-M系列制定了标准的存储器分配图,规定了逻辑地址空间的范围及各功能区的划分02存储器映射-Cortex-M的地址分配和数据存储格式

02存储器映射-Cortex-M的地址分配和数据存储格式

数据存储格式Cortex-M内核配备32位数据线,数据存储器或寄存器中的数据以32位为单位存储,但由于内存中数据是按字节存放在每个地址中,所以需要指定高位或者低位数据的存放位置。大端模式:高位字节存放在低地址端,低位字节存放在高地址端;小端模式:低位字节存放在低地址端,高位字节存放在高地址端。02存储器映射-Cortex-M的地址分配和数据存储格式

低地址>高地址大端模式0x120x340x560x78小端模式0x780x560x340x12Cortex-M内核默认使用小端模式,因此CKS32F103的存储器也采用小端存储方式。注意:如SPI、USART等部分外设在与片外设备通信时,为适应外部数据格式要求,需要在软件层面进行大小端转换。若外设为大端存储模式。02存储器映射-存储器映射存储器映射:将内核的逻辑地址空间与物理存储器或外设建立对应关系的过程。存储器映射用于合理分配和访问不同类型的资源,例如Flash、SRAM,以及各种外设如GPIO、USART、定时器等。ARMCortex-M3系列MCU存储器与外设统一在4GB地址空间内顺序排列,互不冲突。存储器映射的优点:通过将外设寄存器映射到Cortex-M内核的外设区,使内核访问外设寄存器的操作与访问SRAM一样,既可简化编程,又能保证访问速度。02存储器映射-存储器重映射Cortex-M内核复位后优先访问0x00000000起始的地址空间,而实际的物理存储器如FLASH、SRAM、外部NORFlash等被分配到非零的物理地址区域。为支持从不同存储器启动,需将目标物理存储器的起始地址映射到内核复位后优先访问的0x00000000地址。存储器重映射:实现物理地址与内核默认访问地址关联的过程。02存储器映射-存储器重映射以Flash启动为例,若需从物理地址0x08000000的片上Flash启动,需通过硬件或软件配置,让内核访问0x00000000时,实际指向0x08000000的Flash空间,从而正确读取复位向量表与程序代码。存储器重映射的本质:实现物理地址与内核默认逻辑访问地址的动态关联,不改变物理存储器的实际地址。而是通过硬件电路或寄存器配置,让内核对逻辑地址如0x00000000的访问,被路由到其它目标物理地址。CKS32F103的物理地址映射03CKS32F103采用Cortex-M3内核,其地址设计既遵循Cortex-M3的预定义地址框架,又可结合自身硬件资源进行扩展与裁剪Block0:Code代码区0x00000000-0x07FFFFFF大小:128MB主要用于存放程序代码,可灵活映射到内部

Flash、系统存储器或

SRAM,是系统启动和程序运行的基础。Block1:内部SRAM0x20000000-0x20004FFF大小:20KB处理器的高速读写存储器,用于存储程序运行时的变量、堆栈和临时数据,确保系统的快速响应能力。Block3:片上外设0x40000000-0x4000FFFF大小:1MB片上外设寄存器的集中映射区,包含GPIO、UART、定时器等外设的控制与状态寄存器,实现对硬件的直接操作。Block3:核心外设0xE0000000-0xE00FFFFF大小:1MB包含Cortex-M3内核自带的

NVIC、SysTick、调试组件等关键资源,负责中断管理、系统时钟和调试支持。代码区(CodeArea)0x00000000•CPU启动后首先访问的区域,存放中断向量表和程序代码。•通过BOOT引脚配置,可映射到内部Flash、系统存储器或内部SRAM。内部SRAM区(InternalArea)0x20000000•20KB高速SRAM的起始地址,全局变量、静态变量和堆栈均位于此。•支持位带操作,能方便快捷地对寄存器中的单个比特位进行控制。外设区(PeripheralArea)0x40000000•所有片上外设(GPIO,UART,SPI,I2C等)的控制与数据寄存器均映射到该区域。•通过读写特定地址,即可直接配置外设参数并实现数据交换。CKS32F103的物理地址映射:核心区域重点关注三个核心区域。代码区是程序的入口。内部SRAM区是程序运行的舞台,所有动态数据都在SRAM区。外设区则是控制芯片外部世界的窗口,通过操作外设区的寄存器,就能控制GPIO、串口等外设。CKS32F103的物理地址映射:外设地址外设地址:指的是外设寄存器的地址。片上外设包括CRC、USART1、Flash接口等,每个外设都分配了独立的地址空间。如EXTI的地址范围0x40010400~0x400103FF,USART1的地址范围0x40003800~0x40013BFF等外设的基地址:每个外设的起始地址。如EXTI的中断屏蔽寄存器EXTI_IMR的地址为0x40010400,与EXTI的基地址相同,EXTI的其它寄存器地址是基于基地址的偏移。访问外设操作与访问存储器相同,对外设的访问也是对寄存器的读写操作。CKS32F103的物理地址映射:SRAM的别名区别名:通过多个不同地址映射到同一物理存储器或资源的技术,以满足特定的访问需求。不同的地址指向同一个物理位置,每个地址都可以看作该物理区域的别名。在CKS32F103中,SRAM别名区是将片上SRAM的地址映射到不同的地址范围,使得内核或外设可通过不同的路径访问同一片物理SRAM。优点:提供对内存的额外控制、提高访问性能,或支持特定硬件设计需求片上SRAM默认映射在0x20000000~0x3FFFFFFF范围内。SRAM的低1MB空间定义为位带区,支持位带操作,位带区对应片上SRAM的物理地址范围为0x20000000~0x200FFFFF。CKS32F103的物理地址映射:SRAM的别名区SRAM的别名区地址范围为0x22000000~0x23FFFFFF,共32MB。别名区的每个地址对应位带区中某一位的操作,从而可实现对单个位的读写,而不影响其他位。这种位带映射和别名机制使得对SRAM的位操作变得简单、高效,同时保持原子性,避免了读-改-写操作中的潜在冲突。访问SRAM让变量被编译器分配到SRAM的地址//假设变量已经被编译器分配到SRAM(如0x20000010地址)uint32_tsram_var=0;//写操作:向SRAM写入数据sram_var=0x5A5A5A5A;//读操作:从SRAM读取数据uint32_tread_val=sram_var;04理论知识了解清楚后,进入实践环节。首先,我们来看看如何访问SRAM。访问SRAM是嵌入式编程中最常见的操作,CKS32F103C8提供了多种灵活高效的方式直接指针访问

是最基础、最直接的方法,利用C语言的指针特性,直接对SRAM地址进行读写。这种方式底层高效,也常用于底层驱动开发中对硬件寄存器或特定内存区域的操作。volatile避免编译器优化volatileuint32_t*sram_ptr=(volatileuint32_t*)0x20000000;//指向SRAM起始地址的指针//写操作:向0x20000000地址写入32位数据*sram_ptr=0x12345678;//读操作:从0x20000000地址读取数据uint32_tdata=*sram_ptr;访问SRAM04访问FLASH05Flash的“先擦除后写入”特性,操作要比SRAM复杂一些,并且有严格的流程和保护机制名称功能Flash接口寄存器用来下发读/擦写指令、配置参数、查询操作结果等,是内核/程序唯一能直接操作Flash的入口。

FPEC模块只负责Flash的擦除和编程操作,接收接口寄存器的指令,内部生成高电压,按规则完成扇区擦除/字节编程。FLITF模块只负责Flash的读操作,接收内核的读请求,通过硬件通道从Flash阵列中读取数据,返回给内核或通过接口寄存器反馈读状态。访问FLASH-Flash接口相关模块05访问FLASH-Flash阵列与接口寄存器05片上Flash存储阵列:由主存储块和信息块组成。主存储块存储用户程序和常量数据,芯片启动时从主存储块加载和执行程序代码。

模块名称地址大小(字节)主存储块页00x08000000–0x080003FF1K页10x08000400–0x080007FF1K页20x08000800–0x08000BFF1K页30x08000C00–0x08000FFF1K页40x08001000–0x080013FF1K……

页1270x0801FC00–0x0801FFFF1K信息块系统存储器0x1FFFF000–0x1FFFF7FF2K选项字节0x1FFFF800–0x1FFFF80F16Flash阵列结构Flash接口寄存器:控制Flash存储阵列的读写操作,由FLITF与FPEC模块对外提供、且可由内核直接访问的硬件寄存器集合寄存器名称偏移地址读写功能访问控制寄存器:FLASH_ACR0x00R/W设置Flash访问延时、预取缓冲、加速模式等主存储区解锁密钥寄存器:FLASH_KEYR0x04W写入两组密钥以解锁FLASH_CR寄存器选项字节解锁密钥寄存器:FLASH_OPTKEYR0x08W写入两组密钥以解锁FLASH_OPTCR寄存器状态寄存器:FLASH_SR0x0CR/W反映Flash操作状态,忙BSY、编程错误PGERR、写保护错误WRPRTERR、操作完成EOP等控制寄存器:FLASH_CR0x10R/W控制Flash操作,包括页擦除PER、整片擦除MER、编程PG、选项字节编程OPTPG、锁定LOCK等地址寄存器:FLASH_AR0x14W存放要擦除的页地址(必须为页起始地址)选项字节寄存器:FLASH_OBR0x1CR读取选项字节内容,包括读保护、IWDG/SW、复位模式等,出厂时未保护状态写保护寄存器:FLASH_WRPR0x20R反映各页写保护状态,为1表示该页写保护,出厂时未保护状态访问FLASH-Flash控制模块05Flash接口FLITF:内核与Flash存储器之间的接口层,负责协调数据传输与访问时序。由于Flash的固有访问速度通常低于CPU主频,直接访问易导致数据错误。为此,FLITF通过配置等待状态,在CPU访问Flash时自动插入必要的延迟周期,如当CPU主频高于Flash最大访问频率时,需设置1~3个等待状态,确保数据读取的准确性。FLITF集成时序匹配、地址译码、数据缓冲与传输功能。根据CPU主频与Flash速度自动调节访问延迟,将CPU提供的地址转换为Flash可识别的地址信号,并在两者间进行数据缓存与交互以提升访问效率。借助这些机制,CPU能够高效、稳定地从Flash中读取指令和数据,是CPU与Flash间的桥梁访问FLASH-FPEC控制模块05FPEC:负责Flash编程与擦除操作的控制模块。FPEC采用独立的固定8kHz内部时钟,通常由LSI分频获得,与系统主频完全无关。这一设计的优势在于能确保编程和擦除时序始终保持一致,从而在系统主频变化时仍能稳定可靠地完成写操作。由于FLASH具有先擦后写的特性,其操作需严格的时序控制与保护机制,而FPEC正是负责实现这些底层时序控制与安全保护逻辑的核心模块。访问FLASH-FPEC控制模块05FPEC具有解锁与写保护、编程管理、擦除管理和状态监控功能。解锁与写保护功能旨在防止误操作,保障写入和擦除的安全性。编程管理将CPU发出的写命令转换为FLASH阵列可执行的操作序列。擦除管理执行整片或扇区擦除操作,严格遵循FLASH先擦后写的特性。状态监控指通过FLASH_SR等寄存器向内核反馈操作完成情况或错误状态。访问FLASH-读取指令和数据流程内核读取Flash指令或数据的流程与SRAM类似。发起访问请求内核通过程序计数器PC或数据访问指令生成目标地址。若该地址处于Flash映射空间,总线矩阵会将访问请求转发至Flash接口FLITF。预取缓冲区判断若请求数据已在预取缓冲区(命中),则直接返回内核,响应速度接近SRAM。若未命中,Flash接口会从Flash阵列中一次性读取8字节数据块,写入预取缓冲区后,再将所需数据返回内核。判断等待状态插入若CPU主频高于Flash的最大访问速度,数据返回过程中会自动插入等待周期,确保数据传输正确。05数据交付与处理若是取指操作,返回数据被送入Cortex-M3的指令流水线。读取数据的话,返回数据直接写入目标寄存器或内存单元,供后续指令使用。设置2等待状态,启用预取缓冲区和半周期模式的代码#defineFLASH_ACR(*(volatileuint32_t*)0x40022000)voidFlash_Config(void){//2WS+HalfCycleAccess+PrefetchBufferEnableFLASH_ACR=((0x2<<0)//LATENCY=2WS|(1<<3)//HLFCYA=1|(1<<4)//PRFTBE=1);}访问FLASH-读取指令和数据流程0501解锁(Unlock)复位后Flash处于锁定状态,防止误操作。须先解锁才能进行擦除和编程,解除硬件层面的写保护限制。02擦除(Erase)在写入新数据前,必须将目标区域擦除。擦除的最小单位是“页(Page)”,CKS32F103C8的Flash页大小为1KB,不可对更小的单位单独操作。03编程(Program)将数据写入擦除后的Flash区域。写入的最小单位通常是半字(16-bit),且只能从“1”改写为“0”,这也是写入前必须擦除的原因。04锁定(Lock)操作完成后,必须重新锁定Flash,恢复写保护机制。这一步至关重要,能有效防止因意外操作导致的数据损坏或丢失。Flash的写操作必须遵循解锁、擦除、编程、锁定四步流程。首先要解锁Flash,解除写保护。然后擦除要写入的区域,注意擦除的最小单位是页。擦除完成后,才能进行编程,也就是写入数据。最后,一定要记得重新锁定Flash,以防止意外的写入操作。访问FLASH-

写操作流程05访问FLASH-

代码示例05基于标准库的代码#include"cs32f103.h"//CKS32MCU的头文件//FLASH控制寄存器FLASH_CR的“锁定位(LOCK)”和“忙位(BSY)”的位掩码定义#defineFLASH_CR_LOCK((uint16_t)0x0080)/*!<Lock*/#defineFLASH_SR_BSY((uint8_t)0x01)/*!<Busy*/#defineFLASH_BASE_ADDRESS0x08000000//Flash起始地址#defineFLASH_KEY10x45670123//Flash解锁密钥1#defineFLASH_KEY20xCDEF89AB//Flash解锁密钥2//解锁voidFlash_Unlock(void){//程序先设置FLASH_CR_LOCK=0x80,

位掩码位与操作,检查FLASH->CR中的LOCK位状态if(FLASH->CR&FLASH_CR_LOCK){//写入解锁密钥FLASH->KEYR=FLASH_KEY1;FLASH->KEYR=FLASH_KEY2;}}//上锁voidFlash_Lock(void){FLASH->CR|=FLASH_CR_LOCK;//锁定Flash}访问FLASH-

写操作流程05代码示例:基于标准库的代码//页/扇区擦除voidFlash_Erase_Sector(uint32_tsectorAddress){//解锁FlashFlash_Unlock();//设置页/扇区擦除位FLASH->CR|=FLASH_CR_PER;//设置待擦除页/扇区的地址FLASH->AR=sectorAddress;//启动擦除FLASH->CR|=FLASH_CR_STRT;//等待擦除完成(通过检查BSY标志)while(FLASH->SR&FLASH_SR_BSY);//清除擦除位,使用位掩码按位与和或操作将某位清0,将PER位设置为0FLASH->CR&=~FLASH_CR_PER;//锁定FlashFlash_Lock();}访问FLASH-

写操作流程05代码示例:基于标准库的代码//编程voidFlash_Write_Word(uint32_taddress,uint32_tdata){//解锁FlashFlash_Unlock();//设置编程位,使用位掩码按位或操作将某位置1,将PG位设置为1FLASH->CR|=FLASH_CR_PG;////写入数据*(uint32_t*)address=data;//等待写入完成while(FLASH->SR&FLASH_SR_BSY);//检查写入是否成功if(FLASH->SR&FLASH_SR_EOP){//清除完成标志FLASH->SR|=FLASH_SR_EOP;}//禁用编程位FLASH->CR&=~FLASH_CR_PG;//锁定FlashFlash_Lock();}访问FLASH-

写操作流程05代码示例:基于标准库的代码//主程序intmain(void){uint32_tdata=0x12345678;//要写入的数据uint32_taddress=FLASH_BASE_ADDRESS+0x1000;//要写入的地址//擦除页/扇区

Flash_Erase_Sector(address);//写入数据

Flash_Write_Word(address,data);while(1){//主循环}}访问FLASH-

写操作流程05代码示例:基于标准库的代码位掩码:是一个用于操作特定位的二进制值,其中1的位置对应需要操作的目标位,0的位置对应需要保留的位。可通过按位与、或、非及异或来检查、设置、清除或翻转数据中的特定位。代码中FLASH_CR_LOCK和FLASH_SR_BSY都是位掩码,通常用于嵌入式系统中的寄存器操作和标志位管理。检查、设置和清除某位状态如上述程序中的说明。位掩码按位异或操作可翻转某位的状态,如切换PG位状态的程序如下。FLASH->CR^=FLASH_CR_PG;ST提供的HAL库已经封装了底层复杂的寄存器操作逻辑,让开发者仅需简单几步API调用,即可实现安全、规范的Flash读写控制。只需要调用HAL_FLASH_Unlock、HAL_FLASHEx_Erase、HAL_FLASH_Program和HAL_FLASH_Lock等函数,就可以安全、方便地完成Flash的读写代码示例:写入一个32位数据到指定地址HAL_StatusTypeDef

Flash_Write(uint32_taddr,uint32_tdata){

HAL_StatusTypeDefstatus;//定义返回状态变量

FLASH_EraseInitTypeDef

EraseInit;//擦除配置结构体

status=HAL_FLASH_Unlock();//1.解锁Flash

EraseInit.TypeErase=FLASH_TYPEERASE_PAGES;//2.擦除目标页

EraseInit.PageAddress=addr;EraseInit.NbPages=1;

status=HAL_FLASHEx_Erase(&EraseInit,NULL);

status=HAL_FLASH_Progra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论