STM32利用DMA實(shí)現(xiàn)多通道ADC轉(zhuǎn)換程序?qū)嵗齙第1頁
STM32利用DMA實(shí)現(xiàn)多通道ADC轉(zhuǎn)換程序?qū)嵗齙第2頁
STM32利用DMA實(shí)現(xiàn)多通道ADC轉(zhuǎn)換程序?qū)嵗齙第3頁
STM32利用DMA實(shí)現(xiàn)多通道ADC轉(zhuǎn)換程序?qū)嵗齙第4頁
STM32利用DMA實(shí)現(xiàn)多通道ADC轉(zhuǎn)換程序?qū)嵗齙第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、因特網(wǎng)上的許多相似資料顯示了實(shí)用的類型,如總結(jié)或提出不完整的部分,或者沒有注釋說明等,鞋的表面如何放置DMA和ADC,如何收集數(shù)據(jù),如何處理數(shù)據(jù)等。/系統(tǒng)時鐘使用72MHZ未unsigned short AD_Value5=0; /定義為半字節(jié)數(shù)組voircorc_config(void )舉止errorstatushsestartupsatures; /定義枚舉類型變量RCC_DeInit ();RCC_HSEConfig(RCC_HSE_ON )hsestartupsatus=RCC _ watforhsestartup ();if(HSEStartUpStatus=SUCCESS )舉止

2、RCC _ hclkconfigxt (RCC _ sysclk _ div1)RCC_PCLK2Config(RCC_HCLK_Div1)RCC_PCLK1Config(RCC_HCLK_Div2)flash _ sett latency (flash _ latency _2)flash _ prefetchbufercmd (flash _ prefetch buffer _ enable )RCC _ PLC配置(RCC _ pl source _ HSE _ div 1、RCC_PLLMul_9)RCC _ PLL cmd (啟用)while (RCC _ getflagtimes

3、(RCC _ flag _ plr dy )=reset );RCC _ sysclk配置(RCC _ sysclk source _ PLC lk );while(RCC_GetSYSCLKSource ()!=0x08;以下打開/-設(shè)備時鐘-/RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpioa );/RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ usar t1,ENABLE) /安裝串行1和ADC1的時鐘以下void ADC_Start(void )舉止啟動DMA _ cmd

4、(DMA1_通道1,啟用)/DMA通道ADC_SoftwareStartConvCmd(ADC1,ENABLE) /軟件啟動轉(zhuǎn)換以下void DMA_ADC_Config(void )舉止ADC _ inittypedefadc _ init structure;DMA _ inittypedefdma _ init structure;gpio _ inittypedefgpio _ init structure;gpio _ init structure.gpio _ pin=(gpio _ pin _4| gpio _ pin _5| gpio _ pin _6| gpio _ pin

5、_7);gpio _ init structure.gpio _ mode=gpio _ mode _ ain; /模擬輸入GPIO_Init(GPIOA、GPIO_InitStructure )gpio _ init structure.gpio _ pin=(gpio _ pin _0)gpio _ init structure.gpio _ mode=gpio _ mode _ ain; /模擬輸入GPIO_Init(GPIOB、GPIO_InitStructure )安裝RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ ad C1,EN

6、ABLE) ADC1的時鐘插入RCC _ ahbperiphclockcmd (RCC _ ahbperiph _ DMA 1,ENABLE) /dma時鐘將ADC時鐘配置為RCC _ adcclkconfigxt (RCC _ pclk2_ div8) pclk 2的8分頻,即,9MHzDMA_DeInit(DMA1_Channel1) /ADC連接到DMA的通道1DMA _ init structure.DMA _ peripheralbaseaddr=ADC _ dr _ address; /DMA周邊基于ADC的地址DMA _ init structure.DMA _ memrybas

7、eaddr=(u32 ) ad _ value;DMA _ init structure.DMA _ dir=DMA _ dir _ peripherralsrc; /把存儲器作為數(shù)據(jù)傳送目的地DMA _ init structure.DMA _ buffer size=5; /DMA通道的DMA高速緩存大小用于系統(tǒng)的5通道DMA _ init structure.DMA _ per Inc=DMA _ per Inc _ disable; /外圍地址寄存器沒有變更,即地址ADC1-DR沒有變更DMA _ init structure.DMA _ memory Inc=DMA _ memory

8、 Inc _ enable; /內(nèi)存地址寄存器遞增后,數(shù)組AD_Value地址增加DMA _ init structure.DMA _ peripheral datasize=DMA _ peripheral datasize _ half word; /雖然數(shù)據(jù)寬度為16位,但這里特別注意的是選擇了半字節(jié),因此在定義數(shù)組時也必須將其定義為半字節(jié)數(shù)組。 如果不這樣做,數(shù)據(jù)收集就會混亂,很多人投稿資料,但沒有明確記載這些注意事項(xiàng)DMA _ init structure.DMA _ memory datasize=DMA _ memory datasize _ half word; /數(shù)據(jù)寬度為1

9、6位DMA _ init structure.DMA _ mode=DMA _ mode _ circular; /在循環(huán)緩存模式下工作DMA _ init structure.DMA _ priority=DMA _ priority _ high; /DMA信道x具有高優(yōu)先級DMA _ init structure.DMA _ m2m=DMA _ m2m _ disable; /DMA通道x設(shè)置為從非內(nèi)存到內(nèi)存的傳輸DMA_Init(DMA1_Channel1、DMA_InitStructure )/DMA _ it配置(DMA1_ channel 1、DMA_IT_TC、ENABLE )

10、ADC_DeInit(ADC1)ADC _ init structure.ADC _ mode=ADC _ mode _ independent; /ADC操作模式:ADC1和ADC2在獨(dú)立模式下操作ADC _ init structure.ADC _ scanconvmode=enable; /模數(shù)轉(zhuǎn)換在掃描模式下工作ADC _ init structure.ADC _ continuousconvmode=enable; /連續(xù)變換/ADC _ init structure.ADC _ continuousconvmode=disable; /請注意不要使用持續(xù)轉(zhuǎn)換模式。 因?yàn)閮H啟動一次后

11、續(xù)轉(zhuǎn)換也不會停止(CONT清0除外),所以第一次以后的ADC不會以TIM1_CC1啟動ADC _ init structure.ADC _ externaltrigconv=ADC _ externaltrigconv _ none;ADC _ init structure.ADC _ data align=ADC _ data align _ right; /ADC數(shù)據(jù)右對齊ADC _ init structure.ADC _ nbrofchannel=5; /逐次有規(guī)則地變換的ADC通道的數(shù)量ADC_Init(ADC1、ADC _ init structure )根據(jù)在ADC _ init

12、 struct中指定的參數(shù),對周邊ADCx的寄存器進(jìn)行初始化設(shè)置指定/ADC的規(guī)則組通道,并設(shè)置轉(zhuǎn)換順序和采樣時間adc_regularconfig(adc1,ADC _ channel _ 4,1,ADC_SampleTime_239Cycles5 )adc_regularconfig(adc1,ADC _ channel _ 5,2,ADC_SampleTime_239Cycles5 )adc_regularconfig(adc1,ADC _ channel _ 6,3,ADC_SampleTime_239Cycles5 )adc_regularconfig(adc1,ADC _ chan

13、nel _ 7,4,ADC_SampleTime_239Cycles5 )adc_regularconfig(adc1,ADC _ channel _ 8,5,ADC_SampleTime_239Cycles5 )ADC _ externaltriginectedcconvmmd (ad C1,DISABLE )打開對ADC_DMACmd(ADC1,ENABLE) /adc的DMA支持(要實(shí)現(xiàn)DMA功能,必須分別配置DMA通道等參數(shù))可以指定ADC_Cmd(ADC1,ENABLE) /的ADC1復(fù)位ADC_ResetCalibration(ADC1) /校準(zhǔn)寄存器while (ADC _ ge

14、tresetcalibrationtatus (ad C1 ) ); 獲取ADC1復(fù)位校準(zhǔn)寄存器的狀態(tài),設(shè)定狀態(tài)后待機(jī)開始指定ADC _開始校準(zhǔn)(ad C1 ) ad C1的校準(zhǔn)狀態(tài)while (ADC _ getcalibrationtatus (ad C1 ) ); /獲取指定ADC1的校正程序,設(shè)定狀態(tài)后待機(jī)ADC_Start ();以下/數(shù)據(jù)收集處理void ADC_DateProcess(void )舉止無符號載波I,k,h;unsigned int Buf=0;/遞歸推進(jìn)先進(jìn)先出原理ADC collect.pvvoltagebuf 9=get _ channel vale (ADC

15、 _ channel _4)0x fff;ADC collect.battlevoltagebuf 9=get _ channel vale (ADC _ channel _5)0x fff;ADC collect.cirtem1buf 9=get _ channel vale (ADC _ channel _6)0x fff;ADC collect.battlechargecurentbuf 9=get _ channel vale (ADC _ channel _7)0x fff;ADC collect.battledischargecurrentuf 9=get _ channel va

16、le (ADC _ channel _8)0x fff;for(i=0; i9; PS )舉止ADC collect.pvvoltagebuf I =ADC collect.pvvoltagebuf 1i ;ADC collect.battlevoltagebuf I =ADC collect.battlevoltagebuf 1i ;ADC collect.cirtem1buf I =ADC collect.cirtem1buf 1i ;ADC collect.battlechargecurerrentbuf I =ADC collect.battlechargecurerrentbuf 1

17、i ;ADC collect.battledischargecurrentuf I =ADC collect.battledischargecurrentuf 1i ;以下/排序for(k=0; k9; k )/舉止for(h=0; h9 - k; h )/舉止Buf=0;if (ADC collect.pvvoltagebuf h ADC collect.pvvoltagebuf h1 )舉止buf=ADC collect.pvvoltagebuf h1 ;ADC collect.pvvoltagebuf h1 =ADC collect.pvvoltagebuf h ;ADCCollect.PVVoltageBufh=Buf;以下Buf=0;if (ADC collect.battlevoltagebuf h ADC collect.battlevoltagebuf h1 )舉止buf=ADC collect.battlevoltagebuf h1 ;ADC collect.battlevoltagebuf h1 =ADC collect.battlevoltagebuf h ;AD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論