stm32_dac找到一片好的文章和大家分享


1、簡述:

12位數字輸入,電壓輸出,DAC可以配置為8位或12位模式。有2個輸出通道。在雙DAC模式下,兩個通道可以獨立地工作。

 

特殊功能: 噪聲波形生成,三角波形生成,外部觸發轉換,雙DAC同時或者分別轉換;每個通道都有DMA功能;

 

參考電壓:2.4V~ 3.3V

 

因為一旦使能DAC通道,那么相應的GPIO便自動地連接到DAC轉換器,因此,模擬輸出前應該設置成模擬輸入,目的是避免寄生的干擾和額外的功耗;

 

2、函數介紹:

1)缺省函數

DAC_Init();

 

2DAC_Init(DAC_Channel_1,&DAC_InitStructure);初始化函數

DAC_InitTypeDef            DAC_InitStructure;

初始化的設置有四個:

DAC_Trigger:指定所選DAC的觸發源,有9個觸發源可以選擇:

DAC_Trigger_None

DAC_Trigger_T6_TRGO

DAC_Trigger_T8_TRGO

DAC_Trigger_T7_TRGO

DAC_Trigger_T5_TRGO

DAC_Trigger_T2_TRGO

DAC_Trigger_T4_TRGO

DAC_Trigger_Ext_IT9

DAC_Trigger_Software

 

❷DAC_WaveGeneration :指定DAC是否產生噪聲波形,三角波或者不產生以上波形

DAC_WaveGeneration_None

DAC_WaveGeneration_Noise

DAC_WaveGeneration_Triangle

DAC_LFSRUnmask_TriangleAmplitude:如果選擇了產生噪聲波形或者三角波,那么這里可以選擇噪聲波形的LFSRUnMask屏蔽位 或者三角波的最大幅度

DAC_OutputBuffer:指定輸出是否要緩沖一下

DAC_OutputBuffer_Enable

DAC_OutputBuffer_Disable

3DAC_Cmd(DAC_Channel_1,EANBLE); DAC通道使能函數

 

4DAC_DMACmd(DAC_Channel_1,ENABLE)如果要用到DMADAC那么就要使能哪個DAC通道

 

5DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);軟件觸發使能函數,一般單通道時候使用

 

6DAC_DualSoftwareTriggerCmd(ENABLE);如果要同時控制兩個DAC通道,那么就要使能此函數

 

7DAC_Wave GenerationCmd(DAC_Channel_1, DAC_Wave_Noise, ENABLE);波形發生使能函數,可以選擇哪個通道以及噪聲或者三角波波形

 

8DAC_SetChannel1Data(DAC_Align_12b_R, 0x500);

選擇通道1的數據位數和對齊方式,以及具體輸出值。三種對齊數據位方式:

DAC_Align_12b_R  12位右對齊,數值小於4096

DAC_Align_12b_L 12位左對齊,數值小於0XxFFF0

DAC_Align_8b_R 8位右對齊,數值小於256

9DAC_SetChannel2Data(DAC_Align_12b_L, 0x8880);同理(8

 

10DAC_SetDualChannelData(DAC_Align_8b_R, 0x40, 0xF1);同理(8)

 

11u16 DataValue;

DataValue = DAC_GetDataOutputValue(DAC_Channel_1); 得到當前DAC輸出的值

3、具體應用:

3.1 產生一個直流電壓:

GPIOA_04 DAC1 , GPIOA_05 DAC2

1、設置GPIOA_04 05 為模擬輸入;

  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

  GPIO_Init(GPIOA, &GPIO_InitStructure)

 

2、開啟GPIOADAC的時鍾。注意GPIOA的時鍾是在APB2,DAC的時鍾則是在APB1

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

3、配置DAC輸出直流電壓

DAC_InitTypeDef            DAC_InitStructure;

DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;//選擇DAC的觸發輸出,當產生波形時可用定時器觸發

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_SetChannel1Data(DAC_Align_12b_R,4095);//我的板子實際輸出的是3.265v


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM