有人使用STM32G431芯片做DAC应用,具体来说就是通过DMA将数据从指定内存传送给DAC数据寄存器,并由定时器触发DAC转换。他发现总是没法实现该功能。这里简单介绍下相关实现过程,并做些提醒。这里要演示的基本功能就是让DAM将内存数据周期性传输给DAC数据寄存器,最后输出一路正弦波。
结合STM32G4芯片的特性,这里可以有两种实现方式。
第一种,DMA的请求来自于DAC1的转换事件。第二种,DMA的请求来自于定时器事件,下面用到的是定时器的更新事件。这里就两种实现方式的配置及相关用户代码简单介绍下,以供参考。
我们先看第一种方式,即DMA请求来自DAC转换事件,定时器3触发DAC的转换。
使用CubeMx进行配置,主要配置如下:
完成配置后生成初始代码,再添加下面代码即可验证测试:
#define Tpai (2*3.14159)
uint32_t PData[200],Dac_data;
uint16_t i;
for (i=0;i<200;i++)
{
PData[i]=
(uint32_t ) (2000*(sin((Tpai/200)*i))+2000);
} //prepare data for DAC
HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t*)&