stm32f103c8t6的内部Flash读取

本文详细介绍了如何在STM32中实现SD卡的读写操作,包括配置定时器、操作GPIO、使用FATFS库以及闪存(Flash)的写入和验证,展示了从读取hello.txt到写入和验证32KB数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、知识点  

二、SD卡读写

2.1 要求

2.2 实验过程截图

2.3 查看hello.txt

2.4 从SD卡读出

2.4.1 修改代码

2.4.2 输出结果

三、写入flash

3.1 实验源码

3.1.1 配置定时器

3.1.2 使PC13GPIO模式,判断程序是否运行成功

3.1.3 使GPIO引脚使能

3.1.4 时钟配置

3.1.5 设置堆栈大小 

3.2 修改代码

3.2.1 修改数组大小

3.2.2 修改数据内容​

3.2.3 将i变量改成uint16_t位

3.2.4 修改flash.h中的flash结束地址为 0X0801BA00 

3.3 st-link设置

3.4 编译烧录

3.5 运行结果

3.6 修改起始地址重新烧录

3.7 验证flash内存

四、总结


一、知识点  

stm32内部框架图

stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。

RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。

Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失, 
RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。

STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。 
stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。

二、SD卡读写

2.1 要求

将64K数据分250次,每次256字节,写入SD卡,测试速度

具体操作可以查看上篇博客:用STM32F103 完成对SD卡的数据读取(FAT文件模式)_Laul Ken-Yi的博客-CSDN博客

2.2 实验过程截图

总共用了14分钟,写了64K字节。

2.3 查看hello.txt

可以看到写入了250行数据,总计64K字节

2.4 从SD卡读出

利用FATS从SD卡读出数据,并且串口输出。

2.4.1 修改代码

将写入函数修改为读出函数名

定义读出函数,指针标志s,且定义字节类型格式br和一个存储读取的数组READBUFF。 

① 修改f_open函数的第三个打开状态为FA_READ模式。②文件指针移至相应位置,否则无输出。③指针加地址④使用FATS的read函数,第一个参数是指针,第二个是存储数组,第三个是数组大小,第四个是强制转换br为UINT格式。⑤输出

2.4.2 输出结果

 

 可以看到依次输出,我用了a,b,c,d,e来区分不同。

三、写入flash

3.1 实验源码

链接:https://pan.baidu.com/s/1jJ6_YlAI9W81w7h6c7FVBw 
提取码:qwer

cubeMX设置

3.1.1 配置定时器

3.1.2 使PC13GPIO模式,判断程序是否运行成功

 

3.1.3 使GPIO引脚使能

3.1.4 时钟配置

3.1.5 设置堆栈大小 

3.2 修改代码

3.2.1 修改数组大小

 首先修改存储的Flash读取数组和写入数组分别为8位的8k个字节大小。

uint8_t FlashWBuff [8000];
uint8_t FlashRBuff [8000];

3.2.2 修改数据内容

 将数组中写入要存储的数据为8K个字节。

3.2.3 将i变量改成uint16_t位

3.2.4 修改flash.h中的flash结束地址为 0X0801BA00 

此地址是由0x0800c000+0xFA00(64K)=0X0801BA00 

3.3 st-link设置

对应口进行相连即可

ST-LINKSTM32
SWCLK/TCKSWCLK/TCK
SWDIO/TMSSWDIO/TMS
GNDGND
VCCVCC

设置debug为st-link debugger

点进去后可以看到要检测出SWDIO有信息即可烧录。

3.4 编译烧录

接着全速运行。

3.5 运行结果

PC13灯会亮起来

可以看到它写到了0x0800DF3F,此地址刚好是0X0800C000+0X1F40(8K)的数据。

3.6 修改起始地址重新烧录

修改起始地址为0X0800DF40

进行烧录结果

 

可以看到最后内存写到了0X0800FE7F

进行反复的更改初始地址,每次增加8K字节的地址,将四次8k一共32k数据写入flash。

结果如下图,可以看到每次的地址都是增加8K个字节的地址。

3.7 验证flash内存

 可以看到flash地址重0X0800C00到0X08013CFF总共32k字节都写满了数据。

四、总结

        通过对SD卡读写操作,更一步掌握了FATS文件的读取函数的理解,在读SD时一直深陷其中,在老师的点拔下总算是做出来了,对flash的理解,即断电则不会清除FLASH的内容,虽然FLASH是从0X08000000开始写入,这里我们采用从0X0800C000写入,可以看到是能写成功的,所以STM32在设计的时候是有隐藏的内存的。

参考文献:

STM32学习笔记:读写内部Flash(介绍+附代码) - 竹风清 - 博客园

STM32用cube配置FATFS模式下SPI读写SD卡_Drive World的博客-CSDN博客

STM32 进阶教程 13 – FLASH的读写操作_张十三的博客-CSDN博客_stm32f103c8t6flash读写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值