STM32F4的DAC是一個12位,電壓輸出的DAC??杀慌渲脼?2位或者8位,也能和DMA聯合使用。DAC具有兩個獨立轉換通道。在雙DAC模式下,DA抓換可被配置成獨立模式或者同步工作模式。兩路DAC參考電壓以及ADC都是VREF。
【主要特性】
1、兩路 2、12bit時數據可被配置成左對齊或右對齊 3、具有同步更新能力 4、噪聲產生 5、三角波產生 6、兩個通道獨立轉換或同步轉換 7、每個通道都有DMA能力 8、DMA出錯檢測 9、可外部觸發(fā)
輸出電壓計算公式:
Vout = VREF×DOR/4095 = 參考電壓×DAC數據寄存器值/4095
【實驗內容】
利用DAC輸出指定的電壓,軟件觸發(fā)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觸發(fā)方式設置為軟件觸發(fā)(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);
然后,然間觸發(fā)
DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
這時,在引腳上GPIOA-4上將會有電壓輸出。
當然也可以設置成定時器觸發(fā),TIM6和TIM7 是專公DAC轉換用的定時器。初始化也很方便。