目录
一、知识简述
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卡读写
将64K数据分250次,每次256字节,写入SD卡,测试速度


总共用了14分钟,写了64K字节。
查看hello.txt
可以看到写入了250行数据,总计64K字节

从SD卡读出
利用FATS从SD卡读出数据,并且串口输出。
修改代码
将写入函数修改为读出函数名

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

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

输出结果

可以看到依次输出,用了a,b,c,d,e来区分不同。
三、写入flash
实验源码
链接:https://pan.baidu.com/s/1jJ6_YlAI9W81w7h6c7FVBw
提取码:qwer
cubeMX设置
配置定时器

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

使GPIO引脚使能

时钟配置


修改代码
修改数组大小

首先修改存储的Flash读取数组和写入数组分别为8位的8k个字节大小。
uint8_t FlashWBuff [8000];
uint8_t FlashRBuff [8000];
修改数据内容

将数组中写入要存储的数据为8K个字节。
将i变量改成uint16_t位

修改flash.h中的flash结束地址为 0X0801BA00
此地址是由0x0800c000+0xFA00(64K)=0X0801BA00

st-link设置
| ST-LINK | STM32 |
|---|---|
| SWCLK/TCK | SWCLK/TCK |
| SWDIO/TMS | SWDIO/TMS |
| GND | GND |
| VCC | VCC |
设置debug为st-link debugger

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

编译烧录

接着全速运行。
四、运行结果

PC13灯会亮起来


可以看到它写到了0x0800DF3F,此地址刚好是0X0800C000+0X1F40(8K)的数据。
修改起始地址重新烧录
修改起始地址为0X0800DF40

进行烧录结果

可以看到最后内存写到了0X0800FE7F
进行反复的更改初始地址,每次增加8K字节的地址,将四次8k一共32k数据写入flash。
结果如下图,可以看到每次的地址都是增加8K个字节的地址。


验证flash内存

可以看到flash地址重0X0800C00到0X08013CFF总共32k字节都写满了数据。
五、总结
通过对SD卡读写操作,对其有了进一步的了解,flash的断电后会保存其中内容,下一次可以继续写入。
本文介绍了STM32如何配置定时器、操作SD卡进行读写,详细展示了如何将数据写入和验证Flash内存,包括修改数组大小、数据内容和地址操作。重点讲解了使用STM32的Flash进行8k字节数据存储与验证的过程。
2万+

被折叠的 条评论
为什么被折叠?



