小编Ale*_* M.的帖子

如何在STM32F4,Cortex M4上写入/读取FLASH

我想写一个变量,例如一个数字为5的整数到FLASH,然后在电源消失后再次打开设备读取它.

我已经知道为了写东西我首先需要擦除页面然后写.

在手册中它说:

  1. 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY1 = 0x0819 2A3B
  2. 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY2 = 0x4C5D 6E7F

我该如何执行此任务?

扇区0的块地址从0x0800 0000到0x0800 3FFF,这是我想写的地方.

这里是手册的链接,第71页:STM32手册

c flash-memory mbed stm32f4

8
推荐指数
1
解决办法
2万
查看次数

如何在 STm32 核板 (mbed) 上写入 SRAM

我想在芯片上的 SRAM 中存储一个简单的整数。(Cortex M4) 我用的程序是mbed online。我知道 SRAM 的地址从 0x2000 0000 开始,并且芯片有 4KB 的内存。

我已经阅读了数据表和位带部分,但这对我来说没有意义。

有人可以向我解释我如何在SRAM中存储例如数字5并再次读取它吗?

当前代码是这样的(c是一个整数,用户通过按钮改变):
if(c==100){ temp=c; MBX_B0 = 1; // Word write temp = MBX_B7; // Word read
TIMER_B0 = temp; // Byte write return TIMER_B7; // Byte read } pc.printf("%d",temp);

它只是在 c==100 后停止运行 即使在断电后也应该保存该值。

c stm32 mbed

0
推荐指数
1
解决办法
6789
查看次数

HAL驱动程序在STM32F4核上擦除/读取/写入闪存

uint32_t PAGEError = 0;
FLASH_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.TypeErase   = FLASH_TYPEERASE_SECTORS ;
EraseInitStruct.Sector   = FLASH_SECTOR_0;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;

HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08000000, counter)
HAL_FLASH_Lock();

counter2 = *(__IO uint32_t *)0x08000000;
counter3 = *(__IO uint32_t *)0x08000001;
counter4 = *(__IO uint32_t *)0x08000002;

sprintf(buf, "%d", counter2); //gets send to the OLED with I2C
sprintf(buf2, "%d", counter3);
sprintf(buf3, "%d", counter4);
Run Code Online (Sandbox Code Playgroud)

我想将变量计数器写入闪存,然后将其读取为counter2。第一个闪存扇区始于0x08000000

counter234通过OLED屏幕显示。显示counter2作品并向我显示的值counter-1,但仅能显示一次。如果我再次写闪存,似乎什么也没发生。 …

c stm32f4

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×3

mbed ×2

stm32f4 ×2

flash-memory ×1

stm32 ×1