前言
任务:
1、用STM32F103输出一路PWM波形,建议采用定时器方法。
2、用STM32F103的DAC功能完成以下波形输出,用示波器观察波形,并用蜂鸣器或手机耳机收听输出声音效果、感受歌曲的音质差异。
1)输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;
2)将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
器材:野火-指南者(stm32-F103VE) 、示波器
软件:Adobe Audition 、UltraEdit
一、输出PWM波形
1、程序
打开野火自带的资料,找到PWM输出波形工程文件
这个程序的主程序很简单,有兴趣可以去看看教程,尝试自己修改一下。
2、软件仿真
注意:如果你的GPIOA_IDR.1不能得到正确结果,请尝试修改后面的数字,我是3还是4成功的。这是由于我参考的博客接口与我程序接口不一样。
硬件运行
我们把程序烧录到芯片中,使用示波器进行波形观测
二、输出正弦波
1、硬件
STM32 的 DAC 外设有固定的输出通道,分别为 PA4 和 PA5,不过,指南者开发板已经在板载 SPI-FLASH 芯片中使用了这两个引脚,所以用作 DAC 通道输出电压时会受到干扰,影响实验,
PA5 引脚连接到 FLASH 芯片的 CLK 引脚中,这可能会干扰 DAC 实验输出的电压信 号,导致得不到正确的波形。经测试,在进行本实验时,只要不使用 SPI-FLASH,DAC可以输出正常的波形,所以 DAC 和 SPI-FLASH 不在同一个实验中使用即可。在设计 DAC 专门的实际应用时,DAC 的输出通道应独占,不与其它设备共用。本开发板的设计是考虑到各种资源分配,才不得不占用 DAC 通道的。实验时直接使用示波器测量 PA4 和 PA5 引脚的输出即可
2、软件
(1)输出周期计算
在实际中,我们可以通过工程里的正弦波点数和定时器配置生成特定频率的正弦波,这里我们需要输出一个周期为2kHz的正弦波,通过计算公式,我们可以得到,一共需要3600个采样点
(2)因为我们需要输出正弦波,而计算机只能够识别一个一个的点,所以我们需要先对正弦波进行采样,取出一定的点数放到数组中,再去执行输出代码。
这里我们可以利用Matlab进行采样点的获取。
首先,我们使用Matla打开以下文件
将程序修改为
(3)打开野火自带的DAC输出代码,找到以下语句,将刚才生成的采样点替换。
3、验证
将程序编译烧录进开发板,验证结果。
我们可以看到输出了一个周期为2kHz的正弦波
然后我们将输出接上蜂鸣器,可以听到滴滴滴的声音,因为频率太小,所以蜂鸣器发生可能听不清,只有很小的声音
三、数字音频歌曲数据转换为模拟音频波形输出
1、生成数组
(1)在电脑上下载自己喜欢的音乐,mp3格式,然后用Adobe Audition打开。
(2)持续时间设置为3s
(3)数字音频文件生成
设置完成后保存,然后用UE打开wav文件
全选用十六进制复制代码到新建文件里面。然后复制到notepad里面
然后在里面加入0x和,
2、验证
将生成的16进制数组如上一个实验一样替换到程序里。
然后编译,下载,运行。