IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F1C8T6音频数据的Flash读取与DAC播放 -> 正文阅读

[嵌入式]STM32F1C8T6音频数据的Flash读取与DAC播放

STM32F1C8T6音频数据的Flash读取与DAC播放

1、Flash简介

FLASH是一种存储芯片,全名叫Flash EEPROM Memory,通地过程序可以修改数据,即平时所说的“闪存”。

闪存其实只是一个笼统的称呼,准确地说它是非易失随机访问存储器(NVRAM)的俗称,特点是断电后数据不消失,因此可以作为外部存储器使用。常用的比如U盘,MP3等。闪存也有不同类型,其中主要分为NOR型和NAND型两大类。之所以称为闪存,是因为读写速度很快。
任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。

Flash的编程原理都是只能将1写为0,而不能将0写为1,所以在进行Flash编程前,必须将对应的块擦除,即将该块的每一位都变为1,块内所有字节变为0xFF。

Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB。全部擦除为1,也就是里面的内容全部都是0xFF了,由于是一下子就擦除了,相对来说,擦除用的时间很短,可以用一闪而过来形容,所以,叫做Flash Memory。中文有的翻译为 (快速)闪存

Nand Flash物理存储单元的阵列组织结构

一个nand flash由很多个块(Block)组成,块的大小一般是128KB,256KB,512KB,此处是128KB。

每个块里面又包含了很多页(page)。每个页的大小,对于现在常见的nand flash多数是2KB,更新的nand flash是4KB,这类的,页大小大于2KB的nand flash,被称作big block,对应的发读写命令地址,一共5个周期(cycle),而老的nand flash,页大小是256B,512B,这类的nand flash被称作small block。地址周期只有4个。

而块,也是Nand Flash的擦除操作的基本/最小单位。

每一个页,对应还有一块区域,叫做空闲区域(spare area)/冗余区域(redundant area),而Linux系统中,一般叫做OOB(Out Of Band),这个区域,是最初基于Nand Flash的硬件特性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做EDC(Error Detection Code)/ECC(Error Code Correction, 或者 Error Checking and Correcting),所以设计了多余的区域,用于放置数据的校验值。

页是Nand Flash的写入操作的基本/最小的单位。

2、利用cubeMX建立过程

前面创建工程就不做过多描述,请参考之前博客

现给出关键地方配置,实在不想后面我会给出整个工程压缩包

定时器配置

在这里插入图片描述

将PC13设置为输出模式

在这里插入图片描述

具体管脚配置

在这里插入图片描述

设置堆栈大小为4k

在这里插入图片描述

工程源码

链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn

3、软件调试

采用STlink仿真器调试

接线说明

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

在keil配置Option选项卡

在这里插入图片描述

进入debug调试

打开内存观察窗口,并在地址栏中输入:0x800c000,观察将要修改的flash区间区容。

在这里插入图片描述

打开变量观察窗口,将变量FlashWBuff 和 FlashRBuff加入到 Watch 1 观察窗口:

在这里插入图片描述

开始运行观察结果

数组FlashRBuff中内容与数组FlashWBuff中内容一样

在这里插入图片描述在这里插入图片描述

在Memory 1窗口中可以看到在FLASH地址0x0800C000区成功写入对应内容

在这里插入图片描述

4、Flash 的提示音 DAC 播放

使用DAC输出周期2Khz的正弦波

打开Audition

新建文件

在这里插入图片描述

点击效果,选着生成音效

在这里插入图片描述

修改如图所示的配置

在这里插入图片描述

设置导出为 wav 文件

在这里插入图片描述

用 UltraEdit 打开刚才保存的wav文件

在这里插入图片描述

CTRL+A,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中

在这里插入图片描述

在这里插入图片描述

选择范围,输入起始的行号和列号

在这里插入图片描述

复制到 notepad++ 中

在这里插入图片描述

添加前缀0x

在这里插入图片描述

在这里插入图片描述

将文本复制到 keil 文件的 uint16_t Sine12bit[] 数组中去,并删掉中括号里面的数据

在这里插入图片描述

编译,烧录,最后用示波器显示波形

使用DAC输出数字音频歌曲变为模拟音频波形输出

使用 Audition 截取一段喜欢的音乐

选择文件,打开自己想要的音乐

选着其中一小段,选着存储选区,更改采用类型

在这里插入图片描述

后面步骤和上面相同。观察波形即可。

5、总结

大致理解了flash读取和DAC转化,因器材不足,没有完成最后的观察任务。

6、参考资料

https://blog.csdn.net/qq_40147893/article/details/107423621

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

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:06:15  更:2022-01-01 14:07:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 4:18:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码