本帖最后由 stm1024 于 2019-1-18 11:15 编辑 ' p/ P; A/ W# i l " w/ D5 n/ h+ @/ S K8 i% n Flash现已成为MCU的标配,Flash的特性在决定了MCU的一些功能,如代码大小、执行效率、FDU等。了解一款MCU的Flash显得很重要,这里测试一下G071的Flash。6 t, x9 i. `2 A( A9 P1 y- S$ W 先看看和F0存在的不同。flash的大小就没必要深究了,主要的区别如下:! i- A( _1 d; s7 _; B* t. V 1.指令缓存。Flash控制器含有一个8字节的预取指缓冲器和一个16字节的指令缓存。 2.OTP区域。所谓的OTP,也就是one time programming,这个区域可以按双字方式写入数据,而且只能写一次,如果写入的数据有一个bit不为0,则以后这个区域就不可更改了,可用于存取非擦写的用户数据。8 L" O) d) ^5 M' @5 j2 z 3.快速编程。官方给出的数据是22ms的擦除时间和写入每双字时间为82us。# g: _( I0 s- k3 [6 g3 q/ @ 4.PCROP。这个是proprietary code readout protection的缩写,用于保护代码,其代码只能用来执行,而不能被读取或写入。至于Securable Memory,则是安全储存器,该区域不能被非安全区域外访问, 5.ECC。ECC是Error Correction and Checking,即错误检查和纠正。能检查2 bits的错误,并能纠正1 bit翻转错误。 - F2 {$ N/ h8 { 再看看Flash的组织。见下图: Flash主要分为两块,分别是主块和信息块。主块就是常规使用的Flash,通常也是我们程序的入口地址,这一块可以随便使用。 而信息块则包含了系统储存器,OTP区域和选项字节,Flash的操作方式按下图:5 }, P% c3 a1 l6 w7 C* Y& f 编程需要一次写入8字节,也就是粒度为64bits(实际上是72bits,还有8bits的ECC)快速编程为256字节(仅支持Main Memory),快速编程因为不检查所写入的地址,因此比标准编程快了约37%。擦除可按2KB的页或者整个擦除(128KB),但花费的时间相当。 在选项字节的配置上,和F0系列没有差别(或者我还没有发现)。3 K) U% M/ Q" Z5 e4 u4 F/ ]) z' V, | 8 ~) T& w; `- f4 n0 @8 D, w 以下Flash编程测试代码:+ o- U: }& Z+ A: D. ?7 Z
不得不说,有ST Link Utility就是好,直接Dump Flash。) v5 ~- d# w( A+ a$ { 此外,可以看到刚好改写数据是1页:1 S, y2 T G0 P4 H 因为0x2000-0x1800=0x800,也就是1 Page的大小。5 j1 a* W9 p o9 t: P! H8 A 6 \* @6 {( _$ K3 z8 U/ Z : P* w% t( P( e, f - u1 e7 e6 Y1 N( X! ~; R |
STM32固件库分享,超全系列整理
STM32G030F6P6基于HAL库模拟SPI驱动1.8寸TFT LCD屏幕
STM32的CAN FD位定时设置注意事项
基于STM32将移植 SBSFU 到 STM32G070过程分享
基于STM32G030 RAM不够用经验分享
STM32G070在OLED上移植U8G2单色GUI
【经验分享】STM32 IAP+Ymodem功能实现(参考官方代码)
【经验分享】STM32的SPI问题
【经验分享】STM32 的加密实现
STM32G070—使用platformio+arduino
啊,这个没复制进去。; [) }+ b+ [% l! {# X) ]' G# T& v
一行代码:
这命名方式不太符合ST家的风格,而且目前从官网看,也就只有G070,G071,G081三个大系列。# w9 h' k3 b+ r, l4 h' l* }
这个可以参考HAL库的文档,我都是调用的HAL库函数
谢谢!
2 Y0 ^ U6 ~' B9 Y$ o
另外还有页设置的函数GetPage()是在哪个文件中定义的?我在编译时提示未定义。1 l3 S* y$ n% W1 u& y! k) U7 N' G
这个问题已经解决了,编译通过了。
额,这个还没见到过,不过一般用的好像都是F103C8T6
感谢分享
大佬过奖了~
过奖了,学了点皮毛
这个文章中的,一位买了STLINK 主控是stm32gc102cb