使用STM32F103的DAC功能实现音频输出

DAC

DAC全称Digital-Analog-Converter(数字模拟转换器):将数字信号转换为模拟信号。在模拟电路中,电流电压变化是连续的,而数字电路处理的数据都是离散的数据,输出高电平或者低电平,比如5V单片机,引脚输出的电压要么5V要么0V。DAC做的就是输出一个“任意“的电压,当然这个”任意“是有限制的。

Flash地址空间的数据读取

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。
STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器

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

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

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

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

接线

接线

ST-LINK STM32
SWCLK/TC SWCLK/TCK
SWDIO/TMS SWDIO/TMS
GND GND
VCC VCC

4、Keil代码撰写

代码点我呀,求求了
提取码:pmvn
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将事先准备好的flash.c 及flash.h加入到工程中

在main.c文件中添加部分代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编译无误,进行调试

5、调试

进入debug,如果是仿真调试的话,实际操作发现数组没有产生变化。
于是又用STlink又试了一下,以下主要是STlink调试的过程。

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

三、基于flash的提示音播放

结果:
在这里插入图片描述

总结

无言以对,无话可说

版权声明:本文为CSDN博主「华梁碎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/PJCnp/article/details/122137422

一、DAC简介

DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计 算机处理完成后,再由 DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器 件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32具有片上 DAC外设,它的分辨率可配置为 8位或 12位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。

二、建立CubeMX工程

选择芯片
在这里插入图片描述
定时器配置
在这里插入图片描述
管脚配置,对应外设c8t6本身设计好的PC13 LED灯
在这里插入图片描述
对应的GPIO设置(默认就好了)
在这里插入图片描述
设置堆栈大小
在这里插入图片描述

三、keil编写

工程源码链接(主:flash.h文件需要自己重新加入到路径中)
链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn
将事先准备好的flash.c 及flash.h加入到工程中
在这里插入图片描述
在main.c文件中添加部分代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译无误,进行调试

四、STlink调试说明

在这里插入图片描述
在电脑上下载好响应的ST-Link驱动,上电,可以看到STLink在电脑上显示出来了
在这里插入图片描述
可以说明ST-Link 驱动已经安装完成。接下来只需要在 mdk 工程里面配置一下 ST-Link即可。
回到Keil下,在魔法棒Option选项卡进行设置
首先是选择调试器,如果使用的是 ST-Link,在 Debug 选项卡中,请选择ST-Link Debugger,如果你使用的是 JLINK,那么需要选择J-LINK/J-Trace Cortex。
在这里插入图片描述
将程序下载到单片机中
在这里插入图片描述

在view下打开memory1窗口
在这里插入图片描述
打开watch1窗口
在这里插入图片描述
将变量FlashWBuff 和 FlashRBuff加入到 Watch1
在这里插入图片描述
在memory1中输入要观察的地址0x800c000
在这里插入图片描述
运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样
在这里插入图片描述
定义好的句子写到了地址0x0800c000中了
在这里插入图片描述

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

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

建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语言/音乐信号进行实验。
生成单音正弦波
文件—>新建—>音频文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导出注意格式
在这里插入图片描述
用UltraEdit得到相关数据
用UltraEdit打开刚才保存的wav文件
在这里插入图片描述
右键选择区间选定我们要的部分然后去note++里面把每一行开头加上0x,结果部分如下图
在这里插入图片描述
这里借用DAC生成正弦波的例程代码
链接:https://pan.baidu.com/s/18zsQG5mZXbjafPuAJEUkMg
提取码:706i
将内容复制到keil文件对应的位置,在下图红框中进行替换。
在这里插入图片描述

二、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出

选择一段音频
然后后续步骤基本都相同了就不在截图了(记得改采集率)
在这里插入图片描述

版权声明:本文为CSDN博主「苦柠檬ง⍢⃝ ᐝ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52772319/article/details/122116486

一、DAC简介

DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计 算机处理完成后,再由 DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器 件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32具有片上 DAC外设,它的分辨率可配置为 8位或 12位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。

二、建立CubeMX工程

选择芯片
在这里插入图片描述
定时器配置
在这里插入图片描述
管脚配置,对应外设c8t6本身设计好的PC13 LED灯
在这里插入图片描述
对应的GPIO设置(默认就好了)
在这里插入图片描述
设置堆栈大小
在这里插入图片描述

三、keil编写

工程源码链接(主:flash.h文件需要自己重新加入到路径中)
链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn
将事先准备好的flash.c 及flash.h加入到工程中
在这里插入图片描述
在main.c文件中添加部分代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译无误,进行调试

四、STlink调试说明

在这里插入图片描述
在电脑上下载好响应的ST-Link驱动,上电,可以看到STLink在电脑上显示出来了
在这里插入图片描述
可以说明ST-Link 驱动已经安装完成。接下来只需要在 mdk 工程里面配置一下 ST-Link即可。
回到Keil下,在魔法棒Option选项卡进行设置
首先是选择调试器,如果使用的是 ST-Link,在 Debug 选项卡中,请选择ST-Link Debugger,如果你使用的是 JLINK,那么需要选择J-LINK/J-Trace Cortex。
在这里插入图片描述
将程序下载到单片机中
在这里插入图片描述

在view下打开memory1窗口
在这里插入图片描述
打开watch1窗口
在这里插入图片描述
将变量FlashWBuff 和 FlashRBuff加入到 Watch1
在这里插入图片描述
在memory1中输入要观察的地址0x800c000
在这里插入图片描述
运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样
在这里插入图片描述
定义好的句子写到了地址0x0800c000中了
在这里插入图片描述

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

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

建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语言/音乐信号进行实验。
生成单音正弦波
文件—>新建—>音频文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导出注意格式
在这里插入图片描述
用UltraEdit得到相关数据
用UltraEdit打开刚才保存的wav文件
在这里插入图片描述
右键选择区间选定我们要的部分然后去note++里面把每一行开头加上0x,结果部分如下图
在这里插入图片描述
这里借用DAC生成正弦波的例程代码
链接:https://pan.baidu.com/s/18zsQG5mZXbjafPuAJEUkMg
提取码:706i
将内容复制到keil文件对应的位置,在下图红框中进行替换。
在这里插入图片描述

二、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出

选择一段音频
然后后续步骤基本都相同了就不在截图了(记得改采集率)
在这里插入图片描述

版权声明:本文为CSDN博主「苦柠檬ง⍢⃝ ᐝ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52772319/article/details/122116486

DAC

DAC全称Digital-Analog-Converter(数字模拟转换器):将数字信号转换为模拟信号。在模拟电路中,电流电压变化是连续的,而数字电路处理的数据都是离散的数据,输出高电平或者低电平,比如5V单片机,引脚输出的电压要么5V要么0V。DAC做的就是输出一个“任意“的电压,当然这个”任意“是有限制的。

Flash地址空间的数据读取

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。
STM32F1 的闪存(Flash)模块:主存储器、信息块、闪存存储器接口寄存器

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

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

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

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

接线

接线

ST-LINK STM32
SWCLK/TC SWCLK/TCK
SWDIO/TMS SWDIO/TMS
GND GND
VCC VCC

4、Keil代码撰写

代码点我呀,求求了
提取码:pmvn
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将事先准备好的flash.c 及flash.h加入到工程中

在main.c文件中添加部分代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编译无误,进行调试

5、调试

进入debug,如果是仿真调试的话,实际操作发现数组没有产生变化。
于是又用STlink又试了一下,以下主要是STlink调试的过程。

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

三、基于flash的提示音播放

结果:
在这里插入图片描述

总结

无言以对,无话可说

版权声明:本文为CSDN博主「华梁碎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/PJCnp/article/details/122137422

生成海报
点赞 0

华梁碎

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

将音频编解码器添加到嵌入式系统的 5 个技巧

嵌入式系统播放音频的能力正在成为一个相当普遍的功能。音频为用户提供了很好的反馈,但如今有如此多的高保真音频可用,使用哔哔声和啁啾声不再削减它。开发人员当然可以使用分立组件和 DAC 从系统中获得不错的音频&#xff0