打印
[STM32F1]

写Flash失败

[复制链接]
3157|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wjroy11|  楼主 | 2016-7-28 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的片子是STM32F103TBU6,写Flash之后查看内存数据并没有成功写进去,仍然是0xFF。
使用的Cube生成的配置,HAL库函数。
写Flash代码如下:
        //解锁
        HAL_FLASH_Unlock();
        //清标志位
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP  | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR );
        //擦除
        FLASH_PageErase(0x08005000);
        //写Flash
        uint64_t Buffer = 0x12345678;
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08005000,Buffer);
        //锁
        HAL_FLASH_Lock();

不知道问题出在哪里,求指教!
沙发
mmuuss586| | 2016-7-28 19:40 | 只看该作者
再定义一个变量,把内存地址数据读出来,显示到变量上看看,是否一样

使用特权

评论回复
板凳
myidear| | 2016-7-28 22:28 | 只看该作者
官方应该给例子的吧,操作流程的话就是这样,应该没错的。

使用特权

评论回复
地板
wjroy11|  楼主 | 2016-7-29 09:21 | 只看该作者
mmuuss586 发表于 2016-7-28 19:40
再定义一个变量,把内存地址数据读出来,显示到变量上看看,是否一样

读过了,读出来的仍然是0xFFFFFFFF,所以觉得问题比较奇怪呢

使用特权

评论回复
5
wjroy11|  楼主 | 2016-7-29 09:22 | 只看该作者
myidear 发表于 2016-7-28 22:28
官方应该给例子的吧,操作流程的话就是这样,应该没错的。

就是对照官方的例子写的,觉得流程也没什么问题,所以觉得问题比较诡异。不知道是不是哪里细节没有注意到。

使用特权

评论回复
6
wjroy11|  楼主 | 2016-7-29 19:12 | 只看该作者
mmuuss586 发表于 2016-7-28 19:40
再定义一个变量,把内存地址数据读出来,显示到变量上看看,是否一样

单步调试了一下,寄存器Flash->CR的PG(编程位)置一操作不成功,SET_BIT(FLASH->CR, FLASH_CR_PG);这句语句运行之后PG标志位仍然为0,所以数据写不进Flash,不知道什么原因。Flash的WRPR(写保护)寄存器的值是0xFFFF,也就是没有打开写保护啊。

使用特权

评论回复
7
wjroy11|  楼主 | 2016-7-29 19:13 | 只看该作者
myidear 发表于 2016-7-28 22:28
官方应该给例子的吧,操作流程的话就是这样,应该没错的。

单步调试了一下,寄存器Flash->CR的PG(编程位)置一操作不成功,SET_BIT(FLASH->CR, FLASH_CR_PG);这句语句运行之后PG标志位仍然为0,所以数据写不进Flash,不知道什么原因。Flash的WRPR(写保护)寄存器的值是0xFFFF,也就是没有打开写保护啊。

使用特权

评论回复
8
wjroy11|  楼主 | 2016-8-2 09:30 | 只看该作者
问题找到了,在擦除FLASH之后,PER标志位没有被清零,在HAL库函数里面加一条擦除该标志位就可以了。感谢各位。

使用特权

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

本版积分规则

10

主题

59

帖子

0

粉丝