stm32l071cbt6片内flash操作
今天在看片内flash的操作,发现按照下面的操作并没有写成功:
unsigned long temp = 0x12345678;
HAL_FLASH_Unlock();
FLASH_PageErase(APPLICATION_B_ADDRESS)
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,APPLICATION_B_ADDRESS,temp);
HAL_FLASH_Lock();
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data)
{
HAL_StatusTypeDef status = HAL_ERROR; /* Process Locked */
__HAL_LOCK(&pFlash); /* Check the parameters */
assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); /* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); if(status == HAL_OK)
{
/* Clean the error context */
pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; /*Program word (32-bit) at a specified address.*/
*(__IO uint32_t *)Address = Data; /* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
} /* Process Unlocked */
__HAL_UNLOCK(&pFlash); return status;
}
但是下面这个函数的返回值是HAL_OK的,误导性太大了,让我一时不知道怎么去查。
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,APPLICATION_B_ADDRESS,temp);
我花了一下午时间对着手册寄存器去查问题,直接说结果吧:
FLASH_EraseInitTypeDef f;
HAL_StatusTypeDef status = HAL_OK;
uint32_t PageError = ; f.TypeErase = FLASH_TYPEERASE_PAGES;
f.PageAddress = address;
f.NbPages = page_cnt;
status = HAL_FLASHEx_Erase(&f, &PageError);
erase用这个函数就没问题了,唯一的区别就是多了两个清除标志位的操作:
FLASH_PageErase(address);
/* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
/* If the erase operation is completed, disable the ERASE Bit */
CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);
CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE);
就写到这里吧。
stm32l071cbt6片内flash操作的更多相关文章
- 关于STM32的FLASH操作【转载】
说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置.芯片ID.自举程序等等.当然, FLASH还可以用来装数据. FLASH分 ...
- u-boot移植总结(三)(转)S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A) 转载自:http://www.cnblogs.com/idle_man/archive/2010/12/23/19153 ...
- [SAP ABAP开发技术总结]内表操作
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ABAP 7.4 新语法-内嵌生命和内表操作
1.内嵌声明 2.内表操作 3.opensql ************************************************************************ 1. ...
- SEO内链操作的技巧大家又知道多少
关于一个优质的网站而言,一套优质的内部优化链接体系是必不可少的,简略来说杰出的内链体系能让网站页面之前彼此传递权重,协助搜索引擎快速辨认网站内容的中心,可是SEO内链操作的技巧我们又知道多少?下面齐鲁 ...
- ABAP 7.4 新语法-内嵌生命和内表操作(转)
转自:https://www.cnblogs.com/mingdashu/p/6744637.html ABAP 7.4 新语法-内嵌生命和内表操作 1.内嵌声明 2.内表操作 3.opensql ...
- nrf52832 SDK 15.3.0 Flash 操作
debug中遇到的问题: 1,写入数据,读出来不对 2,看之前被人写的代码发现,读flash直接用的标准C库函数:memcpy,但是,写用的专门的flash写接口.所以,我这里两个疑问: A,写fla ...
- thinkphp中的内置操作数据库与mysql中的函数汇总
8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...
- linux中的硬盘及flash操作
磁盘操作是块设备的必备操作,需要认真掌握. 一.硬盘 1.硬盘文件 默认串口硬盘的设备文件为sda(第一块硬盘).sdb(第二块硬盘).... 默认并口硬盘的设备文件为hda(第一块硬盘).hdb(第 ...
随机推荐
- 逆袭之旅.DAY08东软实训.多态~
2018年7月4日
- Win系列:VC++编写自定义组件
在Visual Studio 中新建一个Visual C++的 Windows应用商店的Windows运行时组件项目,并将项目命名为FilePickerComponent.然后在项目的解决方案资源管理 ...
- uImage是什么
vmlinux是内核文件,zImage是一般情况下默认的压缩内核映像文件,压缩vmlinux,加上一段解压启动代码得到.而uImage则是使用工具mkimage对普通的压缩内核映像文件(zImage) ...
- [Codeforces721E]Road to Home
Problem 有一条长为l的公路(可看为数轴),n盏路灯,每盏路灯有照射区间且互不重叠. 有个人要走过这条公路,他只敢在路灯照射的地方唱歌,固定走p唱完一首歌,歌曲必须连续唱否则就要至少走t才能继续 ...
- 异常处理机制中的return关键字
Java中,执行try-catch-finally语句需要注意: 第一:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂 ...
- Azulão--青鸟--IPA--巴西葡萄牙语
这是巴西很有名的民谣.
- web项目与jsp有关的三个jar的依赖
<!-- jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId> ...
- exists 的使用
SELECT u.login_id, ( from mdp_user_login_info muli where muli.BIZ_SYS = 'admin' and u.login_id=muli. ...
- 使用 DirectX 创建 3D 图形
官方链接 https://msdn.microsoft.com/zh-cn/library/windows/desktop/hh465137.aspx 使用 Windows 运行时初始化 Dire ...
- JavaScript和它父亲的故事
附赠脱单秘籍:了解一些JavaScript的历史,聊天的时候说不好可以获得更多程序员小妹子的崇拜的哟~ ๑乛◡乛๑~ 阅读本文可以让你更好的理解什么是ECMAScript. 本次文章内容来自:< ...