打印
[应用相关]

STM32内嵌FLASH与板载FLASH

[复制链接]
2365|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fhguo1990|  楼主 | 2015-4-24 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一个弱智的问题?
目前通过串口或者JLINK下载的Hex是到STM32内嵌的Flash,还是板载的2M大小的Flash?
沙发
fhguo1990|  楼主 | 2015-4-24 21:48 | 只看该作者
我猜应该是STM32内嵌的falsh吧,我看电路图串口的RXD与TXD是直接与STM32相连的。这样理解对吗?

使用特权

评论回复
板凳
我思故我在12345| | 2015-4-24 21:48 | 只看该作者
内嵌的falsh

使用特权

评论回复
地板
fhguo1990|  楼主 | 2015-4-24 21:48 | 只看该作者
内嵌的FLASH的数据能通过什么方式读出来吗?

我手头有一款读Flash的叫DediProgrammer SF100的工具,不知道能不能读?

使用特权

评论回复
5
我思故我在12345| | 2015-4-24 21:49 | 只看该作者
fhguo1990 发表于 2015-4-24 21:48
内嵌的FLASH的数据能通过什么方式读出来吗?

我手头有一款读Flash的叫DediProgrammer SF100的工具,不知 ...

自己写程序才可以读出来.
  
你手上那个工具,估计不能读吧.

使用特权

评论回复
6
fhguo1990|  楼主 | 2015-4-24 21:49 | 只看该作者
我思故我在12345 发表于 2015-4-24 21:49
自己写程序才可以读出来.
  
你手上那个工具,估计不能读吧.

自己写程序才可以读出来.  
****
有这样的例子吗?请指教
JLINK有没有可能?

使用特权

评论回复
7
我思故我在12345| | 2015-4-24 21:50 | 只看该作者
fhguo1990 发表于 2015-4-24 21:49
自己写程序才可以读出来.  
****
有这样的例子吗?请指教

如果仅仅读flash内容的话,很简单的.
usmart v2.6中就支持读指定地址的内部flash.
代码如下:

//读取指定地址的值          
u32 read_addr(u32 addr)
{
return *(u32*)addr;//       
}

使用特权

评论回复
8
fhguo1990|  楼主 | 2015-4-24 21:51 | 只看该作者
我思故我在12345 发表于 2015-4-24 21:50
如果仅仅读flash内容的话,很简单的.
usmart v2.6中就支持读指定地址的内部flash.
代码如下:

很抱歉我在光盘和网络上都只找到了usmart v2.2,没能找到v2.6.

另外,我对usmart v2.2的理解是设备端实现很多函数,能通过串口在Host端调用。
我的理解是如果在设备端实现
u32 read_addr(u32 addr)  
{  
return *(u32*)addr;//  
}
这个函数应该读取的是SRAM的内容吧?

我是想要把内嵌Flash的内容读出来,譬如说我通过串口下载了一个10K大小的Hex到STM32的内嵌Flash,我想要从Host端把这个10K的Hex读回来。
谢谢!

使用特权

评论回复
9
我思故我在12345| | 2015-4-24 21:51 | 只看该作者
fhguo1990 发表于 2015-4-24 21:51
很抱歉我在光盘和网络上都只找到了usmart v2.2,没能找到v2.6.

另外,我对usmart v2.2的理解是设备端实 ...

这个不一定是sram的,flash的也可以!!
你自己可以测试一下。我试过了的。

使用特权

评论回复
10
fhguo1990|  楼主 | 2015-4-24 21:52 | 只看该作者
我思故我在12345 发表于 2015-4-24 21:51
这个不一定是sram的,flash的也可以!!
你自己可以测试一下。我试过了的。 ...

那Flash内容的起始地址是多少?

使用特权

评论回复
11
我思故我在12345| | 2015-4-24 21:53 | 只看该作者
fhguo1990 发表于 2015-4-24 21:52
那Flash内容的起始地址是多少?

0X08000000!!!!
mcuisp不是每次都提示你,从0X08000000开始启动么?

使用特权

评论回复
12
fhguo1990|  楼主 | 2015-4-24 21:53 | 只看该作者
我思故我在12345 发表于 2015-4-24 21:53
0X08000000!!!!
mcuisp不是每次都提示你,从0X08000000开始启动么?

我试了下,真的可以呢~

使用特权

评论回复
13
fhguo1990|  楼主 | 2015-4-24 21:53 | 只看该作者
发现RV MDK:Flash/Config Flash Tools/Utilities/Setting/Flash Download

STM32F10x Med-density Flash: Address: 0x08000000-0x0801FFFF

知道为什么是0x08000000了

使用特权

评论回复
14
fhguo1990|  楼主 | 2015-4-24 21:54 | 只看该作者
请问下,读Flash可以通过*(u32*)addr;获得,
写Flash怎么实现呢?

使用特权

评论回复
15
我思故我在12345| | 2015-4-24 21:55 | 只看该作者
fhguo1990 发表于 2015-4-24 21:54
请问下,读Flash可以通过*(u32*)addr;获得,
写Flash怎么实现呢?

比较复杂 ,参考mdk自带例程.

使用特权

评论回复
16
fhguo1990|  楼主 | 2015-4-24 21:55 | 只看该作者
我思故我在12345 发表于 2015-4-24 21:55
比较复杂 ,参考mdk自带例程.

FLASH_OPT与FLASH_MEM的区别。

如果要写物理的,应该是FLASH_OPT对吧?

使用特权

评论回复
17
我思故我在12345| | 2015-4-24 21:57 | 只看该作者
fhguo1990 发表于 2015-4-24 21:55
FLASH_OPT与FLASH_MEM的区别。

如果要写物理的,应该是FLASH_OPT对吧?

这个我也不太清楚.

使用特权

评论回复
18
fhguo1990|  楼主 | 2015-4-24 21:57 | 只看该作者
两天看了下MDK有关读写内部Flash的例子:\Keil\ARM\Flash\STM32F10x
尝试着写个Sample编译,结果失败。
发现这个工程跟你所有的例子有个不同地方,在 "Setting/Linker/Scatter File"的地方指定是“Target.lin”。
所有导致编译不起来。
本人对Scatter File和编译过程不太了解,看了两天还没搞定,请帮忙看一下。

使用特权

评论回复
19
我思故我在12345| | 2015-4-24 21:57 | 只看该作者
fhguo1990 发表于 2015-4-24 21:57
两天看了下MDK有关读写内部Flash的例子:\Keil\ARM\Flash\STM32F10x
尝试着写个Sample编译,结果失败。
...

和这个无关.

使用特权

评论回复
20
fhguo1990|  楼主 | 2015-4-24 21:58 | 只看该作者
我把你例子里生成的TEST.sct替代了Sample里的target.lin,这样程序能编译成功并仿真起来。
我这个程序尝试着读写Flash,结果发现我只能读到Flash里面存有Hex数据的地方。其他地方取地址读到的都是0,但是事实上我通过ISP软件通过串口在PC端读到的Flash里面除了Hex数据外,其他地方的值应该是0xFF.  
原本我的理解是Flash地址空间:(0x08000000-0x0801FFFF )我都可以访问,这样我可以把一些断电后需要保存的数据存到Flash 除去Hex外的地方。
结果现在看起来,我的读是不成功的,那下一步想要写更是不成功了。
请问是什么原因呢?

我看Sample里的Code似乎有UnLock Flash?
int Init (unsigned long adr, unsigned long clk, unsigned long fnc) {

  // Zero Wait State
  FLASH->ACR  = 0x00000000;

  // Unlock Flash     
  FLASH->KEYR = FLASH_KEY1;
  FLASH->KEYR = FLASH_KEY2;

  // Unlock Option Bytes
  FLASH->OPTKEYR = FLASH_KEY1;
  FLASH->OPTKEYR = FLASH_KEY2;

  // Test if IWDG is running (IWDG in HW mode)
  if ((FLASH->OBR & 0x04) == 0x00) {
    // Set IWDG time out to ~32.768 second
    IWDG->KR  = 0x5555; // Enable write access to IWDG_PR and IWDG_RLR      
    IWDG->PR  = 0x06;   // Set prescaler to 256   
    IWDG->RLR = 4095;   // Set reload value to 4095
  }

  return (0);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

254

帖子

2

粉丝