热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【单片机学习笔记】深入解析STM8S系列微控制器的FLASH存储操作技术

在STM8S系列微控制器中,尽管库函数已提供块操作功能,如FLASH_ProgramBlock(),但要实现高效可靠的块操作,还需对相关配置参数进行细致调整。本文详细探讨了这些配置步骤,并结合实际案例分析了FLASH存储操作的关键技术和注意事项,旨在为开发者提供全面的技术指导。

STM8的库函数中已经提供了块操作函数FLASH_ProgramBlock(),但是要进行块操作,还必须进行一系列的配置,否则,程序代码会死在这个函数里边的。




    1. 修改stm8s_conf.h的注释,让#include "stm8s_flash.h"得以编译




    2.修改stm8s.h的注射,让使Flash功能能够从RAM中运行




#if !defined (RAM_EXECUTION)


    #define RAM_EXECUTION  (1)                                                  // 块写入时,必须打开这里的注射


#endif /* RAM_EXECUTION */





   3.修改完成后,将产生不少警告,消除的方法,暂时还没有找到,但不影响代码的运行。


附上代码:

#include "fy_flash.h"//操作flash前需要取消注释stm8s.h中154行的/* #define RAM_EXECUTION (1) *///从块的指定的第三个字节读取数据(词条序号)
u8 Flash_ReadByte_3(u8 Block)
{ u32 addr;addr = FLASH_PROG_START_PHYSICAL_ADDRESS + Block*FLASH_BLOCK_SIZE;return FLASH_ReadByte(addr+2);
}//向Flash指定的块写入内容
void Flash_WriteBlock(u8 Block , u8 *buf)
{ if(Block>FLASH_PROG_BLOCKS_NUMBER) return;FLASH_Unlock(FLASH_MEMTYPE_PROG); //解锁flashwhile (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET); //等待解锁标志位置位//块标准编程,写入前,硬件自动删除内容FLASH_ProgramBlock(Block, FLASH_MEMTYPE_PROG, FLASH_PROGRAMMODE_STANDARD,buf);//等待操作完成FLASH_WaitForLastOperation(FLASH_MEMTYPE_PROG);//操作完上锁FLASH_Lock(FLASH_MEMTYPE_PROG);
}//从Flash指定数量的块读取内容
void Flash_ReadBlock(u8 Block ,u8 *buf)
{u8 i;u32 addr;u8 sta=0;if(Block>FLASH_PROG_BLOCKS_NUMBER) return;//计算地址addr = FLASH_PROG_START_PHYSICAL_ADDRESS + Block*FLASH_BLOCK_SIZE;for(i=0;i/* if(buf[i]=='\r' && sta==0) sta=1;else if(buf[i]=='\n' && sta==1) return;else sta=0;*/}
}void Flash_Test(void)
{u8 write_buf[FLASH_BLOCK_SIZE]="MARS->This is a Flash Data Memory write and read test...\r\n";u8 read_buf[FLASH_BLOCK_SIZE];Flash_WriteBlock(120,write_buf);Flash_ReadBlock(120,read_buf);UART1_SendString(read_buf);while(1){LED_TOG;Delay_ms(350);}
}
/*********************************************END OF FILE**********************************************/




By Urien 2017年10月26日 16:19:39



推荐阅读
  • c#学Java–Java基本语法1.类比JAVA .NETJVM CLRJDK  FCL2.java命名约定类名称应以大写字母开头,并成为容易理解的名词或组合。如 ... [详细]
  • 在JSP页面中调用客户端本地应用程序(例如 `C:\netterm.exe`)时,可以通过使用 `Runtime.getRuntime().exec("c:\\netterm.exe")` 实现。然而,这种方法仅在服务器端有效,若要实现在客户端执行本地程序,需要采用其他技术手段,如Java Applet或ActiveX控件,以确保安全性和兼容性。 ... [详细]
  • Java NIO Buffer详解及其优势与局限性分析 ... [详细]
  • 在Java中准确获取字符串长度的方法与技巧解析。首先,通过Eclipse创建一个新的Java项目,项目名称可自定义。完成后,右键点击项目名称,选择新建类。在类中,可以通过调用`String`对象的`length()`方法来统计字符串的长度。此外,还可以利用其他字符串处理库或工具类来实现更复杂的字符串长度计算,例如使用Apache Commons Lang库中的`StringUtils`类,以提高代码的可读性和健壮性。 ... [详细]
  • 本文详细探讨了Struts框架中几种常用的数据标签,包括`s:property`、`s:a`、`s:debug`、`s:include`和`s:param`。这些标签在实际开发中的应用广泛,不仅用于数据展示和链接生成,还提供了调试和模块化功能。文章分析了每个标签的基本用法及其属性配置,并结合具体示例介绍了如何进行性能优化和最佳实践。通过这些内容,开发者可以更好地理解和利用这些标签,提高开发效率和代码质量。 ... [详细]
  • 探索Golang中实现MD5加密的两种高效技术
    本文探讨了在Golang中实现MD5加密的两种高效方法。通过详细分析标准库 `crypto/md5` 的使用技巧和第三方库的性能优势,提供了丰富的代码示例和性能对比数据,帮助开发者选择最适合其应用场景的实现方式。此外,文章还讨论了MD5算法的安全性问题及其在现代应用中的局限性,为读者提供了全面的技术参考。 ... [详细]
  • 本文深入解析了Java编译过程,重点探讨了从源代码到字节码文件的转换机制。通过具体示例,如 `Hello.java` 的编译与反编译过程,详细介绍了 `javap -verbose` 命令的使用方法及其在字节码分析中的重要作用。此外,文章还讨论了字节码文件的结构特点及其在不同应用场景中的实际应用,为开发者提供了宝贵的参考。 ... [详细]
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
  • Android数组截取技巧及JNI数组交互在仓库构建中的应用分析
    在Android开发中,数组截取技巧和JNI数组交互在仓库构建中的应用具有重要意义。JNI提供了两种主要的数组处理方法:一是生成原生层数组的副本,二是直接通过数组指针进行操作。在进行字符串处理时,如果需要执行其他复杂操作,可以结合这两种方法以提高效率和灵活性。此外,合理利用这些技术可以显著提升应用程序的性能和稳定性。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • C/C++利用栈和队列实现停车场管理系统【C++教程】
    数据结构的课程设计一般都不是很好理解,今天小编为大家总结了一下c和c++版本的常见栈和队列的的停车场管理程序,需要 ... [详细]
  • 通过Apache Commons FileUpload组件,可以根据具体应用需求实现多样化的文件上传功能。在基本应用场景中,开发者可以通过调用单一方法来解析Servlet请求,从而轻松处理文件上传任务。此外,该组件还提供了丰富的配置选项和高级功能,支持大文件上传、多文件并发处理等复杂场景,显著提升了文件上传的效率和可靠性。 ... [详细]
  • 本文详细介绍了在Windows操作系统上使用Python 3.8.5编译支持CUDA 11和cuDNN 8.0.2的TensorFlow 2.3的步骤。文章不仅提供了详细的编译指南,还分享了编译后的文件下载链接,方便用户快速获取所需资源。此外,文中还涵盖了常见的编译问题及其解决方案,确保用户能够顺利进行编译和安装。 ... [详细]
  • 本文深入探讨了Linux内核网络协议栈中sk_buff结构体的操作函数,详细解析了其在数据包处理过程中的关键作用与实现机制,为开发者提供了深入了解和优化网络性能的宝贵资源。 ... [详细]
  • 数据压缩与编解码技术优化
    编码的种类  编码(Encoding)在认知上是解释传入的刺激的一种基本知觉的过程。技术上来说,这是一个复杂的、多阶段的转换过程,从较为客观的感觉输入& ... [详细]
author-avatar
mobiledu2502885307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有