6423|11

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有关STM32F10xxx闪存编程的一个疑问 [复制链接]

在文档
http://www.stmicroelectronics.com.cn/stonline/mcu/images/STM32F10xxx_Flash_Programming_Manual_Rev4.pdf
第6页,有这样的叙述:
“在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。
进行闪存编程操作时(写或擦除),必须打开内部的RC振荡器(HSI)。
闪存存储器可以用ICP或IAP方式编程。”


抛开错别字“既”不讨论。

上面提到的“不能进行代码或数据的读取操作”是否包括片上代码的运行(毫无疑问需要先取代码后解码并执行)?
此帖出自stm32/stm8论坛

最新回复

                                 英文中这里用的是Halt the bus,我把它译成了“锁住总线”,基本就是圈圈说的意思。   详情 回复 发表于 2009-1-21 16:55
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

最主要考虑的是片上程序对芯片进行擦除及编程操作的情况

                                 如更新固件。
此帖出自stm32/stm8论坛
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

没问题的,代码执行应该会自动停下,等写完成后继续往下

                                  
此帖出自stm32/stm8论坛
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 

代码可以照常运行,只要不从Flash中取指

如果要从Flash中读取代码,程序的运行才会被停止。

如果不从Flash中取指,指令可以从内部SRAM或外部存储器得到。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 

也就是说

对Flash进行写操作的代码必须运行在内部SRAM或外部存储器中是吗?

但是,我粗粗浏览了AN2557 "STM32F10xxx in-application programming using the USART (IAP)"例子代码,暂时没有找到把Flash操作代码链接定位到SRAM的特殊设置,是我理解有误还是漏掉了什么细节?
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 

对Flash进行写操作的代码不必运行在内部SRAM或外部存储器中

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 

你让它开始写,你的FLASH中运行的程序就自动挂起了嘛...

                                 所以没关系的,就是慢了点。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 

在Flash中运行程序对Flash进行烧写,不会对烧写速度产生影响

一般而言,烧写Flash有系列3个步骤:
1)取2个字节
2)写入要烧写的地址
3)等待烧写成功

重复执行上述3个步骤,即可完成整块Flash区的写入。

在第3)步“等待烧写成功”,即使程序不是在Flash中运行,它也不会做其它事情;如果程序在Flash中运行,因为圈圈说的自动挂起,这个循环等待的次数也许只有1~2次而已。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 

难道还有流水线?

比如说我启动了Flash擦除操作,然后循环检查BSY标志等待擦除完成。

/*******************************************************************************
* Function Name  : FLASH_WaitForLastOperation
* Description    : Waits for a Flash operation to complete or a TIMEOUT to occur.
* Input          : - Timeout: FLASH progamming Timeout
* Output         : None
* Return         : FLASH Status: The returned value can be: FLASH_BUSY, 
*                  FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or 
*                  FLASH_TIMEOUT.
*******************************************************************************/
FLASH_Status FLASH_WaitForLastOperation(u32 Timeout)

  FLASH_Status status = FLASH_COMPLETE;
   
  /* Check for the Flash Status */
  status = FLASH_GetStatus();

  /* Wait for a Flash operation to complete or a TIMEOUT to occur */
  while((status == FLASH_BUSY) && (Timeout != 0x00))
  {
    delay();
    status = FLASH_GetStatus();
    Timeout--;
  }

  if(Timeout == 0x00 )
  {
    status = FLASH_TIMEOUT;
  }

  /* Return the operation status */
  return status;
}

我想,这个函数在流水线中装不下吧,那还是要取指令啊,也就是访问Flash了。

回复得慢了,两位已经回复。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 

自动挂起是什么机理

                                 我还以为会取指异常呐。
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 

数据手册中的锁住了总线,就是CPU自动挂起的意思吧...

就是说CPU访问总线时忙……所以它就挂起了,一直在那取指。

我所说的慢点,意思是程序运行慢了下来,而不是说编程慢了。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 

圈圈的理解正确

                                 英文中这里用的是Halt the bus,我把它译成了“锁住总线”,基本就是圈圈说的意思。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表