现在的位置: 首页 > 技术文章 > 裸机开发 > 正文

STM32之DAC配置

2013年11月27日 裸机开发 ⁄ 共 1129字 ⁄ 字号 STM32之DAC配置已关闭评论 ⁄ 阅读 2,430 次
stm32

stm32

STM32F103VCT6自带两个12位DAC,DAC的转换速度一直没有查到,网上有人说是1MHZ的频率,那就是1us了。ADC的转换时间在56MHZ工作频率下为1us,在72MHZ工作频率下为1.17us。如果AD和DA有对称关系的话,那么很可能跟ADC的时间相同,刚入手分析的,不见得正确!

  由于我此次使用是DA输出电压。STM32的DAC固定电压配置和波形输出配置相似,不同的地方在于它要多调用一个函数: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);函数就可以发送数据了!!有两点要注意:

1、该函数的第一个参数DAC_Align_12b_R不可依据设置ADC外设地址的方式重写这个地址,因为这个参数是不带基址的,而我们重写地址后一半会把基址算进去,这样就不对了!

2、每次改变发送数据时,要同时调用以下两个函数:

      DAC_SetChannel1Data(DAC_Align_12b_R,4000);

      DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);

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

×