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,点开开始配置:

定时器配置:

STM32F1C8T6音频数据读写和DAC播放

管脚配置:

STM32F1C8T6音频数据读写和DAC播放

设置堆栈大小和项目地址:

[En]

Set the stack size and project address:

STM32F1C8T6音频数据读写和DAC播放

完成这些步骤后,您可以导出。

[En]

After completing these steps, you can export.

2.4代码编辑

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

STM32F1C8T6音频数据读写和DAC播放

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

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

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

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

STM32F1C8T6音频数据读写和DAC播放

然后编译它并继续下一步,不会出错:

[En]

Then compile it and proceed to the next step without errors:

STM32F1C8T6音频数据读写和DAC播放

2.4烧录程序

接线如下图:

J-linkSTM32SWCLK/TCKSWCLK/TCKSWDIO/TMSSWDIO/TMSGNDGNDVCCVCC

连线结果如图所示:

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

然后

STM32F1C8T6音频数据读写和DAC播放

然后点击下载按钮将程序下载到我们的主板上。

[En]

Then click the download button to download the program to our board.

STM32F1C8T6音频数据读写和DAC播放

2.5调试

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

STM32F1C8T6音频数据读写和DAC播放

STM32F1C8T6音频数据读写和DAC播放

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

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

STM32F1C8T6音频数据读写和DAC播放

三、基于flash的提示音播放

6.1生成正弦波数据

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

STM32F1C8T6音频数据读写和DAC播放

然后设置采样率和位深度,八位采样:

[En]

Then set the sampling rate and bit depth, eight-bit sampling:

STM32F1C8T6音频数据读写和DAC播放

然后插入基本音色,这是正弦波:

[En]

Then insert the basic timbre, here is the sine wave:

STM32F1C8T6音频数据读写和DAC播放

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

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

STM32F1C8T6音频数据读写和DAC播放

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

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

然后编辑并下载,看看是否可以观察到预期的正弦波。

[En]

Then edit and download to see if the expected sine wave can be observed.

STM32F1C8T6音频数据读写和DAC播放

参考文献:

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

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

Original: https://blog.csdn.net/qq_53072511/article/details/122231546
Author: ☞天天☜
Title: STM32F1C8T6音频数据读写和DAC播放

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/498413/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球