本帖最后由 宫影空明人不往 于 2023-3-29 21:28 编辑
#申请原创#前言 本文旨在记录在使用APM32芯片上的一些学习记录。 最近使用FMC模块比较多,有一些理解将记录下来。 FMC简介 APM32的FMC模块全称为Flash Memory Control,即闪存控制器。其主要分为三个模块,分别为存储器,信息块(系统存储区、选项字节)以及FMC寄存器。
FMC使用 对于使用FMC模块,我觉得可以分为四点: 1. Flash编程 对于flash编程,主要需要注意的是在写入数据时先保证已经进行擦除,同时也需留意flash支持多少位数据写入,比如APM32F103的flash支持的是半字写入,而APM32F407的flash则支持字节、半字、字、双字写入操作,具体情况视并行位数决定。
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文件启动。
然后将icf文件的.intvec start修改成SRAM的首地址。
当然,还需要修改rom和ram的位置,因为flash被设置了读保护,所以将其设置在sram中。这里对应的是APM32F003的开发板。
这样的话程序就会写入到SRAM中。
最后再编写解除读保护的程序,在debug中运行。芯片就被解除了读保护了。
4. 选项字节操作 选项字节主要内容包括读写保护配置,用户选项字节配置以及它们的补码。每次修改选项字节后,需要进行上电复位后才能生效。同时,由于补码的存在,每次修改选项字节都需要先进行擦除。 比如说,想0XFE直接修改成0xFD,按道理是没有什么问题的,但是因为补码的存在,其补码部分会触发编程错误。因此,每次操作选项字节都需进行擦除。
目前总共就是这么多,可能会有一些错误,欢迎大家一起探讨。
|