前言
由定時器6溢出信號作為觸發(fā)信號,,控制DAC1(PA4) 循環(huán)輸出階梯波形信號,DAC1需要的數(shù)據(jù)使用DMA方式提供,。實現(xiàn)下面的波形周期輸出,。 實驗?zāi)康?br> 1.熟悉keil和STM32CubeMX的使用,及下載程序方法。 2.學(xué)習(xí)STM32F407的D/A,、DMA,、定時器的使用
一,、DMA是什么?
DMA:Direct Memory Access 直接內(nèi)存存取 作用:DMA可以不通過CPU將數(shù)據(jù)從一個地址空間復(fù)制到另外一個地址空間,, CPU初始化這個傳輸動作,,傳輸動作本身是由DMA控制器來實行完成。
1.1 DMA傳輸?shù)囊睾吞攸c
DMA傳輸三大要素 ü 傳輸源:DMA控制器從傳輸源讀出數(shù)據(jù),; ü 傳輸目標(biāo): DMA控制器將數(shù)據(jù)傳輸?shù)哪繕?biāo),; ü 觸發(fā)信號:用于觸發(fā)一次數(shù)據(jù)傳輸?shù)膭幼鳎瑘?zhí)行一個單位的傳輸 源至傳輸目標(biāo)的數(shù)據(jù)傳輸,;可以用來控制傳輸?shù)臅r機(jī),。 STM32的DMA特點 ü 傳輸源和傳輸目標(biāo)可以分別是存儲器或片上外設(shè); ü 一次數(shù)據(jù)傳輸?shù)膯挝豢梢詾椋?位,、16位或32位
說白了就是快速搬運數(shù)據(jù)的工具,,不需要CPU來親自搬運。就開始和結(jié)束需要CPU來干預(yù)之外,??梢哉f是非常好用。
二,、STM32CubeMX配置
由定時器6溢出信號作為觸發(fā)信號,,控制DAC1(PA4) 循環(huán)輸出階梯波形信號,DAC1需要的數(shù)據(jù)使用DMA方式提供,。實現(xiàn)下面的波形周期輸出,。
首先我們看要求,一共需要三個STM32資源,,定時器6,,DAC1,DMA,,那就是定時器觸發(fā)DAC轉(zhuǎn)換,,DMA搬運數(shù)據(jù)(從內(nèi)存搬運到外設(shè)) 所以在cube中我們把這三個資源開起來。SYS,和RCC咱就不說了,,都是固定選項 其中定時器6是掛在APB1總線上的,,主頻是84M,所以這也是我分頻8400,10000的裝載值的原因,,這樣算下來就是1秒了,。
2.1 DAC配置
2.2 定時器配置
2.3 DMA配置
在DAC這一欄選擇DMA,選擇循環(huán)模式,,這樣DMA就會一直搬運我們的這個數(shù)據(jù)了,。 到這里我們的配置已經(jīng)結(jié)束,可見用cube來配置,非常的方便快捷
三,、軟件部分
軟件需要編寫的東西也很少,,首先定義一個數(shù)組,分別是0,1241,2482,,分別代表著0V,,1V,2V,。這個大家懂的都懂,。 然后在我們的main函數(shù)里面初始化、一個是定時器開啟,,一個是DMA的啟動函數(shù),,一共需要四個參數(shù)。 第一個是結(jié)構(gòu)體變量,,第二個是通道,,第三個是數(shù)據(jù),第四個是對其方式,。 這四個一個都不能錯,。尤其是數(shù)據(jù),必須是32位的,,因為數(shù)據(jù)寄存器就是32位的,。
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t*)dac_data,3,DAC_ALIGN_12B_R);
四、測試結(jié)果
編譯,,燒錄,。查看測試結(jié)果,我們選擇level 0不優(yōu)化代碼 可以看到是符合實驗要求的,。
總結(jié)
今天的分享到此結(jié)束,,希望能夠幫助到大家,輸出正弦波也是一樣的,,輸出一個正弦波表就行,。有機(jī)會再給大家講。
|