一 序:
1 STM32F103C8T6和STM32F103CBT6 引脚相同,唯一的区别是前者为64kflash(0x8000000~0x800FFFF) 后者为128kflash(0x8000000~0x801FFFF);
2 已经发现STM32Ff103C8T6 在 00x8010000~0x801FFFF是可读写的;

二 ST 技术人员对此回答:
STM32F103C8T6和STM32F103CBT6 是在同一圆晶上制造的,但测试时,只测试手册提供的参数范围所包含的内容,也就意味这 STM32F103C8T6也是128k Flash,只不过只测试了前面64k,然后打上 STM32F103C8T6标注(当然内部就写上 C8T6 的 ID);

三 简单测试;
1 用stlink连接板子, 在STM32 STLINK UTILITY中将 size 由 0x10000 改为 0x20000 并连接,可见后面64Kflash能全部读出,然而修改数值后不能写入,估计是stlink会检查ID并拒绝写入超出该型号地址范围外的flash;
2 但在jlink中,只要将型号选为STM32F103CBT6,就能读写后面的64kflash了。

四 验证:
先准备个大小为64k的二进制文件bin,内容为 uint16_t 0x0000~0x7FFF;
该数据文件我是这样做的:(arduino程序)

复制代码

1.#define LED1 LED_BUILTIN
2.void setup() {
3. // put your setup code here, to run once:
4. pinMode(LED1,OUTPUT);
5. Serial.begin(115200);
6.
7. for (uint16_t i = 0; i < 0x8000; i++) {
8. Serial.write(i & 0xff); //out low byte
9. Serial.write((i >> 8) & 0xff); //out high 8 bit
10. }
11.}
12.
13.void loop() {
14. // put your main code here, to run repeatedly:
15. digitalToggle(LED1);
16. delay(500);
17.}
程序 简单的依次从串口输出0x0000~0x7fff(低位在前,高位在后),在pc上将接收的数据保存为一个*.bin文件;
将这个文件用jlink 烧入地址 0x8010000开始的flahs中;
然后,再写个验证程序:

复制代码

1.#define LED1 LED_BUILTIN
2.
3.#define EXT_FLASH_BASE ((uint32_t)(0x8010000))
4.#define p ((uint16_t *) EXT_FLASH_BASE)
5.
6.void setup() {
7. // put your setup code here, to run once:
8. pinMode(LED1, OUTPUT);
9. Serial.begin(115200);
10.}
11.
12.void loop() {
13. // put your main code here, to run repeatedly:
14. uint8_t j = 0;
15. for (volatile uint16_t i = 0; i < 0x8000; i++) {
16. Serial << _HEX(p[i]) << " ";
17. j++;
18. if (j == 16) {
19. j = 0;
20. Serial << “\n”;
21. }
22. delay(1000);
23. digitalToggle(LED1);
24.}

该程序从地址 0x8010000 开始按uint_16 读取数据并从串口输出,每16个数据换新行,重复输出,这是运行中的截图:

经验证,在程序中,该区域flash也是可读写的,如读取,则和从sram读是一样方便的,只要用指针指向需读取数据的地址即可;
现在,STM32F103C8T6可用的Flash扩大了一倍,这是ST公司给我们的福利,真的太好了,不用也是浪费了,这个区域可写上个常用汉字库或图片,我们可以扔掉外部的spi flash了!还可模拟个64K EEPROM(ST有现成的应用示例代码,arduino中有现成的库)或直接在arduino中当成CBT6用;

小秘密: STM32F101C8T6 和 STM32F103C8T6 ,前者没有USB,只是ST出厂是没有测试这一部分,其实完全可以当成和STM32F103CBT6用;
STM32F103VCT6 和 STM32F103VET6,也是如此,你完全可以使用后面的256k flash !
STM32F030F4P6 可以用32Kflash

这就是为什么ST公司产品中的stlink ob 都是用 STM32F103CBT6做到,而山寨的stlink ob基本都用 C8T6;
当然,ST没测试,你就需要测试一下了,业余玩玩完全可以,做产品当然就不推荐了,因为毕竟没做各种读写的可靠性的测试;
大家可以对其他型号,测试一下看看能否在读出手册Flash结束地址以后的内容,你肯定有收获的;

STM32F103C8T6有128K的Flash相关推荐

  1. STM32F103C8T6音频数据的Flash读取与DAC播放

    目录 一.Flash地址空间的数据读取 1.Flash简介 2.Flash的硬件实现机制 3.使用到的硬件及软件 4.STM32CubeMX工程配置 5.keil代码 6.STlink调试说明 7.调 ...

  2. STM32F103C8用内部Flash做一个优盘(USB+MSC+FATFS)

    STM32F103C8用内部Flash做一个优盘(USB+MSC+FATFS),轻松实现APP升级.数据存储. 基本工程生成 直接使用STM32CubeMX生成基本的工程,省得我们去调底层. 时钟配置 ...

  3. 【stm32H7读内部flash程序】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.芯片内部flash 二.驱动程序 1.扇区自动识别代码 2.读数据 2.写数据 总结 前言 STM32 corte ...

  4. 关于STM32G0B1CCT6的flash内存使用注意事项

    STM32G0B1CCT6是相对比较新的MCU,属于G系列,不支持标准库,所以下文用的是hal库或者ll库. 首先STM32G0B1CCT6是有256kflash的,每页2k,而规格书里面只提到0-6 ...

  5. 基于STM32F103C8T6 的 Bootloder 程序源码(另附百度网盘下载链接)

    说明: 1.本例程参考正点原子的IAP的代码. 2.本例程基于STM32F103C8T6单片机编写. 3.本例程使用USART1进行程序下载,波特率115200. 4.串口输出"Bootlo ...

  6. zynq使用petalinux测试spi flash

    1.硬件环境搭建 本测试环境为xilinx z7系列的xc7z045,在pl端外接axi_quad_spi ip外接m25p10flash芯片 ip连接及配置如下 2.生成bit并导出到sdk 3.在 ...

  7. STM32F103基于片内flash的数据读取与音乐播放

    目录 一.前言 二.题目要求 三.什么是片内flash 四.闪存的编程和擦除 五.基于flash的数据读取 1.工程创建 2.修改代码 3.烧录 4.调试 六.基于flash的提示音播放 1.生成正弦 ...

  8. 【STM32】初识STM32(型号+封装+内核+储存器+时钟、复位和电源管理+工作模式+ADC)

    折腾着折腾着终于开始了 目录 ■STM32型号的说明: ■几种封装样式: ■ 内核:ARM 32位的Cortex™-M3 CPU ■ 存储器 ■ 时钟.复位和电源管理 ■内嵌RC振荡器和外接晶振: ■ ...

  9. 基于32单片机的智能插座

    目 录 摘 要 - -1 Abstract- -2引言- -2 第一章 绪论 5 1.1 开发背景与选题意义 5 1.1 国内基于传感器智能插座分析 5 1.2 本文任务与目标 6 1.3 本文所作的 ...

  10. stm32-IAP(在线升级程序)

    第一章 背景知识 什么是IAP? IAP的知识网上的各种资料也说的比较明白,在此简单介绍一下.IAP( In Application Programming)即在线应用编程,也就是用户可以使用自己的程 ...

最新文章

  1. linux qt creator git,Building Qt Creator from Git/zh
  2. POS主密钥与工作密钥关联详解
  3. 二进制地址的伙伴地址
  4. Android 判断当前屏幕是横屏还是竖屏
  5. SVG Authoring Guidelines[转]
  6. PON:EPON/GPON/10G PON/XG-PON/NG-PON2—Vecloud微云
  7. java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.init([Ljava
  8. 泡泡玛特,走出“盲盒”?
  9. c语言前后指针怎么用,详解一下——C语言指针该怎么用
  10. Go map[int64]int64 写入 redis 占用多少内存
  11. 树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】
  12. 18.抽象模板方法———获取程序运行的时间
  13. Python 多线程总结
  14. Linux:ubuntu 下安装软件,卸载,查看已经安装的软件
  15. Hibernate【缓存】知识要点
  16. Smart3D基础理论
  17. BP神经网络预测matlab代码讲解与实现步骤
  18. js给图片打马赛克?
  19. 一个简单的txt分割器
  20. 微信自定义菜单java_java微信开发API第四步 微信自定义个性化菜单实现

热门文章

  1. 营业执照统一社会信用代码校验
  2. 负温度相对湿度与绝对湿度换算
  3. 怎么测试网站访问速度?
  4. RecyclerView实现吸顶效果---ItemDecoration
  5. vs code git 编辑器中拉取(pull) 的时候报错 [rejected] v1.0.0 -> v1.0.0 (would clobber existing tag)
  6. c# - - - 使用Chloe框架连接PostgreSQL数据库
  7. 计算机自检后反复重启 主引导,电脑重装系统时,按错了意外重启然后就一直这样怎么办啊!...
  8. 怎样开启无线热点服务器,在Ubuntu系统的电脑上开启无线热点全攻略
  9. Why C++ Is Not “Back”
  10. java迷宫注释_写下走迷宫游戏的注释