歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

STM32之DAC配置基礎教程

STM32F103VCT6自帶兩個12位DAC,DAC的轉換速度一直沒有查到,網上有人說是1MHZ的頻率,那就是1us了。ADC的轉換時間在56MHZ工作頻率下為1us,在72MHZ工作頻率下為1.17us。如果AD和DA有對稱關系的話,那麼很可能跟ADC的時間相同,剛入手分析的,不見得正確!

  由於我此次使用是DA輸出電壓。STM32的DAC固定電壓配置和波形輸出配置相似,不同的地方在於它要多調用一個函數:DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);這樣才會輸出固定的電平。

STM32之DAC配置基礎教程
 

具體配置如下: 

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改變數據後並不會立即寫入寄存器,需要一次更新,由於不是通過定時器觸發來更新,因此就只能通過調用函數的方法來更新。

Copyright © Linux教程網 All Rights Reserved