PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。PWM模式分为两种,PWM1和PWM2,总得来说是差不多,就看你怎么用而已,具体的区别见表格32-1。
1.PWM边沿对齐模式
在递增计数模式下,计数器从0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从0 开始计数并生成计数器上溢事件
在边沿对齐模式下,计数器CNT只工作在一种模式,递增或者递减模式。这里我们以CNT工作在递增模式为例,在中,ARR=8,CCR=4,CNT从0开始计数,当CNT
在中心对齐模式下,计数器CNT是工作做递增/递减模式下。开始的时候,计数器CNT从0 开始计数到自动重载值减1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到1 并生成计数器下溢事件。之后从0 开始重新计数。图32-14是PWM1模式的中心对齐波形,ARR=8,CCR=4。第一阶段计数器CNT工作在递增模式下,从0开始计数,当CNT
(1)我们打开野火给出的官方代码,TIM-通用定时器-4路PWM输出中的工程,其路径如下所示:
(2)我们将其工程编译后,将HEX文件直接烧录到野火开发板当中:
(3)硬件的连接:
我们需要示波器来展示波形,注意硬件的引脚连接
(4)波形展示:
(5)当我们调整工程中波形的占空比时,其波形变为如下所示:
DAC为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。STM32具有片上DAC外设,它的分辨率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发
整个DAC模块围绕框图下方的“数字至模拟转换器x”展开,它的左边分别是参考电源的引脚:、及+,其中STM32的DAC规定了它的参考电压+输入范围为2.4——3.3V。“数字至模拟转换器x”的输入为DAC的数据寄存器“DORx”的数字编码,经过它转换得的模拟信号由图中右侧的“DAC_OUTx”输出。而数据寄存器“DORx”又受“控制逻辑”支配,它可以控制数据寄存器加入一些伪噪声信号或配置产生三角波信号。图中的左上角为DAC的触发源,DAC根据触发源的信号来进行DAC转换,其作用就相当于DAC转换器的开关,它可以配置的触发源为外部中断源触发、定时器触发或软件控制触发。如本章实验中需要控制正弦波的频率,就需要定时器定时触发DAC进行数据转换。
我们打开野火官方代码库中的代码:
根据计算公式就可以知道,将bsp_dac.c中的20改为1126,就可以得到2Khz的正弦波。
然后我们将程序烧录到野火开发板当中,即可得到相应的波形:
(1)首先将歌曲中的一个片段转换为wav格式:
我们首先用Adobe Audition CS6打开一个mp3文件,将其另存为wav格式,其中采样率修改为8000,以满足实现用音频制作工具制作一段数字化的2khz正弦波wav文件:
(2)我们打开刚才转换为wav格式的文件,进行歌曲的片段裁剪,并且裁剪长度为10s:
选择文件保存位置,设置采样频率为8000,单声道,16位
(3)把得到的文件用Ultraedit打开来处理处理音频代码
Ctrl+A全选,选择16进制复制所选视图,新建文件,并且粘贴:
然后再用Ultraedit打开,右键点击选择范围,选择中间代码部分复制到另一个txt文件中保存,然后再用nodepad++打开这个txt文件,点击列块编辑。
变换后如下所示:
然后我们把得到的代码复制到野火的官方模板 DAC输出 中,并且删掉const uint8_t Sine12bit[]函数括号里的参数。编译成功后,进行烧录到板子上即可。