色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          STM32 DAC

          作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          STM32DAC模塊(數(shù)字/模擬轉(zhuǎn)換模塊)是12位數(shù)字輸入,電壓輸出型的DAC。DAC可以配置為8位或12位模式,也可以與DMA控制器配合使用。DAC工作在12位模式時,數(shù)據(jù)可以設(shè)置成左對齊或右對齊。DAC模塊有2個輸出通道,每個通道都有單獨的轉(zhuǎn)換器。在雙DAC模式下,2個通道可以獨立地進(jìn)行轉(zhuǎn)換,也可以同時進(jìn)行轉(zhuǎn)換并同步地更新2個通道的輸出。DAC可以通過引腳輸入?yún)⒖茧妷篤REF+以獲得更精確的轉(zhuǎn)換結(jié)果。

          STM32的DAC模塊主要特點有:

          本文引用地址:http://cafeforensic.com/article/201611/317047.htm

          ①2個DAC轉(zhuǎn)換器:每個轉(zhuǎn)換器對應(yīng)1個輸出通道

          ②8位或者12位單調(diào)輸出

          ③12位模式下數(shù)據(jù)左對齊或者右對齊

          ④同步更新功能

          ⑤噪聲波形生成

          ⑥三角波形生成

          ⑦雙DAC通道同時或者分別轉(zhuǎn)換

          ⑧每個通道都有DMA功能

          使用庫函數(shù)的方法來設(shè)置DAC模塊的通道1來輸出模擬電壓,其詳細(xì)設(shè)置步驟如下:

          1)開啟PA口時鐘,設(shè)置PA4為模擬輸入。

          STM32F103ZET6的DAC通道1在PA4上,所以,我們先要使能PORTA的時鐘,然后設(shè)置PA4為模擬輸入。DAC本身是輸出,但是為什么端口要設(shè)置為模擬輸入模式呢?因為一但使能DACx通道之后,相應(yīng)的GPIO引腳(PA4或者PA5)會自動與DAC的模擬輸出相連,設(shè)置為輸入,是為了避免額外的干擾。

          使能GPIOA時鐘:

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA時鐘

          設(shè)置PA1為模擬輸入只需要設(shè)置初始化參數(shù)即可:

          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入

          2)使能DAC1時鐘。

          同其他外設(shè)一樣,要想使用,必須先開啟相應(yīng)的時鐘。STM32的DAC模塊時鐘是由APB1提供的,所以我們調(diào)用函數(shù)RCC_APB1PeriphClockCmd()設(shè)置DAC模塊的時鐘使能。

          RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);//使能DAC通道時鐘

          3)初始化DAC,設(shè)置DAC的工作模式。

          該部分設(shè)置全部通過DAC_CR設(shè)置實現(xiàn),包括:DAC通道1使能、DAC通道1輸出緩存關(guān)閉、不使用觸發(fā)、不使用波形發(fā)生器等設(shè)置。這里DMA初始化是通過函數(shù)DAC_Init完成的:

          voidDAC_Init(uint32_tDAC_Channel,DAC_InitTypeDef*DAC_InitStruct)

          參數(shù)設(shè)置結(jié)構(gòu)體類型DAC_InitTypeDef的定義:

          typedefstruct

          {

          uint32_tDAC_Trigger;//設(shè)置是否使用觸發(fā)功能

          uint32_tDAC_WaveGeneration;//設(shè)置是否使用波形發(fā)生

          uint32_tDAC_LFSRUnmask_TriangleAmplitude;//設(shè)置屏蔽/幅值選擇器,這個變量只在使用波形發(fā)生器的時候才有用

          uint32_tDAC_OutputBuffer;//設(shè)置輸出緩存控制位

          }DAC_InitTypeDef;

          實例代碼:

          DAC_InitTypeDefDAC_InitType;

          DAC_InitType.DAC_Trigger=DAC_Trigger_None;//不使用觸發(fā)功能TEN1=0

          DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形發(fā)生

          DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;

          DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//DAC1輸出緩存關(guān)閉

          DAC_Init(DAC_Channel_1,&DAC_InitType);//初始化DAC通道1

          4)使能DAC轉(zhuǎn)換通道

          初始化DAC之后,理所當(dāng)然要使能DAC轉(zhuǎn)換通道,庫函數(shù)方法是:

          DAC_Cmd(DAC_Channel_1,ENABLE);//使能DAC1

          5)設(shè)置DAC的輸出值。

          通過前面4個步驟的設(shè)置,DAC就可以開始工作了,我們使用12位右對齊數(shù)據(jù)格式,所以我們通過設(shè)置DHR12R1,就可以在DAC輸出引腳(PA4)得到不同的電壓值了。庫函數(shù)的函數(shù)是:

          DAC_SetChannel1Data(DAC_Align_12b_R,0);

          第一個參數(shù)設(shè)置對齊方式,可以為12位右對齊DAC_Align_12b_R,12位左對齊DAC_Align_12b_L以及8位右對齊DAC_Align_8b_R方式。第二個參數(shù)就是DAC的輸入值了,這個很好理解,初始化設(shè)置為0。

          這里,還可以讀出DAC的數(shù)值,函數(shù)是:

          DAC_GetDataOutputValue(DAC_Channel_1);

          1. //DAC通道1輸出初始化
          2. voidDac1_Init(void)
          3. {
          4. GPIO_InitTypeDef GPIO_InitStructure;
          5. DAC_InitTypeDef DAC_InitType;
          6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA通道時鐘
          7. RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);//使能DAC通道時鐘
          8. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;// 端口配置
          9. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入
          10. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
          11. GPIO_Init(GPIOA,&GPIO_InitStructure);
          12. GPIO_SetBits(GPIOA,GPIO_Pin_4);//PA.4 輸出高
          13. DAC_InitType.DAC_Trigger=DAC_Trigger_None;//不使用觸發(fā)功能 TEN1=0
          14. DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形發(fā)生
          15. DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值設(shè)置
          16. DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//DAC1輸出緩存關(guān)閉 BOFF1=1
          17. DAC_Init(DAC_Channel_1,&DAC_InitType);//初始化DAC通道1
          18. DAC_Cmd(DAC_Channel_1,ENABLE);//使能DAC1
          19. DAC_SetChannel1Data(DAC_Align_12b_R,0);//12位右對齊數(shù)據(jù)格式設(shè)置DAC值
          20. }
          21. //設(shè)置通道1輸出電壓
          22. //vol:0~3300,代表0~3.3V
          23. voidDac1_Set_Vol(u16 vol)
          24. {
          25. floattemp=vol;
          26. temp/=1000;
          27. temp=temp*4096/3.3;
          28. DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右對齊數(shù)據(jù)格式設(shè)置DAC值
          29. }



          關(guān)鍵詞: STM32DA

          評論


          技術(shù)專區(qū)

          關(guān)閉