STM3210XXX内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)。也可以作为闪存存放数据。
主存储块:小容量产品 4K×64位
中容量产品 16K×64位
大容量产品 64K×64位
信息块: 258×64位
闪存模块组织织:
中容量(每页1K)和大容量(每页2K)的参照数据手册。
闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个闪存模块都有一个特定的启始地址。
此次测试目的在于利用闪存存储器存放数据,并不是实现程序烧录功能,所以,只关注存储器的读写,保护功能留待日后再研究。
下面的例子是从0x08008204的地址中读取数据dat,把数据通过串口发送到终端查看,然后修改该地址的数据,再送到终端查看,对照前后两次的数据是否与预期值相符。先看例子:
uint32_t addr = 0x08008204; // 地址
uint32_t dat;
FLASH_Unlock(); // 解除闪存锁
dat = *(uint32_t *)addr; // 读指定地址的数据
send_data(dat); // 把数据送到串口
dat+=0x10;
FLASH_ErasePage(0x08008000); // 擦除页,输入页起始地址
FLASH_ProgramWord(addr,dat); // 对指定地址写数据
dat = *(uint32_t *)addr;
FLASH_EnableWriteProtection(FLASH_WRProt_Pages32to35); // 对页32写保护,有这一句下次就写不入了
FLASH_Lock(); // 锁住闪存
send_data(dat); // 前后数据对照
分析:
本例子基于64K的中容量产品,每页是1K字节,0x08008204属于第32页。关于FLASH_ErasePage函数的输入值,只要是第32页内的地址都可以。
要注意的是,闪存在写数据前必须先进行擦除,而且只能页擦除,不能单字节擦除。至于为什么,查看闪存的内部结构,这里不多说。
关键字:STM32 Flash
引用地址:
STM32的FLASH简单应用
推荐阅读最新更新时间:2024-03-16 15:07
使用STM32定时器PWM功能时的小问题
有人使用STM32定时器的PWM功能,遇到点小疑问,这里一起看看。 他先将STM32某定时器计数周期设为0xff,单向递增计数模式,OC比较值设为0x7F。在某时刻将新的计数周期0x7F与比较值0x3F加载到影子寄存器。当正在进行的一个周期结束后,经示波器测量确实可以看到其下一个周期发生变化,但其周期明显与预设值对应不上!再次经过一个周期,定时器才会按照预设值稳定输出。 以上是咨询者不算很清晰的描述【其实咨询TIMER问题最好配上时序图】,但可以了解到他要做的事情就是在ARR=0xff,ccr=0x7F的PWM输出状态下,于某时刻赋予ARR和CCR新值以改变输出波形。 事情不算复杂,疑点就是为什么需要2个周期延时后才能有基
[单片机]
Arm®v7-M 架构的 STM32 如何启用 DWT进行计数
01 前言 客户在使用 STM32H7 的时候,想要使用 DWT 计数来测量代码执行时间,评估执行效率。客户发现在重新上电或 reset 后,无法启用 DWT 进行计数。 02 调研 在 ARMv7-M 架构中有个 DEMCR 寄存器,这个寄存器可以控制 DWT 的使能。在power-on reset 后这个寄存器所有位的值都为 0。而当 bit 为 0 时,DWT 和 ITM 模块都是 disabled 的。所以为了启用 DWT 模块,必须将 DEMCR 的 bit 置为 1。如图 1 所示: 图1.DEMCR 寄存器 03 启用 DWT 进行计数 STM32H7 基于 Arm Cortex-M7 内核
[单片机]
STM32 AD交替触发模式程序
简介:今天配置了STM32 AD的交替触发模式,采样基本做到1us一个样本了。通道10 1.5周期,使用交替模式,采样时间小于7.5 ADCclock 。 void Adc_Init(u16 period) { GPIO_InitTypeDef GPIO_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStru
[单片机]
STM32固件库详解
1.1 基于标准外设库的软件开发 1.1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对
[单片机]
STM32标准外设库SPL转换成Cube LL
今天分享几点内容: 1.介绍ST推出的三种库; 2.直接操作寄存器及三种ST库的代码性能对比; 3.STM32CubeMX直接生成Cube LL库函数的方法; 4.STM32标准外设库SPL转换成Cube LL的方法; 1介绍ST推出的三种库 1.标准外设库:Standard Peripheral Libraries,简写SPL. 2.Cube硬件抽象层库:STM32Cube Hardware Abstraction Layer,简写Cube HAL. 3.Cube底层库:STM32Cube Low-Layer,简写Cube LL. 开发STM32常见的除了直接读写(操作)寄存器之外,就是使用ST推
[单片机]
Flash外部配置器件在SOPC中的应用
1 Flash在SOPC中的作用 Flash在SOPC中的作用主要表现在两方面:一方面,可用Flash来保存FPGA的配置文件,从而可以省去EPCS芯片或解决EPCS芯片容量不够的问题。当系统上电后,从Flash中读取配置文件,对FPGA进行配置。另一方面,可用Flash来保存用户程序。对于较为复杂的SOPC系统,用户程序一般较大,用EPCS来存储是不现实的。系统完成配置后,将Flash中的用户程序转移到外接RAM或片内配置生成的RAM中,然后系统开始运行。 2 Flash编程的实现 本文以某项目的具体电路为例,阐述在SOPC系统中如何利用Flash来保存用户程序。FPGA为Altera公司的Cycl
[嵌入式]
让菜鸟秒变stm32高手的STM32CubeMX
菜鸟到高手,显得有些霸气哈,不过的确如此,官方带给我们一个比较实用的stm32的工具。这个工具就是STM32CubeMX,昨天玩freeRTOS的时候就提到过。说到freeRTOS,这里就多说两句。全局变量,在任务间相互访问的时候也是需要临界保护的,不然可能会出现奇怪的问题。不过我们可以关掉时间片调度,任务间可以访问全局变量而不用加保护(不等于菜鸟可以随意代码)。关闭了时间片调度,只有发生vTaskDelay的时候才会上下文切换。只要代码合理访问全局变量可以不加保护的。因此代码也不是可以任意书写的,关于freeRTOS的问题,多看看源码,一切都会有答案。源码较少,这里就不过多介绍。关闭时间片不是网上说的configUSE_TIME
[单片机]
MSP430内部flash操作程序
////////////////////////////////////////////// //功能:FLASH操作-BYTE数据写入 // //参数:char *Data_ptr,char byte // //返回:无 // //日期:2003.11.6 // ////////////////////////////////////////////// void Flash_wb(char *Data_ptr,char byte) { FCTL3=0x0A500; // Lock=0 FCTL1=0x0A540; // WRT=1 *Data_ptr=byte; } /////////////////////////////
[单片机]