文章目录
一、学习任务
- 用STM32F103输出一路PWM波形,建议采用定时器方法。野火和网上大多数资源采用此方法,有完整源码。用示波器观察输出波形。
- 用STM32F103的DAC功能完成以下波形输出,用示波器观察波形,并用蜂鸣器或手机耳机收听输出声音效果、感受歌曲的音质差异。
1)输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;
2)将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
提示:首先用音频制作工具如audition制作一段数字化的2khz正弦波wav文件,制作时须指定采样频率、量化位数和通道数,以及时间长度。MCU资源有限,建议采样8khz,量化16bit,单通道,时长仅仅2秒左右。音频wav数据可以用类似汉字字模的保存方式,直接copy到Keil代码中数组中,不必使用SD卡上的wav文件(野火开发板是读取SD卡上的wav文件)。
在成功完成单音音频的还原输出后(示波器观察),再实验转换一首你喜欢的歌曲片段(或者自己唱录一句,如“我还是从前那个少年miya”)为wav文件,进行还原输出。
二、学习内容
1. PWM波形
1.1 PWM简介
PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成 为电力电子技术最广泛应用的控制方式,其应用领域包括测量,通信, 功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些 音频放大器,因此学习PWM具有十分重要的现实意义。 其实我们也可以这样理解,PWM是一种对模拟信号电平进行数字编码 的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个 具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的 任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压 或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去 的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被 断开的时候。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
1.2 相关文件
百度网盘提取
链接:https://pan.baidu.com/s/1BTMl7TN-3Pa1f5VfU9dSOw
提取码:mzbs
下载后找到以下文件夹
1.3 keil查看PWM波形
1.打开工程,具体路径:32-TIM—通用定时器\2-TIM—通用定时器-4路PWM输出\Project\RVMDK(uv5)
2. 配置更改
debug->Use Simulaor
3.编译,调试
4.分析窗口及点击setup
输入GPIOA_IDR.6,选择bit
5.运行查看波形
点击后如果没反应,在点击一次波形就出来了
2. STM32F103的DAC练习
2.1 输出一个周期2khz的正弦波(循环)
1.相关文件
具体路径:38-DAC—输出正弦波\Project\RVMDK(uv5)
根据公式:
选择bsp_dac.c,更改如下:
显示如下:
2.2.数字音频歌曲数据转换为模拟音频波形输出(循环)
1.保存音频文件转换
1.载音乐并在Au上进行转换
选择好起始位置,把持续时间设置为2s,就自动生成了区间
2. 生成数字音频文件
右键区间处->点击存储选区为…
更改采样的类型,完成后保存。
3. 生成正弦波文件
新建音频文件
设置如下:
点击效果,选择生成基本音色
设置如下:
同上保存
2. 用WavToC将音频文件转换为c语言代码
1.打开文件
选择文件,生成代码:
正弦波:
3. 写入代码并用示波器显示输出
将得到的音频代码复制到bsp_dac.c,如下:
波形输出如下: