首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32 DAC配置(2)

stm32 DAC配置(2)

void DMA_Configuration(void)


{


       DMA_InitTypeDef            DMA_InitStructure;


      


       DMA_DeInit(DMA2_Channel3);


       DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;


       DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&FIR_OutPutValueTab;


       DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;


       DMA_InitStructure.DMA_BufferSize = 200;


       DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;


       DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;


       DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;


       DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;


       DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;


       DMA_InitStructure.DMA_Priority = DMA_Priority_High;


       DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;


       DMA_Init(DMA2_Channel3, &DMA_InitStructure);



      


       DMA_Cmd(DMA2_Channel3, ENABLE);


      


       DMA_ITConfig(DMA2_Channel3,DMA_IT_TC,ENABLE);


}


注意红色字体写的那行代码,当我们传输多个数据时,需要将其设置为连续转换!其余就不赘述了。


       接下来谈谈DAC固定电压的配置。


       STM32DAC固定电压配置和上面的波形输出配置相似,不同的地方在于它要多调用一个函数:DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);这样才会输出固定的电平。


具体配置如下:



void DAC_VOLTAGE_Configuration(void)


{


       DAC_InitTypeDef            DAC_InitStructure;


       DAC_DeInit();


      


      DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;


      DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;      


      DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;


      DAC_Init(DAC_Channel_1, &DAC_InitStructure);


       //


      


       DAC_Cmd(DAC_Channel_1, ENABLE);


       DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);


}


配置完成后,调用DAC_SetChannel1Data(DAC_Align_12b_R,4000);函数就可以发送数据了!!极其方便。比起5615,0832之流不知简便了多少!有两点要注意:1、该函数的第一个参数DAC_Align_12b_R不可依据设置ADC外设地址的方式重写这个地址,因为这个参数是不带基址的,而我们重写地址后一半会把基址算进去,这样就不对了!(笔者就曾经卡在这里!看来凡事不可先入为主,否则问题迟早会发生。)2、每次改变发送数据时,要同时调用以下两个函数:


       DAC_SetChannel1Data(DAC_Align_12b_R,4000);


       DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);


至于为什么,我的理解是:因为DAC改变数据后并不会立即写入寄存器,需要一次更新,由于不是通过定时器触发来更新,因此就只能通过调用函数的方法来更新。

继承事业,薪火相传
返回列表