这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32F4 DAC简单操作【使用库函数】

共5条 1/1 1 跳转至

STM32F4 DAC简单操作【使用库函数】

高工
2013-06-01 13:32:38     打赏

STM32F4的DAC是一个12位,电压输出的DAC。可被配置为12位或者8位,也能和DMA联合使用。DAC具有两个独立转换通道。在双DAC模式下,DA抓换可被配置成独立模式或者同步工作模式。两路DAC参考电压以及ADC都是VREF。

【主要特性】

1、两路  2、12bit时数据可被配置成左对齐或右对齐  3、具有同步更新能力  4、噪声产生  5、三角波产生  6、两个通道独立转换或同步转换  7、每个通道都有DMA能力  8、DMA出错检测 9、可外部触发

输出电压计算公式:

Vout = VREF×DOR/4095 = 参考电压×DAC数据寄存器值/4095

【实验内容】

利用DAC输出指定的电压,软件触发DAC转换。

【初始化要点】

1、GPIO配置成AIN/AN即模拟功能。记着开时钟

void DAC_GPIO_Config(void)
{
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
 
}

2、DAC触发方式设置为软件触发(DAC_Trigger_Software)

void DAC_Config(void)
{
  DAC_GPIO_Config();
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1,&DAC_InitStructure);
 
  DAC_Cmd(DAC_Channel_1,ENABLE);
  DAC_SetChannel1Data(DAC_Align_12b_R,0x0000);
 
  DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
}

3、主函数中使用:

向输出寄存器写数据,数据可根据上边公式得到

DAC_SetChannel1Data(DAC_Align_12b_R,0xF0F0);

然后,然间触发

DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);

这时,在引脚上GPIOA-4上将会有电压输出。

 

当然也可以设置成定时器触发,TIM6和TIM7 是专公DAC转换用的定时器。初始化也很方便。




关键词: STM32F4     简单     操作     使用     函数    

高工
2013-06-02 14:26:04     打赏
2楼
军爷,为什么在F1系列上都不采用片上的DAC呢,大部分都另外设计添加DA模块?

高工
2013-06-02 18:19:46     打赏
3楼
103的z系列是有dac的。跟这个一样,没变化。

高工
2013-06-02 21:25:07     打赏
4楼
我用的ZE就有,可大部分人不直接用片上的,而是另外加个DAC的芯片来实现,不知道为啥

高工
2013-06-02 21:41:06     打赏
5楼
我也发帖问过这个问题。真不想出来这个da能干啥。这里只是试验.....

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]