STM32F103C8T6有128K的Flash

news/2024/11/29 9:35:56/

一 序:
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结束地址以后的内容,你肯定有收获的;


http://www.ppmy.cn/news/431056.html

相关文章

防护等级 ipx9、ipx9k、ip69、ip69k之间的区别

一&#xff0c;ipx9、ipx9k、ip69、ip69k 产品技术参数 二&#xff0c;关于ipx9、ip69&#xff0c;即未带“k”&#xff0c;请参照IEC-60529、 GB/T4208标准&#xff1b; 三&#xff0c;关于ipx9k、ip69k&#xff0c;即带“k”&#xff0c;请参照DIN-40050-9、ISO-60523标准&…

软件测试学会什么就可以拿到6K以上的工资?

一、测试拿6k以上薪资难不难&#xff1f;   先抛出看法&#xff1a;拿到6k以上工资并不难&#xff0c;只要会功能测试&#xff0c;再加上一点自动化&#xff08;例如接口&#xff0c;ui&#xff09;&#xff0c;就能拿到6k以上的工资了。   二、测试学什么技能才能拿到6k以…

我的安卓生涯:从6k到25K,都经历了什么

不知不觉已经从事安卓开发四年了&#xff0c;从刚刚带着雄心壮志硬生生闯入社会的少年&#xff0c;到现在心态平稳&#xff0c;处事不惊的奔三大叔&#xff0c;四年时间教会了我很多很多。 本篇 Chat 分享了我五年&#xff08;含大四&#xff09;中&#xff0c;从 6k 到 25k 的…

retrieval_paris6k_4096

代码是使用matconvnetR2018b 主要包括&#xff1a; 1、特征提取 2、计算map 3、检索&#xff1a;这里是使用官方提供的边界框&#xff0c;对查询图像进行裁剪&#xff0c;然后进行查询。 addpath(helpers); addpath(matlab); run ./matlab/vl_setupnn;gnd_paris6k load(…

学起来,转行软件测试要学会些什么才能拿6K以上的工资?

“软件测试要学会什么才能拿6k以上的工资”这句话&#xff0c;其实揭露了2个显性需求&#xff0c;1个隐形需求&#xff08;薪资怎么能更高&#xff09;&#xff0c;所以本文会分为3个部分 1. 测试拿6k以上薪资难不难&#xff1f; 2. 测试学什么技能才能拿到6k以上的薪资&#x…

Java入门——多态篇,6k字攻略。

目录 多态性 向上转型 方法重写 问题&#xff1a;父类方法使用 private &#xff0c;子类方法使用 public 是否可以重写? 问题&#xff1a;能否重写 static 方法? 判断父类是否被覆写、子类是否重写父类方法 方法重写的返回值必须严格相同&#xff0c;向上转型类除外 …

魅族手机:通讯社交类应用今日使用已超时,请明日再用

今日不小心触碰到什么设置了&#xff0c;魅族手机上面微信、QQ都提示“通讯社交类应用今日使用已超时,请明日再用”&#xff0c;吓了我一跳&#xff0c;然后打售后电话问了下才知道原来是不小心弄到设置里面的“数字健康”控制了。 不要急&#xff0c;按照以下操作就可以解决问…

魅族系统应用卸载 adb卸载/禁用Android系统内置应用

1、手机通过USB连接电脑, 择选传输文件 2、手机端通过->设置->关于手机->版本号, 快速点击几次版本号处(Flyme 8.xx)开启开发者模式 3、手机端通过->设置->辅助功能->开发者选项->打开“USB 调试”接下来PC端按下WINR输入cmd并回车, 在cmd中输入以下命令进…