dac是stm32系列的乙個基本外設,可以將數碼訊號轉化成模擬訊號,這次我將使用dac來輸出乙個特定波形。
首先確定工作方法,由於我目前在做的簡易示波器在輸出波形的同時還需要顯示輸入訊號,所以不能占用太多cpu時間,於是就選用了基於dma的adc。
使用dma只需告訴dma外設它要怎麼搬移資料就可以處理其他事。
首先定義一下
#define dac_dhr12r1 (u32)&(dac->dhr12r1) //dac data buff
作為dma的外設資料位址
首先是初始化輸出管腳
dac1對應pa4
void w**e_gpio_config(void)//dac!-------pa5
需要注意的是,st官方文件上的說明
一旦使能dacx通道,相應的gpio引腳(pa4或者pa5)就會自動與dac的模擬輸出相連
(dac_outx)。為了避免寄生的干擾和額外的功耗,引腳pa4或者pa5在之前應當設定成模擬輸
入(ain)。
然後是dac外設的初始化
void w**e_dac_config( void)
dac_outputbuffer,即是否使用輸出快取。輸出快取的功能主要用來減小輸出阻抗,是stm32的dac無需外部運放就可以直接驅動負載。(一般不用,因為不確定要求
使用tim2來觸發一次dac,dac的輸出快取有兩個,乙個是dac_dorx ,使用者不能直接寫入,另乙個是dac_dhrx (dac_dhr8rx、 dac_dhr12lx、 dac_dhr12rx、 dac_dhr8rd、
dac_dhr12ld、或者dac_dhr12rd暫存器
)如果沒有選中硬體觸發 ,存入暫存器dac_dhrx的資料會在
乙個apb1時鐘週期後自動傳至暫存器dac_dorx。如果選中硬體觸發 ,資料傳輸在觸發發生以後3個apb1時鐘週期後完成。
下面是tim初始化,tim的工作決定了dma與dac的工作頻率
void w**e_tim_config(u32 w**e1_fre)//tim2 init
預設情況下tim的時鐘頻率為36mhz,經過分頻為36m/((prescaler+1)*clockdivision)。
當計數溢位時就會產生觸發事件,tim_trg
接著是dma的初始化
void w**e_dma_config(uint16_t* w**e)//dma2
對於dma要搞清楚要搬的資料的位址在哪,要搬到哪,這裡要搬的資料在儲存器中,位址為(uint32_t)w**e,外設位址為dac_dhr12r1,是從記憶體到外設,所以工作模式為
dma_dir_peripheraldst,為雙向傳輸,禁止m2m,儲存至儲存。觸發源為tim2最後為總體呼叫
void w**e_init(uint16_t*w**e)
總結:多看官方文件,程式分段寫函式
使用STM32中的DAC生成音訊和波形
dac 為數字 模擬轉換模組,故名思議,它的作用就是把輸入的數字編碼,轉換成對應的模擬電壓輸出,它的功能與 adc相反。在常見的數碼訊號系統中,大部分感測器訊號被化成電壓訊號,而 adc把電壓模擬訊號轉換成易於計算機儲存 處理的數字編碼,由計算機處理完成後,再由 dac 輸出電壓模擬訊號,該電壓模擬...
STM32的PWM和DAC練習
二 dac 總結參考資料 pwm是 pulse width modulation 的縮寫,中文意思就是脈衝寬度調製,簡稱脈寬調變。它是利用微處理器的數字輸出來對模擬電路進行控 制的一種非常有效的技術,其控制簡單 靈活和動態響應好等優點而成 為電力電子技術最廣泛應用的控制方式。stm32f1 除了基本...
STM32的PWM和DAC練習
1.pwm簡介 pwm是 pulse width modulation 的縮寫,中文意思就是脈衝寬度調製,簡稱脈寬調變。它是利用微處理器的數字輸出來對模擬電路進行控 制的一種非常有效的技術,其控制簡單 靈活和動態響應好等優點而成 為電力電子技術最廣泛應用的控制方式。2.原理 脈寬調變 pwm 基本原...