发新帖我要提问
12
返回列表
打印
[应用相关]

STM32内嵌FLASH与板载FLASH

[复制链接]
楼主: fhguo1990
手机看帖
扫描二维码
随时随地手机跟帖
21
fhguo1990 发表于 2015-4-24 21:58
我把你例子里生成的TEST.sct替代了Sample里的target.lin,这样程序能编译成功并仿真起来。
我这个程序尝试 ...

这么有意思...呵呵.

使用特权

评论回复
22
fhguo1990|  楼主 | 2015-4-24 21:59 | 只看该作者
这还有意思啊 呵呵  
我都折腾很久了,就是希望用FLASH存点数据。

现在还只能读到FALSH里Hex的数据,写的功能完全没实现。说明我用的\Keil\ARM\Flash\STM32F10x 一点作用都没起到啊。

使用特权

评论回复
23
我思故我在12345| | 2015-4-24 22:00 | 只看该作者
提示: 该帖被管理员或版主屏蔽
24
fhguo1990|  楼主 | 2015-4-24 22:00 | 只看该作者
状况N多啊,我都不好意思说了

使用特权

评论回复
25
fhguo1990|  楼主 | 2015-4-24 22:00 | 只看该作者
如果在main的最开始的时候去操作,是可以读写的。
但是一旦Stm32_Clock_Init(), 或者delay_init()之后,就不行了 呵呵
有时候执行到下面的时候就hold住了,真是奇怪啊
// Unlock Flash     
  FLASH->KEYR = FLASH_KEY1;
  FLASH->KEYR = FLASH_KEY2;

使用特权

评论回复
26
fhguo1990|  楼主 | 2015-4-24 22:01 | 只看该作者
我这个程序尝试着读写Flash,结果发现我只能读到Flash里面存有Hex数据的地方。其他地方取地址读到的都是0,但是事实上我通过ISP软件通过串口在PC端读到的Flash里面除了Hex数据外,其他地方的值应该是0xFF.   
******

解决这个问题方法是:将开发环境“Flash Download/Download Function”里面"Erase Sectors"改成"Erase Full Chip",这样就成访问Flash 0x08000000-0x0801FFFF 所有空间了。

使用特权

评论回复
27
fhguo1990|  楼主 | 2015-4-24 22:01 | 只看该作者
刚刚继续在实验\Keil\ARM\Flash\STM32F10x 的代码,结果可能不小心把那个寄存器配错了,结果搞的仿真都没法下载Hex了,提示“无效的Flash,请断电再试”。幸好我通过USB PC2303转串口将Flash全部擦了一遍,Flash又工作了。
呵呵,寄存器的东西不敢再搞了。
发现MDK里还有库函数的版本,使用stm32f10x_flash.c的接口,成功实现读写Flash。
这是我第一次写例子尝试使用STM32。
把这些坎坷历程写出来,分享给大家

使用特权

评论回复
28
fhguo1990|  楼主 | 2015-4-24 22:02 | 只看该作者
我想问一下
为何在EXAMPLE里面
PAGE SIZE 定义为 uint16_t 0*400 ?

使用特权

评论回复
29
fhguo1990|  楼主 | 2015-4-24 22:02 | 只看该作者
#define  StartAddress  ((uint32_t)0x801D800)
  #define  EndAddress  ((uint32_t)0X801E000)
  #define PageSize  ((uint16_t)0x400)
  uint16_t Counter =0x00;
  uint32_t NumberOfPage = 0x00;
  uint32_t Page =0x00;
  FLASH_Unlock();
  NumberOfPage = ((EndAddress - StartAddress)/PageSize);
  for (Counter = 0;Counter<NumberOfPage;Counter++)
    {
        FLASH_ErasePage(StartAddress + Page);
        Page += 400;
        Counter ++ ;
    }

可是我ERASE不到?
为什么?>

使用特权

评论回复
30
我思故我在12345| | 2015-4-24 22:03 | 只看该作者
fhguo1990 发表于 2015-4-24 22:02
#define  StartAddress  ((uint32_t)0x801D800)
  #define  EndAddress  ((uint32_t)0X801E000)
  #defin ...

我也不知道为什么哦。

使用特权

评论回复
31
fhguo1990|  楼主 | 2015-4-24 22:04 | 只看该作者
我思故我在12345 发表于 2015-4-24 22:03
我也不知道为什么哦。

可是这个方法是对的吧?

使用特权

评论回复
32
我思故我在12345| | 2015-4-24 22:04 | 只看该作者
fhguo1990 发表于 2015-4-24 22:04
可是这个方法是对的吧?

MDK自带的例子一般是没问题的了。

使用特权

评论回复
33
598330983| | 2015-4-25 00:04 | 只看该作者
提示: 该帖被管理员或版主屏蔽
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则