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音频数据读写和DAC播放 -> 正文阅读

[嵌入式]STM32F1C8T6音频数据读写和DAC播放

目录

一、题目

二、FLASH地址空间数据读取

2.1FLASH原理

2.2工具

2.3创建CUBEMX工程

2.4代码编辑

2.4烧录程序

2.5调试

三、基于flash的提示音播放

6.1生成正弦波数据

参考文献:


一、题目

1、Flash地址空间的数据读取。stm32f103c8t6只有20KB 内存(RAM)供程序代码和数组变量存放,因此,针对内部Flash的总计64KB存储空间(地址从0x08000000开始),运行一次写入8KB数据,总计复位运行代码4次,将32KB数据写入Flash。并验证写入数据的正确性和读写速率。

2、基于片内Flash的提示音播放程序。

1)实验数据准备:用Adobe audition或goldwave等音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB)。然后编程将其分批次写入stm32f103c8t6芯片内部flash区域。

2)数字音频还原播放任务:编程读取此段音频,通过stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;

提示:建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语音和音乐信号进行实验。

二、FLASH地址空间数据读取

2.1FLASH原理

? ? ?Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。

? ? ?市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。

? ? ?STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器

2.2工具

STM32F103C8T6、STlink
软件:Keil、STM32CubeMX

2.3创建CUBEMX工程

前面的基础步骤还是创建工程,然后选择stm32f103c8,点开开始配置:

定时器配置:

管脚配置:

?设置堆栈大小和工程地址:

?完成这些步骤之后就可以导出了

2.4代码编辑

在导出的文件中添加事先准备好的flash.c文件

?然后在main.c中添加以下代码:

#include "flash.h"
uint8_t FlashWBuff [255];
uint8_t FlashRBuff [255];

然后找到main函数,在里面添加以下代码:

		uint8_t i;
	uint8_t FlashTest[] = "ab ab ab";

?然后编译一下,没有错误进行下一步:

2.4烧录程序

接线如下图:

J-linkSTM32
SWCLK/TCKSWCLK/TCK
SWDIO/TMSSWDIO/TMS
GNDGND
VCCVCC

连线结果如图所示:

连好线之后,连接电脑然后修改debug里面的数据:?

然后

然后点击下载的按钮就可以将程序下载到我们的板子中了

2.5调试

下载好之后就改跳线帽,然后因为要进行调试,所以我们最好设置一个断点便于我们观察,这是是在main.c里的while这里设置的:

一直连接上板子然后进入debug,然后随便选择一个观测窗口进行观测

?然后在右下角的memory1的窗口中输入我们的存储数据地址0x0800c000

?然后点击全速运行,这时候就能观测到板子上的pc13led亮起,然后memory1的窗口中出现代码中存储的数据,而且断点之后再次上电,可以看见上次写入的数据还在其中。说明我们已经将数据写入flash中了。

?

?

三、基于flash的提示音播放

6.1生成正弦波数据

使用Adobe Audition生成正弦波数据,然后新建一个音频文件:

?然后设置采样率和位深度,八位的八比特采样:

再去插入基本音色,这里是正弦波:

最后导出为wab文件,记住,路径一定要是自己能找得到的,因为之后要去打开

生成wav文件之后,用UltraEdit(这个的下载的时候一定要去官网下载,我以因为这个电脑直接中病毒崩溃了)将其打开,下载好后打开ultraedit然后在里面打开文件:

Ctrl+A选择全部然后右键点击选择选择范围,输入12-59列

?

选中需要的数据了,紧接着右键点击然后十六进制复制选定视图,再将十六进制数赋值到notepad++中:

?输入0x即可,注意是在每一列都需要输入一次

?然后将内容复制到keil文件对应的位置,将原有的替换掉即可:

这里借用DAC生成正弦波的例程代码

链接:百度网盘 请输入提取码
提取码:706i

之后编辑下载看是否能观察到预期的正弦波

参考文献:

(76条消息) Flash原理介绍_Reborn Lee-CSDN博客_flash工作原理(76条消息) STM32F103基于片内flash的数据读取与音乐播放_txmnQAQ的博客-CSDN博客

(76条消息) 【嵌入式22】STM32F1C8T6音频数据的Flash读取与DAC播放_噗噗的罐子博客-CSDN博客

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:06:15  更:2022-01-01 14:08:47 
 
开发: 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:29:29-

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