【嵌入式】STM32基于片内flash进行数据读取和音频播放

(一)片内FLASH的认识

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。大容量产品的 Flash 模块组织结构如图 所示:
在这里插入图片描述
STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。下面我们就来介绍下这些组成部分:
①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是0X08000000, BOOT0、BOOT1 都接 GND 的时候,就是从 0X08000000 开始运行代码的。
②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能,这里我们不做介绍,大家可以百度了解。
③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。
在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。

(二) 如何对闪存进行读取、编程和擦除

STM32F1 可通过内部的 I-Code 指令总线或 D-Code 数据总线访问内置闪存模块,本章我们主要讲解数据读写,即通过 D-Code 数据总线来访问内部闪存模块。为了准确读取 Flash 数据,必须根据 CPU 时钟 (HCLK) 频率和器件电源电压在 Flash 存取控制寄存器 (FLASH_ACR)中正确地设置等待周期数(LATENCY)。当电源电压低于 2.1V 时,必须关闭预取缓冲器。 Flash 等待周期与 CPU 时钟频率之间的对应关系,如图 所示:
在这里插入图片描述
闪存的编程顺序如下
在这里插入图片描述
STM32 的闪存擦除分为两种:页擦除和整片擦除。页擦除过程如下所示:
在这里插入图片描述

(三)基于flash的数据提取

项目创建

打开STM32CubeMX创建工程
在这里插入图片描述
选择芯片,本次实验我选择的是STM32F103C8T6
在这里插入图片描述
引脚配置
在这里插入图片描述

RCC设置
在这里插入图片描述
SYS设置
在这里插入图片描述
NVIC设置,中断配置(保持默认)

在这里插入图片描述

时钟树设置
在这里插入图片描述
工程设置
设置堆栈的大小,
在这里插入图片描述
导出代码,并将先准备好的flash.c 及flash.h加入到工程中
在这里插入图片描述
在这里插入图片描述
打开keil添加成功
在这里插入图片描述
打开main.c加入下列代码
在这里插入图片描述
在这里插入图片描述
编译成功在这里插入图片描述

电路连接

连接ST-link
在这里插入图片描述
Debug设置
在这里插入图片描述
在这里插入图片描述

调试

点击下载把程序下载到板子上:
在这里插入图片描述

(四)基于flash的提示音播放

新建音频文件
在这里插入图片描述
插入正弦波
在这里插入图片描述
另存为wab文件
在这里插入图片描述
生成wav文件之后,用UltraEdit将其打开,Ctrl+A选择全部然后右键点击选择选择范围
在这里插入图片描述
在这里插入图片描述
复制到notepad++里打开

在这里插入图片描述
直接用DAC生成正弦波的工程
然后将生成得到的数据粘贴进入数组即可(记得修改数组大小)

数据粘贴后编译
在这里插入图片描述

烧录,可以采用示波器观察

(五)实验心得

由于时间紧任务重,只能先做到这里了,以后可能会补充。

(六)参考链接

https://blog.csdn.net/zhanglifu3601881/article/details/96632971
https://blog.csdn.net/lushoumin/article/details/87694389

UltraEdit软件破解版:
https://pan.baidu.com/s/1K1yGM9SxsfopXxs3DAttzg
下载密码: 5p5v
工程下载链接:
链接:https://pan.baidu.com/s/15SqVhOrC54GLS7Yoyvk1EA
提取码:1234

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
养老院心率检测数据采集单元是一种能够采集养老院中老年人心率数据的设备。基于嵌入式stm32的养老院心率检测数据采集单元,可以实现以下功能: 1. 采集老年人的心率数据,反映老年人的身体状况。 2. 将采集的心率数据通过无线通信方式传输到数据处理中心,以便进一步分析和处理。 3. 实时监测老年人的心率情况,及时发现异常情况并进行处理。 以下是基于嵌入式stm32的养老院心率检测数据采集单元的设计和实现步骤: 1. 硬件设计 硬件设计包括选型、原理图设计、PCB设计等步骤。 选型:选择适合该应用场景的芯片和传感器。在该应用场景中,需要选择一款能够采集心率数据的传感器,同时需要选择一款适合嵌入式系统的芯片。 原理图设计:按照选型结果,设计出符合要求的电路原理图。 PCB设计:根据原理图设计结果,进行PCB布局和布线,最终生产出符合要求的PCB板。 2. 软件设计 软件设计包括嵌入式软件和上位机软件。 嵌入式软件:主要包括采集心率数据数据存储、数据传输等功能模块,其中心率数据采集模块是整个系统的核心。通过该模块采集到的心率数据,可以进行后续的数据处理和分析。 上位机软件:主要用于接收并处理从嵌入式设备传输过来的心率数据,并将处理结果进行展示。上位机软件可以使用多种编程语言进行开发,如C++,Python等。 3. 系统测试 在完成硬件和软件设计之后,需要进行系统测试,以确保系统能够正常工作。系统测试主要包括功能测试和性能测试两部分。 功能测试:测试系统的各个功能模块是否正常工作,如数据采集、数据传输等。 性能测试:测试系统的性能指标,如采样频率、传输速率等是否达到要求。 总之,基于嵌入式stm32的养老院心率检测数据采集单元的设计和实现需要涉及到硬件设计、软件设计和系统测试等多个方面。在设计和实现过程中,需要考虑到实际应用场景和用户需求,并根据需求进行相应的优化和改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值