1.首先配置好系统时钟
2.打开DAC
3.配置DMA,在DAC中的"DMA Setting"选项卡中添加DMA,DMA模式选择循环模式
4.配置定时器,在第二步中选择的是TIM6 ,在第一步中设置的定时器频率是36MHz,这里进行总共12000倍分频,最终结果是3KHz频率. ( 36000000/1000/12=3000Hz).这里设置的只是DMA的触发频率,
注意:不是正弦波的频率.
5.写一个正弦波生成函数 或者 创建一个数组写入正弦波表用,查表法.都可以网上有很多例子.这里举个正弦波生成函数的例子:
//num:要在一个正弦波中采集多少点
//*D:创建的一个数组用来存放正弦波各个点的数值的
//U:输出电压的峰值(0~1.5V)
//Pi:3.1415926 自己定义
void SineWave_Data( u16 num,u16 *D,float U)
{
u16 i;
for( i=0;i<cycle;i++)
{
D[i]=(u16)((U*sin(( 1.0*i/(num-1))*2*Pi)+U)*4095/3.3);
}
}
6.最后就是在主函数里启动定时器,启动DMA.这用的是正弦波生成函数,要先调用下生成正弦波表.
这里用的是100个点的正弦波表,所以最后生成的正弦波的频率是 ( f=3000/100=30Hz.)
SineWave_Data(100,DualSine12bit,1.2);
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t *)DualSine12bit,DL,DAC_ALIGN_12B_R);
DMA触发一次修改一次DAC的输出值,触发100次完成一个正弦波,故用DMA的触发频率再除以100就是生成的正弦波的频率.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)