| |
|
开发:
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的编程原理都是只能将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 3、软件调试采用STlink仿真器调试 接线说明
在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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |