【问题标题】:STM32F4 read memory flash per pagesSTM32F4每页读取内存闪存
【发布时间】:2019-01-28 18:27:25
【问题描述】:

如何读取每页的闪存?我无法按扇区读取它。

我必须读取 2 个内存扇区(2*16kbytes)。

我在 FreeRtos 下,我正在使用 STM32F401RE。

我使用的是指针,我只需要读取内存闪存的两个扇区。

uint32_t data_store0[4096] = {0};
uint32_t data_store1[4096] = {0};

uint32_t *words0 = (uint32_t *) BASE_ADDR_SECTOR_0;
uint32_t *words1 = (uint32_t *) BASE_ADDR_SECTOR_1;

unsigned int buffer_firmware[8192] = {0};
unsigned char firmware[32768] = {0};

int k, m, i, j = 0;
int count_time = 0;

for(int i=0; i<4096; i++)
{
    data_store0[i] += words0[i];
    buffer_firmware[i] = data_store0[i];
}

for(int j=0; j<4096; j++)
{
    data_store1[j] += words1[j];
}

for(m = 0, k = 4096; k < 8192 && m < 4096; m++, k++)
{
    buffer_firmware[k] = data_store1[m];
}

SHA256Input(&ctx, (const uint8_t *) buffer_firmware, 8192);

【问题讨论】:

  • 你到底想做什么?要读取闪存,您需要做的就是取消引用一个指针。
  • 感谢您的回复#Colin,我正在使用指针,我只需要读取内存闪存的两个扇区。但我无法在 freeRTOS 中执行代码!
  • 什么是牵引扇区?

标签: memory stm32 freertos stm32f4discovery flash-memory


【解决方案1】:

首先,访问内存映射时必须使用 volatile 关键字,另外,读取两页时如果接受是 4096 字节,则必须使用 uint8_t,因为它有 4096 字节。但是,如果您想通过 uint32_t 指针访问它,那么 for 循环的最大值必须为 4096/4,因为它有 4096/4 个字。

uint8_t buffer_firmware[4096]
uint8_t *words0 = (volatile uint8_t *) BASE_ADDR_SECTOR_0;
uint8_t *words1 = (volatile uint8_t *) BASE_ADDR_SECTOR_1;

for(uint16_t i=0; i<4096; i++){
    buffer_firmware[i] = words0[i];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 2018-01-16
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多