STM32實現(xiàn)DAC輸出的相關(guān)設(shè)置
STM32 DAC簡介
大容量的STM32F103具有內(nèi)部DAC,戰(zhàn)艦STM32選擇的是STM32F103ZET6屬于大容量產(chǎn)品,所以是帶有DAC模塊的。
STM32的DAC模塊(數(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模塊主要特點有:
① 2個DAC轉(zhuǎn)換器:每個轉(zhuǎn)換器對應(yīng)1個輸出通道
② 8位或者12位單調(diào)輸出
③ 12位模式下數(shù)據(jù)左對齊或者右對齊
④ 同步更新功能
⑤ 噪聲波形生成
⑥ 三角波形生成
⑦ 雙DAC通道同時或者分別轉(zhuǎn)換
⑧ 每個通道都有DMA功能
單個DAC通道的框圖如圖24.1.1所示:
圖24.1.1 DAC通道模塊框圖
圖中VDDA和VSSA為DAC模塊模擬部分的供電,而Vref+則是DAC模塊的參考電壓。DAC_OUTx就是DAC的輸出通道了(對應(yīng)PA4或者PA5引腳)。
從圖24.1.1可以看出,DAC輸出是受DORx寄存器直接控制的,但是我們不能直接往DORx寄存器寫入數(shù)據(jù),而是通過DHRx間接的傳給DORx寄存器,實現(xiàn)對DAC輸出的控制。前面我們提到,STM32的DAC支持8/12位模式,8位模式的時候是固定的右對齊的,而12位模式又可以設(shè)置左對齊/右對齊。單DAC通道x,總共有3種情況:
DAC模塊的通道1來輸出模擬電壓,其詳細設(shè)置步驟如下:
1)開啟PA口時鐘,設(shè)置PA4為模擬輸入。
STM32F103ZET6的DAC通道1是接在PA4上的,所以,我們先要使能PORTA的時鐘,然后設(shè)置PA4為模擬輸入(雖然是輸入,但是STM32內(nèi)部會連接在DAC模擬輸出上)。
2)使能DAC1時鐘。
同其他外設(shè)一樣,要想使用,必須先開啟相應(yīng)的時鐘。STM32的DAC模塊時鐘是由APB1提供的,所以我們先要在APB1ENR寄存器里面設(shè)置DAC模塊的時鐘使能。
3)設(shè)置DAC的工作模式。
該部分設(shè)置全部通過DAC_CR設(shè)置實現(xiàn),包括:DAC通道1使能、DAC通道1輸出緩存關(guān)閉、不使用觸發(fā)、不使用波形發(fā)生器等設(shè)置。
4)設(shè)置DAC的輸出值。
通過前面3個步驟的設(shè)置,DAC就可以開始工作了,我們使用12位右對齊數(shù)據(jù)格式,所以我們通過設(shè)置DHR12R1,就可以在DAC輸出引腳(PA4)得到不同的電壓值了。
最后,再提醒一下大家,本例程,我們使用的是3.3V的參考電壓,即Vref+連接VDDA。