微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

一、Flash原理

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。

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

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

①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。

②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码用户选择字节,则一般用于配置写保护、读保护等功能

③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。

二、创建STM32CUBEMX工程

芯片选择F103C8

在这里插入图片描述

配置定时器

在这里插入图片描述

打开外部时钟

在这里插入图片描述

配置时钟

在这里插入图片描述

配置PC13为output对应板子上的LED

在这里插入图片描述


设置堆栈大小为4K,导出

在这里插入图片描述

三、KEIL下的配置

1、代码修改

将flash.c 和flash.h添加到工程中

在这里插入图片描述

在main.c文件添加部分代码

在这里插入图片描述


添加自己的想输入信息,编译无错即可

2、调试

这里需要用到ST-link
连线方式:

在这里插入图片描述


回到Keil下,在魔法棒Option选项卡进行设置
首先是选择调试器,如果使用的是 ST-Link,在 Debug 选项卡中,请选择ST-Link Debugger

在这里插入图片描述


在选择完调试器之后,点击右边的 Setting 按钮
将程序下载到单片机中

在这里插入图片描述

如果右侧IDCODE有显示的话就是连接成功了。然后点击下载按钮可以将程序下载到我们的板子中

在这里插入图片描述


板子连线如下

在这里插入图片描述

在这里插入图片描述


如图所示成功。
现在点击dubug按钮,进入硬件仿真调试

在这里插入图片描述

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

在这里插入图片描述


点击全速运行,可以看到板子上的PC13 LED亮起,然后Memory 1窗口中出现之前存储的数据,证明数据成功写入。断电之后再次上电进行调试,可以看到上次写入的数据还在其中,证明已经将数据写入到flash中

在这里插入图片描述

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

1、DAC简介

DAC为数字/模拟转换模块,顾名思义,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

STM32具有片上DAC外设,它的分辨率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。

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

点击左上角文件,新建,音频文件
采样率2000Hz,声道单声道,位深度16位

在这里插入图片描述


点击效果生成,音调
设置如下

在这里插入图片描述


点击文件,导出,文件
格式设置如下

在这里插入图片描述


完成

3,截取音乐中的音频

随便找一首音乐,点击截取一段音频

在这里插入图片描述

右键,点击存储选取为
点击更改,配置如下

在这里插入图片描述


点击确定完成。
打开软件WavToC,这是一个将WAV文件转化成C语言代码文件
点击右下角的打开文件
选择我们刚才生成的wav文件
点击生成代码,便自动生成代码

在这里插入图片描述


在这里插入图片描述

打开原子哥的DAC输出正弦波的程序
在bsp_dac.c下的函数中,替换内容,就可以输出不同的波形,

在这里插入图片描述

总结

这此实验用AU生成了wav文件,也是参考了大部分的博客,条件有限,也没有用示波器进行观察。但因该是对的。

参考博客

https://blog.csdn.net/m0_58414679/article/details/122221730?spm=1001.2014.3001.5501

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐