波形发生器是最基本的应用,使用DMA直接从内存调用数据到外设,具有更快的速度、灵活性与可行性,但在配置过程中有些许需要注意的地方。
1.使能DAC
2.使能DMA
3.配置触发源TIM6
4.配置系统时钟
5.生成工程
添加如下代码
/* USER CODE BEGIN Includes */
#include "math.h"//波形绘制数学函数
/* USER CODE END Includes */
/* USER CODE BEGIN PTD */
#define PI 3.1415926
//设置数据集 1024个点
#define WAVE_SIZE 1024
uint16_t wave[WAVE_SIZE];
/* USER CODE END PTD */
/* USER CODE BEGIN 2 */
TIM6->PSC=0;
TIM6->ARR=65535;
int i;
for(i=0;i<WAVE_SIZE;i++)
{
wave[i]=(uint16_t)(2048*sinf(2*PI/WAVE_SIZE*i)+2047);
}
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac1,DAC1_CHANNEL_1,(uint32_t *)wave,WAVE_SIZE,DAC_ALIGN_12B_R);
/* USER CODE END 2 */
(根据CubeMX生成工程的注释,在相应的BEGIN和END之间添加上述代码)
6.结果验证
我们可以看到正弦波输出,波形无误,此时我们可以通过减小分频,提高输出频率
TIM6->PSC=1;
TIM6->ARR=8;
当分频值过小时将无波形输出,此时可以通过减小点数,增加频率
#define WAVE_SIZE 128
当我们升高频率,波形仍为正弦波,但是幅值与设计的并不一致,说明频率高时DAC输出受到影响,幅值衰减
此外DAC直接输出带载能力弱,接入1K电阻到地,发现波形消失,DAC直接输出无法带载