STM32F4xx - 用C写入存储器

时间:2013-04-07 20:51:44

标签: c memory keil peripherals

我在ARM STM32F407VG上写入内存时遇到问题。我正在使用Keil对其进行编程并使用它来进行嵌入式系统类。我们刚从ASSEMBLY转到C,我仍然熟悉CMSIS。

赋值本身很简单:生成5000个随机数并将它们放入数组中。然后测试此数组的素数并将它们放在数组中。任务本身并不算太差,但我遇到了外围设备的问题。具体来说,虽然我在编译期间没有遇到任何RNG问题,但我在写入内存方面遇到了很多问题。

在ASSEMBLY中,我们能够直接写入内存,我们在C中编写ARM的简介中的幻灯片看起来类似。它已经声明了一个指向你初始化为FLASH(0x20000000)开头的地址的指针。然后你只是为该地址分配了一个号码并将其存储起来。在实践中,这没有用,所以我怀疑我需要配置闪存外设。后者有大量的命令我们没有覆盖,当我尝试最基本的时候,我不断收到大量的错误。

我的问题是:我是否需要配置闪存外设或者我可以通过声明指针并写入来写入内存吗?如果没有,我的FLASH外设命令在下面的代码中出了什么问题,在哪里可以找到如何配置它的示例? FLASH上的帮助文件非常庞大,我不知道什么是必要的,什么不是。

#include "stm32f4_discovery.h"
#include <stm32f4xx.h>

//#define   StoreAddress    (uint32_t*) 0x20000000;

int main(){     
    uint32_t        RandomNumber;
    uint32_t        StoreAddress;

    RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
    RNG_Cmd(ENABLE);
    RNG_GetFlagStatus(RNG_FLAG_DRDY);

    StoreAddress = 0x200000F0;
    RandomNumber = RNG_GetRandomNumber();

    FLASH_Unlock();
    FLASH_Status FLASH_ProgramWord(uint32_t StoreAddress, uint32_t RandomNumber);
    FLASH_Lock();
}       

非常感谢任何帮助。

谢谢, Yusif

0 个答案:

没有答案