STM32
直播中

刘伟

7年用户 1613经验值
私信 关注
[问答]

怎样用STM32的DAC功能去完成波形输出呢

怎样用STM32F103去输出一路PWM波形呢?

怎样用STM32的DAC功能去完成波形输出呢?

回帖(1)

张飞雄

2021-11-19 10:06:24
  一、用STM32F103输出一路PWM波形
  1、打开下载好的工程文件
  
  
  
  
  2、编译生成HEX文件
  
  3、之后我们将生成的HEX文件烧录到stm32板子中,之后将板子连接示波器,输出效果:
  二、用STM32的DAC功能完成波形输出
  (1)STM32F103的DAC功能输出一个周期2khz的正弦波
  因为我们需要输出正弦波,而计算机只能够识别一个一个的点,所以我们需要先对正弦波进行采样,取出一定的点放到数组中,再去执行输出代码。我在这里采用Matlab进行采样点的获取。
  1、首先我们找到野火配套资料里的 38-DAC—输出正弦波 工程文件,将其打开,找到如下文件,用matlab打开:
  
  2、将程序修改一下
  
  3、将代码修改如下:
  %用于产生正弦数据表,输出到文件dac_sinWave.c 文件中,复制到c语言数组即可n = 2*pi/3600 : 2*pi/3600 : 2*pi %分成3600等份a = sin(n)+1; %求取sin函数值并向上平移一个单位,消除负数值a = a * 3.3/2; %调整幅值,使范围限制为0~3.3 r = a* (2.^12) /3.3 %求取dac数值,12位dac LSB = 3.3/2.^12 r = uint16(r); %把double型数据转化成16位整型数据 for i = 1:32 if r(i) 》 4095 %限制数据最大不超过4095 r(i) = 4095endend dlmwrite(‘dac_sinWave.c’,r); %把数据写入到文件,方便添加到stm32工程中plot(n,r,‘。’) %把这些点画出来
  4、运行修改之后的脚本,便会生成3600个取样点,将这些取样点全部复制下来。
  
  5、然后打开 DAC-输出正弦波 的工程keil文件
  
  6、将复制的全部粘贴到 uint16_t Sine12bit 数组中:
  
  7、然后对main函数进行编译生成hex文件,之后将hex文件烧录到板子中,将板子与示波器连接,示波器显示如图:
  8、连接上蜂鸣器
  连接好后,就可以让蜂鸣器发出声音。
  (2)用STM32F103的DAC功能将一段数字音频歌曲数据转换为模拟音频波形输出
  1、首先我们打开 Adobe Audition 软件,在里面选择我们之前电脑上下载的一首歌曲进行打开,得到如下界面:
  
  2、截取其中一小段
  
  
  3、用下载的UltraEdit软件打开这个wav文件
  
  打开后如下:
  
  4、全选,然后选择十六进制复制试图,然后新建一个文件,再粘贴上去
  
  5、全选,然后选择“选择范围”
  
  列号选择12到59
  
  
  6、打开 notepad++ 软件,将以上复制的内容粘贴进去,在其中插入 ,0x 生成如下文件:
  
  7、打开刚刚的正弦波工程文件,然后将文本复制进uint16_t Sine12bit[]数组中去
  
  8、然后生成的hex文件烧录到板子中去,将板子和示波器连接好,打开示波器便可观察到我们截取音乐片段的模拟音频波形。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分