在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    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個通道可以獨立地進行轉(zhuǎn)換,也可以同時進行轉(zhuǎn)換并同步地更新2個通道的輸出。DAC可以通過引腳輸入?yún)⒖茧妷篤REF+以獲得更精確的轉(zhuǎn)換結(jié)果。

    STM32的DAC模塊主要特點有:

    本文引用地址:http://www.biyoush.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)閉
    ×

    “芯”朋友见面大会
    珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>