STM32 CubeMX生成DAC+DMA+TIM生成正弦波

1.首先配置好系统时钟

STM32 CubeMX生成DAC+DMA+TIM生成正弦波_第1张图片STM32 CubeMX生成DAC+DMA+TIM生成正弦波_第2张图片

2.打开DAC

STM32 CubeMX生成DAC+DMA+TIM生成正弦波_第3张图片

3.配置DMA,在DAC中的"DMA Setting"选项卡中添加DMA,DMA模式选择循环模式

STM32 CubeMX生成DAC+DMA+TIM生成正弦波_第4张图片

4.配置定时器,在第二步中选择的是TIM6 ,在第一步中设置的定时器频率是36MHz,这里进行总共12000倍分频,最终结果是3KHz频率.    ( 36000000/1000/12=3000Hz).这里设置的只是DMA的触发频率,

注意:不是正弦波的频率.

STM32 CubeMX生成DAC+DMA+TIM生成正弦波_第5张图片

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

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就是生成的正弦波的频率.

你可能感兴趣的:(STM32笔记)