STM32f103 —— 内部flash读写

#ifndef _MCU_FLASH_H_
#define _MCU_FLASH_H_#include <stdint.h>// STM32f103C8T6 64KB FLASH,20KB RAM,1个扇区1KB,程序起始0x8000000
#define FLASH_START_ADDR    ((uint32_t)0x8000000)
#define FLASH_END_ADDR      ((uint32_t)(0x8000000 + FLASH_SECTOR_NUM * FLASH_SECTOR_SIZE))
#define FLASH_SECTOR_NUM    128  // 扇区数量
#define FLASH_SECTOR_SIZE   1024 // 扇区大小1KBtypedef enum
{ FLASH_FAILURE = 0,FLASH_SUCCESS,
} flash_status_t;//===========================================================================
flash_status_t FlashErase(uint32_t addr, uint8_t count);
uint32_t FlashWrite(uint32_t addr, uint8_t *buffer, uint32_t length);
uint32_t FlashRead(uint32_t addr, uint8_t *buffer, uint32_t length);#endif /* _MCU_FLASH_H_ */

 

#include "mcu_flash.h"
#include <string.h>
#include "stm32f10x_flash.h"// addr:地址  count:块数量
flash_status_t FlashErase(uint32_t addr, uint8_t count)
{uint8_t i;FLASH_Unlock();FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);for(i = 0; i < count; ++i){if(FLASH_ErasePage(addr + i * FLASH_SECTOR_SIZE) != FLASH_COMPLETE){return FLASH_FAILURE;}}FLASH_Lock();return FLASH_SUCCESS;
}uint32_t FlashWrite(uint32_t addr, uint8_t *buffer, uint32_t length)
{uint16_t i, data = 0;FLASH_Unlock();FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);for(i = 0; i < length; i += 2){data = (*(buffer + i + 1) << 8) + (*(buffer + i));if(FLASH_ProgramHalfWord((uint32_t)(addr + i), data) != FLASH_COMPLETE){return i;}}FLASH_Lock();return length;
}uint32_t FlashRead(uint32_t addr, uint8_t *buffer, uint32_t length)
{memcpy(buffer, (void *)addr, length);return length;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java获取操作系统信息

Java代码 import java.util.Properties; Properties propsSystem.getProperties(); //获得系统属性集 String osName props.getProperty("os.name"); //操作系统名称 String osArch props.getProperty("os.arch"); //操作系统构架 String osVe…

memcpy执行效率测试,无效测试

#include <stdio.h> #include<time.h> #include<math.h> #include <unistd.h> clock_t start,stop; //clock_t是clock()函数返回的变量类型 double duration; //记录被测试函数运行时间&#xff0c;以秒为单位#define MAXK 1e7/*被测函数最大重复调用次…

第七章|7.3并发编程|协程

1、协程 5个任务实现并发&#xff0c;放到1个线程里边&#xff1b;单线程是无法实现并行的&#xff1b;并发是看起来任务是同时运行的就可以了&#xff0c;其本质来回切换并保存状态。 单线程实现并发&#xff0c;切换保存状态&#xff0c;协程要做的事情。 cpu正在运行一个任…

jQuery是什么,jQuery入门简介

|seektanjQuery是最近比较火的一个JavaScript库&#xff0c;从del.icio.us/上相关的收藏可见一斑。 到目前为之jQuery已经发布到1.2.1版本&#xff0c;而在这之前的一个星期他们刚发布1.2版本&#xff0c;看看他的各个版本的 发布时间 &#xff0c;不难发现他的飞速发展&#x…

STM32f103 —— timer

#ifndef _TIMER_H_ #define _TIMER_H_#include "stm32f10x.h" #include "type.h"// LED定时器&#xff0c;按键定时器&#xff0c;重发定时器 #define LED_TIMER TIM1 #define LED_TIMER_DIV 7200 #define LED_TIMER_PERIOD 2500#defin…

使用monkey命令来打开一个app

Knowin inSight10:/ # pm packge list adb shell monkey -p com.aispeech.player.eng -v 1

scp和sftp常用操作

文件异地直接复制&#xff1a; scp SCP的全称是secure copy (remote file copy program)&#xff0c;此命令是openssh-clients附带的,它的作用就是在机器之间实现拷贝&#xff0c;且机器之间的传输完全是加密的。 最简单的 scp 用法如下&#xff1a; [rootwww ~]# scp [-pr] [-…

大脑最佳用法

用计算机的模式来比喻大脑,那么应该是CPU内存. 但更多时候,我们将大脑当硬盘用. 大脑真正应该用于思考,记忆功能可以使用笔记本或数字工具来记录. 这是我学习时间管理的一个收获,希望时间管理理念能够在未来给我更多的帮助.转载于:https://blog.51cto.com/owen/165727

SM7250(高通5G)平台LCD bringup

写在前面的话高通平台显示这一块&#xff0c;自从去年开始&#xff0c;高通全面使用SMxxxx命名的芯片比如高端系列&#xff1a;SM8350(骁龙888)&#xff0c;SM8250(骁龙865)&#xff0c;SM8150(骁龙855)中端系列&#xff1a;SM7250&#xff08;骁龙765g&#xff09;&#xff0c…

网络管理人员的未来?

这是流传已久的一张带讽刺性的照片。一名网络专业的学生的未来难道真会如此&#xff1f;或者&#xff0c;是某些人理解错了这个专业的诸多特性&#xff1f;转载于:https://blog.51cto.com/zhangbikai/166694

python笔记-1(import导入、time/datetime/random/os/sys模块)

python笔记-6&#xff08;import导入、time/datetime/random/os/sys模块&#xff09; 一、了解模块导入的基本知识 此部分此处不展开细说import导入&#xff0c;仅写几个点目前的认知即可。其它内容待日后有深入理解了再来细说 1、import可以导入的两种不同的内容 1.1 *.py文件…

嵌入式里如何给内存做压力测试?不妨试试memtester

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是内存读写正确性压力测试程序memtester。在嵌入式系统中&#xff0c;内存(RAM)的重要性不言而喻&#xff0c;系统性能及稳定性都与内存息息相关。关于内存性能有很多个不同指标&#xff0…

一位嵌入式工程师的成长之路

有些事并不是因为有希望才去坚持&#xff0c;而是因为坚持了才有希望。分享一位嵌入式工程师的成长之路&#xff0c;希望能给朋友一点勉励。刚毕业找不着工作2008年大专毕业后&#xff0c;意气风发南下深圳找工作&#xff0c;想找一份电子技术员的工作&#xff0c;白天上班&…

网络规划设计师考试说明

网络规划设计师考试说明 --------------------------------------------------------------------------------1.考试要求&#xff08;1&#xff09;系统掌握数据通信基本原理&#xff1b;&#xff08;2&#xff09;系统掌握计算机网络的原理&#xff1b;&#xff08;3&#xf…

amd,cmd规范

AMD 和 CMD 的区别有哪些&#xff1f; AMD规范与CMD规范的区别 回顾&#xff1a;前端模块化和AMD、CMD规范&#xff08;全&#xff09; 浅析JS模块规范&#xff1a;AMD&#xff0c;CMD&#xff0c;CommonJS 理解AMD &#xff0c;CMD&#xff0c;CommonJS规范 Javascript模块化编…

分享GitHub上一些嵌入式相关的高星开源项目

关于GitHub&#xff0c;可能很多人误以为这是互联网人的专属&#xff0c;其实并不是&#xff0c;那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目&#xff08;像RT-Thread、AWTK等大家都熟知的就不介绍了&#xff09;&#xff1a;Avem项目链接&#xff1a;https…

安全四部曲之一---***工具简单使用

所需工具&#xff1a;ASP小旋风5.asp(黑防)鸽子2006ie_xpsp2网马生成器##############Michael分割线################先给大家几个外网路由的地址你们进去捣乱捣乱,没事的,因为没有日志记录用户名密码 全都是admin,别搞太破坏哦如果改动里面的设置,记得把登录密码改了,否则他们…

三角形的内点

打开连接 皮克定理 以及 斜边的整点数为gcd(n,m)1 皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式&#xff0c;该公式可以表示为2S2ab-2&#xff0c;其中a表示多边形内部的点数&#xff0c;b表示多边形边界上的点数&#xff0c;S表示多边形的面积。代码如下&#xff…

第 8 章 配置listener监听器

第 8 章 配置listener监听器注意 还记得我们之前讲过的在线列表吗&#xff1f;第 4.2 节 “例子&#xff1a;在线列表”。我们曾经说过那个在线列表无法判断用户非法退出&#xff0c;很可能造成在线列表无限增大&#xff0c;现在我们可以用listener来弥补这一问题了。如果你不满…