stm32 cubemx dac生成波形
·
前言
DAC代表数字到模拟转换器,顾名思义,它将数字信号转换为模拟形式。介绍一些在STM32中工作的基本DAC。我将使用带有CubeIDE的STM32F103rct6
如下图所示,DAC接受三种整数格式的数据:8位(数据保持寄存器的LS字节)、12位右对齐(数据保持寄存器的12位LS位)和12位左对齐(数据保持寄存器的12位MS位)。在本教程中,我将使用 12 位右对齐数据格式。

这里主要讲生成正弦波。
一、cubemx配置
打开以后触发方式我们选择使用定时器来触发,这样不用cpu参与

我们还需要开启dma,dma要是循环模式而且大小要选择为word

定时器的配置,定时器不需要开启中断哈!

在我的例子中,计时器 2 时钟是 72MHz,这就是将自动重装载的值设定为72-1。时钟将除以该值,得到总共 1 MHz 的频率。这是TIMER 2现在的频率。正弦波频率还取决于我们要采集的样本数量。我稍后会解释这一点。
1M是DAC的最大更新速度,DAC从一个电压变成另外一个电压最大速度为1M,也就是1us。
但是可以超频
二、代码编写
1.变量和函数
uint32_t sine_val[100];
#define PI 3.1415926
void calcsin ()
{
for (int i=0; i<100; i++)
{
sine_val[i] = ((sin(i*2*PI/100) + 1)*(4096/2));
}
}


我们案例中的计时器频率是 1000000Hz,我们在这里采集 100 个样本。因此,正弦波的频率将为 1000000/100 = 1 KHz。
2.主函数
HAL_TIM_Base_Start(&htim2);
calcsin();
HAL_DAC_Start_DMA(&hdac, DAC1_CHANNEL_1, sine_val, 100, DAC_ALIGN_12B_R);
三、频率修改函数
__HAL_TIM_SET_PRESCALER()
__HAL_TIM_SET_PRESCALER(&htim2, 72-1);
该宏用于设置定时器的预分频值。该值定义了计数器时钟的频率。计数器时钟频率(CK_CNT)等于时钟频率(fCK_PSC)除以预分频器加1的值(PSC[15:0] + 1)。
__HAL_TIM_SET_AUTORELOAD();
__HAL_TIM_SET_AUTORELOAD(&htim2, 1000-1);
该宏用于设置定时器的自动重装载值。在向上计数模式中,当计数器值等于该值时,定时器会产生一个更新事件并重新开始计数。
总结
更多推荐

所有评论(0)