STM32實(shí)現(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í),數(shù)據(jù)可以設(shè)置成左對齊或右對齊。DAC模塊有2個(gè)輸出通道,每個(gè)通道都有單獨(dú)的轉(zhuǎn)換器。在雙DAC模式下,2個(gè)通道可以獨(dú)立地進(jìn)行轉(zhuǎn)換,也可以同時(shí)進(jìn)行轉(zhuǎn)換并同步地更新2個(gè)通道的輸出。DAC可以通過引腳輸入?yún)⒖茧妷篤REF+以獲得更精確的轉(zhuǎn)換結(jié)果。
STM32的DAC模塊主要特點(diǎn)有:
① 2個(gè)DAC轉(zhuǎn)換器:每個(gè)轉(zhuǎn)換器對應(yīng)1個(gè)輸出通道
② 8位或者12位單調(diào)輸出
③ 12位模式下數(shù)據(jù)左對齊或者右對齊
④ 同步更新功能
⑤ 噪聲波形生成
⑥ 三角波形生成
⑦ 雙DAC通道同時(shí)或者分別轉(zhuǎn)換
⑧ 每個(gè)通道都有DMA功能
單個(gè)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寄存器,實(shí)現(xiàn)對DAC輸出的控制。前面我們提到,STM32的DAC支持8/12位模式,8位模式的時(shí)候是固定的右對齊的,而12位模式又可以設(shè)置左對齊/右對齊。單DAC通道x,總共有3種情況:
DAC模塊的通道1來輸出模擬電壓,其詳細(xì)設(shè)置步驟如下:
1)開啟PA口時(shí)鐘,設(shè)置PA4為模擬輸入。
STM32F103ZET6的DAC通道1是接在PA4上的,所以,我們先要使能PORTA的時(shí)鐘,然后設(shè)置PA4為模擬輸入(雖然是輸入,但是STM32內(nèi)部會(huì)連接在DAC模擬輸出上)。
2)使能DAC1時(shí)鐘。
同其他外設(shè)一樣,要想使用,必須先開啟相應(yīng)的時(shí)鐘。STM32的DAC模塊時(shí)鐘是由APB1提供的,所以我們先要在APB1ENR寄存器里面設(shè)置DAC模塊的時(shí)鐘使能。
3)設(shè)置DAC的工作模式。
該部分設(shè)置全部通過DAC_CR設(shè)置實(shí)現(xiàn),包括:DAC通道1使能、DAC通道1輸出緩存關(guān)閉、不使用觸發(fā)、不使用波形發(fā)生器等設(shè)置。
4)設(shè)置DAC的輸出值。
通過前面3個(gè)步驟的設(shè)置,DAC就可以開始工作了,我們使用12位右對齊數(shù)據(jù)格式,所以我們通過設(shè)置DHR12R1,就可以在DAC輸出引腳(PA4)得到不同的電壓值了。
最后,再提醒一下大家,本例程,我們使用的是3.3V的參考電壓,即Vref+連接VDDA。