stm32f103c8t6的内部Flash读取

目录

一、知识点  

二、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读写

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有内置的Flash存储器。这款芯片内置了64KB的Flash存储器,可以用于存储程序代码和数据。 在STM32F103C8T6上进行内部Flash读写操作,首先需要初始化Flash模块。通过设置Flash时钟源、解锁Flash接口和使能Flash预取功能等步骤,可以确保正确读写Flash读取Flash存储器的数据,可以通过编程方式访问存储器地址并将数据读取到合适的数据类型中。读取过程需要注意数据的字节对齐、类型转换和读取大小等问题,以确保数据读取的正确性和准确性。 写入Flash存储器的数据,需要使用特定的Flash写函数。在编写数据之前,需要确保Flash存储器的页已经被擦除。然后,使用写入函数将数据写入指定地址的Flash存储器中。写操作完成后,需要进行数据校验或读取校验,以确保数据的正确写入。 注意,对于STM32F103C8T6Flash存储器,写入操作只能在已经擦除的页中进行。单次写入操作的字节长度应小于等于Flash存储器的页大小。如果需要写入超过一页的数据,需要以页为单位进行分页写入,同时注意页边界对齐和数据的正确传输。 总的来说,STM32F103C8T6内部Flash读写操作需要正确的初始化和合适的编程方法。合理管理内部Flash存储器的读写,可以实现数据存储和程序更新等功能。 ### 回答2: STM32F103C8T6是一款32位ARM Cortex-M3内核的微控制器,内置了64KB的Flash存储器。下面将通过以下几个方面来回答stm32f103c8t6内部Flash读写。 首先,内部Flash读取。在STM32的开发环境中,我们可以使用标准库函数或者相关的驱动程序读取内部Flash。我们可以使用函数如`HAL_FLASH_Read()`来读取指定地址的数据。我们需要提供要读取的地址和要读取的变量的指针。函数将会将指定地址的数据复制到指定的变量中。 其次,内部Flash的写入。为了写入内部Flash,我们需要解锁Flash并擦除要写入的扇区。可以使用函数如`HAL_FLASH_Unlock()`解锁Flash。然后,使用函数如`FLASH_Erase_Sector()`来擦除指定的Flash扇区。接下来,我们可以使用函数如`HAL_FLASH_Program()`来对Flash进行编程。将要写入的数据和要写入的地址传递给该函数,函数将会将数据编程到指定的地址。 需要注意的是,内部Flash的写入和擦除操作会消耗一定的时间。为了确保Flash操作的完整性和正确性,需要在进行写入和擦除操作时禁用全局中断。另外,需要注意在编程Flash之前将Flash与其他外设(如闪存存储器或外部RAM)断开连接,以防止写入数据和相关的操作引起问题。 最后,我们需要注意到内部Flash的寿命。每个Flash单元具备一定的擦除次数和编程次数。因此,在设计中需要谨慎使用Flash的擦除和写入操作。我们可以通过参考产品手册和数据手册了解具体Flash的寿命,并根据实际需求来合理安排Flash的使用。 总结起来,STM32F103C8T6内部Flash读写操作可以使用相关的驱动程序或标准库函数来完成。读取操作可以通过提供要读取的地址和变量的指针来完成,而写入操作需要先解锁Flash、擦除指定的扇区,然后再编程指定的地址。在进行Flash操作时需要注意Flash的寿命和正确的编程步骤。 ### 回答3: STM32F103C8T6是一款基于ARM Cortex-M3内核的高性能微控制器。它内部集成了64KB的闪存(flash),可以用于存储程序代码和数据。 在STM32F103C8T6上进行内部flash读写操作,需要遵循以下步骤: 1. 配置内部flash:在进行读写操作之前,需要将flash解锁并配置为编程状态。通过对FLASH_CR寄存器写入相应的位值,可以进行解锁和配置操作。 2. 擦除flash扇区:在进行写操作之前,需要先擦除相应的flash扇区。每个flash扇区的大小一般为1KB或2KB,在擦除操作中,需要注意只能擦除整个扇区,不能对单个字节进行操作。 3. 写入数据:擦除flash扇区后,可以将数据写入flash。通过对FLASH_AR寄存器写入要写入的数据值,可以实现将数据写入flash。 4. 数据验证:在完成写入操作后,可以进行数据验证。通过将写入的数据与flash中对应位置的数据进行比较,可以确保写入操作的准确性。 需要注意的是,内部flash有一定的寿命,仅能进行有限次数的擦除和写入操作。因此,在进行内部flash读写操作时,需要合理规划擦除和写入的次数,以提高flash的使用寿命。 总结起来,STM32F103C8T6内部flash读写操作需要先配置flash,然后擦除相应扇区,然后写入数据,最后进行数据验证。需要注意合理规划擦除和写入的次数,以延长flash的使用寿命。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值