[APM32F0]

如何正确使用FMC模块

[复制链接]
157|0
手机看帖
扫描二维码
随时随地手机跟帖
宫影空明人不往|  楼主 | 2023-3-29 21:28 | 显示全部楼层 |阅读模式
本帖最后由 宫影空明人不往 于 2023-3-29 21:28 编辑

#申请原创#
前言
本文旨在记录在使用APM32芯片上的一些学习记录。
最近使用FMC模块比较多,有一些理解将记录下来。
FMC简介
APM32的FMC模块全称为Flash Memory Control,即闪存控制器。其主要分为三个模块,分别为存储器,信息块(系统存储区、选项字节)以及FMC寄存器。
Snipaste_2023-03-28_19-53-47.png
Snipaste_2023-03-28_19-53-22.png
FMC使用
对于使用FMC模块,我觉得可以分为四点:
1.     Flash编程
对于flash编程,主要需要注意的是在写入数据时先保证已经进行擦除,同时也需留意flash支持多少位数据写入,比如APM32F103的flash支持的是半字写入,而APM32F407的flash则支持字节、半字、字、双字写入操作,具体情况视并行位数决定。
Snipaste_2023-03-28_19-54-19.png
2.     Flash擦除操作
Flash的擦除操作只能擦除指定区域的全部内容。需要注意的是当前flash支持的是页擦除还是扇擦除。比如APM32F103的flash支持的是页擦除,而APM32F407的flash支持的是扇擦除。在对FLASH进行批量编程时,如果不确定擦除的范围大小,很容易触发编程错误。
3.     flash读保护
flash一共有三种保护等级,分为0,1,2。其中,等级0是没有任何保护,什么操作都行。等级1为的第一层读保护,在这个等级中,无法读取存储块的内容。在等级1保护中,可以通过选项字节操作返回到等级0中,但是会把主存储区的内容全部擦除。等级2即更加高级的读保护,在这阶段无法返回等级0和等级1。因此在设置读保护等级时需要额外注意。

如果不小心进入读保护等级1,可通过以下方法退回到等级0:

第一种方法,就是事先在程序中写入了解除读保护的程序。
第二种方法就是通过jflash或者stmcubeprog来解除读保护。
如果以上两种方法也不能解决的话,可以通过sram启动解除读保护程序来解除读保护。
当然,如果有一些芯片它没有boot引脚设置或者它的boot1引脚受选项字节控制,该怎么办呢?

最近在使用APM32F003该款芯片,发现其没有boot引脚设置,在网上寻找了好久没有发现其他方法改写选项字节,最后发现IAR这款ide可以在debug中使芯片从sram启动。
首先打开工程的首选项,选择使用自己的.icf文件启动。
Snipaste_2023-03-28_19-58-05.png
然后将icf文件的.intvec start修改成SRAM的首地址。
Snipaste_2023-03-28_19-56-16.png
当然,还需要修改rom和ram的位置,因为flash被设置了读保护,所以将其设置在sram中。这里对应的是APM32F003的开发板。
Snipaste_2023-03-28_19-57-38.png
这样的话程序就会写入到SRAM中。
最后再编写解除读保护的程序,在debug中运行。芯片就被解除了读保护了。
4.     选项字节操作
选项字节主要内容包括读写保护配置,用户选项字节配置以及它们的补码。每次修改选项字节后,需要进行上电复位后才能生效。同时,由于补码的存在,每次修改选项字节都需要先进行擦除。
比如说,想0XFE直接修改成0xFD,按道理是没有什么问题的,但是因为补码的存在,其补码部分会触发编程错误。因此,每次操作选项字节都需进行擦除。

目前总共就是这么多,可能会有一些错误,欢迎大家一起探讨。





使用特权

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

本版积分规则

8

主题

9

帖子

0

粉丝