娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

學習STM32的ADC轉(zhuǎn)換,在開發(fā)板上寫程序調(diào)試。

四個任務(wù):

四個任務(wù):

1.AD以中斷方式(單次)采集一路

2.AD以中斷方式連續(xù)采集四路

3.ADC多路采集,DMA傳輸,DMA深度為一級

4.ADC以DMA方式采集四路,每路DMA深度為28級,并濾波,說明濾波原理


總結(jié):

第一個任務(wù)

:ADC以中斷方式采集一路ADC,通過配置ADC_InitStructure結(jié)構(gòu)體中的ADC_ScanConvMode,它規(guī)定模數(shù)轉(zhuǎn)換工作在掃描模式(多通道)還是單次模式(單通道),

ADC_InitStructure.ADC_ScanConvMode=DISABLE,為單通道單次模式。

ADC_ContinuousConvMode,定轉(zhuǎn)換是連續(xù)還是單次,ADC_ContinuousConvMode=DISABLE

為單次,ADC_NbrOfChangnel規(guī)定ADC規(guī)則轉(zhuǎn)換的通道數(shù)。ADC_NbrOfChannel=1;//開啟1個通道數(shù)。


ADC_RegularChannelConfig(ADC1,ADC_Channel_13, 1,ADC_SampleTime_55Cycles5);設(shè)置指定規(guī)則組的通道的采樣順序和轉(zhuǎn)換時間。這里以為只有一路通道,采用的是PC3引腳,對應(yīng)的通道數(shù)是13通道,采樣順序也就是1,。

ADC_Cmd(ADC1,ENABLE);使能ADC

ADC_ITConfig(ADC1, ADC_IT_EOC,ENABLE);開啟ADC轉(zhuǎn)換結(jié)束中斷。

ADC_ResetCalibration(ADC1);//重置校驗寄存器

while(ADC_GetResetCalibrationStatus(ADC1)); //等待重置校驗成功

ADC_StartCalibration(ADC1);//開始ADC校驗

while(ADC_GetCalibrationStatus(ADC1));//等待ADC校驗好

ADC_SoftwareStartConvCmd(ADC1, ENABLE);//軟件觸發(fā)開始轉(zhuǎn)換

因為ADC有一個16位的規(guī)則組數(shù)據(jù)寄存器(ADC_DR),采用一路轉(zhuǎn)換時可以不用通過DMA傳輸。這里就沒有配置DMA。

void ADC_IRQHandler(void)

{

       ADCConvertedValue=ADC_GetConversionValue(ADC1); 

       ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);            

}

當一次轉(zhuǎn)換結(jié)束,DAC產(chǎn)生中斷,在中斷函數(shù)里,讀取ADC_DR寄存器中的值,一定清除中斷標志位。


采集出來的數(shù)據(jù)是16進制數(shù),要經(jīng)過處理,變成10進制數(shù),具體如下:

(value*100/4096)*33,value是從寄存器讀出來的十六進制的數(shù)據(jù),經(jīng)過此變換后就變成10進制數(shù),是個整數(shù),我們通過串口顯示的時候要把小樹部分也要顯示出來則有:((value*100/4096)*33)/1000,整數(shù)部分。


((value*100/4096)*33)00/100,((value*100/4096)*33)0/10),小數(shù)部分,

串口配置,我是通過STM32上的串口1與PC機通訊的,具體配置如下:

void USART_Configuration(void)

{

       USART_InitTypeDef USART_InitStructure;

       USART_InitStructure.USART_BaudRate=9600;波特率9600

     USART_InitStructure.USART_WordLength=USART_WordLength_8b;//8位數(shù)據(jù)位

     USART_InitStructure.USART_StopBits=USART_StopBits_1;1個停止位

     USART_InitStructure.USART_Parity=USART_Parity_No;無奇偶校驗

     USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;       USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

       USART_Init(USART1,&USART_InitStructure);初始化串口配置

       USART_Cmd(USART1,ENABLE);使能串口

}

int fputc(int ch,FILE *f)

{

       USART_SendData(USART1, (u8)ch);

       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)//檢查發(fā)送是否完成

       {

       }

       return ch;

}此函數(shù),是把printf輸出函數(shù)定向到USART。


第一個任務(wù)大概就是這個過程,在后面的任務(wù)有相同之處,就不重復敘述了。

第二個任務(wù):ADC以中斷方式連續(xù)采集四路。


首先配置4路模擬輸入,我配置的是PC0、PC1、PC2、PC3四個IO口,輸入方式為模擬輸入,速度采用2M,它們對應(yīng)的ADC通道分別是10、11、12、13通道。


在第一個任務(wù)說了,ADC規(guī)則轉(zhuǎn)換多路采樣時,ADC的數(shù)據(jù)寄存器只有一個16位寄存器,所以必須采用DMA來傳輸數(shù)據(jù),DMA配置如下:

DMA_InitStructure.DMA_PeripheralBaseAddr=DR_ADDRESS; //DMA對應(yīng)的外設(shè)基地址

DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&Buf; //內(nèi)存存儲基地址,定義的一個數(shù)組

DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; //DMA轉(zhuǎn)換模式為SRC模式,由外設(shè)搬移到內(nèi)存

DMA_InitStructure.DMA_BufferSize=4; // DMA緩存大小,4個(設(shè)置DMA在傳輸時緩沖區(qū)的長度)

DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; //接收一次數(shù)據(jù)后,設(shè)備地址禁止后移(設(shè)置DMA的外設(shè)遞增模式)

DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; //關(guān)閉接收一次數(shù)據(jù)后,目標內(nèi)存地址后移(設(shè)置DMA的內(nèi)存遞增模式)

DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//定義外設(shè)數(shù)據(jù)長度

DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;

//循環(huán)模式開啟,Buf寫滿后,自動回到初始地址開始傳輸

DMA_InitStructure.DMA_Priority=DMA_Priority_High;//優(yōu)先級高

DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;

ADC配置:

//ADC配置

       ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//獨立轉(zhuǎn)換模式

     ADC_InitStructure.ADC_ScanConvMode=ENABLE;//開啟掃描模式

     ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//開啟連續(xù)轉(zhuǎn)換模式

     ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//ADC外部開關(guān),關(guān)閉狀態(tài)

     ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//對齊方式,右對齊方式

     ADC_InitStructure.ADC_NbrOfChannel=4;//開啟通道數(shù),4個

       ADC_Init(ADC1,&ADC_InitStructure);//初始化ADC

       ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_55Cycles5);

       ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_55Cycles5);

       ADC_RegularChannelConfig(ADC1, ADC_Channel_12,3,ADC_SampleTime_55Cycles5);

       ADC_RegularChannelConfig(ADC1,ADC_Channel_13,4,ADC_SampleTime_55Cycles5);;

       //ADC通道組,第10、11、12、13個通道,采樣順序分別是1,2,3,4轉(zhuǎn)換時間55.5個周期

       ADC_DMACmd(ADC1, ENABLE);//使能ADC1模塊DMA

       ADC_Cmd(ADC1, ENABLE);//打開ADC1

       ADC_ResetCalibration(ADC1);//重置ADC1校準寄存器

       while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校準重置完成

       ADC_StartCalibration(ADC1);//開始ADC1校準

       while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校準完成

       ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能ADC1軟件開始轉(zhuǎn)換

中斷是采用DMA中斷,當DMA第一輪傳輸結(jié)束時,設(shè)一個標志位,當標志位為1時,表明第一輪轉(zhuǎn)化和傳輸完成,此時就可以讀取數(shù)組中的數(shù)據(jù),經(jīng)過處理就可以通過串口顯示出來。


void DMAChannel1_IRQHandler(void)

{         

              ADC_DMA_OK=1;

              DMA_ClearITPendingBit(DMA1_IT_TC1);              

}中斷函數(shù)。


第二個任務(wù)大概就這樣子。

第三個任務(wù):AD以DMA方式采集一路,DMA深度為一級。

這個任務(wù)不難,關(guān)鍵要理解到DMA深度,用自己的語言來理解哈DMA深度吧,當ADC以一路采集時,ADC轉(zhuǎn)換完成就自動把轉(zhuǎn)換結(jié)果通過DMA傳給目的地址,如果傳輸一次結(jié)束DMA就產(chǎn)生中斷的話,DMA的深度就為一級,如果連續(xù)傳輸N次,DMA的深度就位N級,當然這個N是又范圍的,因為受目的地址的內(nèi)存大小控制和數(shù)據(jù)寬度,這個大家應(yīng)該豆明白的。


這個任務(wù)在第一個任務(wù)的基礎(chǔ)上我通過DMA傳輸,意思是AD配置沒什么區(qū)別。DMA配置和第二個任務(wù)的區(qū)別就是DMA_BufferSize的寬度不同。


#define DR_ADDRESS   (u32)0x4001244c ADC的地址

#define DMA_Count    1   DMA深度,也就是連續(xù)傳輸?shù)拇螖?shù)

#define ADC_Channle 1 ADC通道

數(shù)據(jù)處理和串口通訊這里不重復敘述。DMA中斷和任務(wù)二的類似。

第四個任務(wù):AD以DMA方式采集四路,每路DMA深度為128級,并濾波,說明濾波原理。


這個任務(wù)和是個綜合性任務(wù),只要弄懂前面三個任務(wù),難點是再如何濾波,開始的時候我也不知道怎么濾波,同事提醒我才知道怎么濾波的,我大概說哈我的理解,把四路通道采集的數(shù)據(jù)分別放到四個數(shù)組中,然后給他來個排序,降序,升序都行,把首位兩個數(shù)丟掉,然后加起來求平均值。但是我這里因為DMA的深度為128級,也就是四個通道分別采樣了128次,大家都知道,數(shù)據(jù)越多,求平均值就越準確,所以我就沒有采用什么排序法了,直接給他們分別求平均值,具體如下:


#define DR_ADDRESS   (u32)0x4001244c ADC的地址

#define DMA_Count    128   DMA深度,也就是連續(xù)傳輸?shù)拇螖?shù)

#define ADC_Channle 4 ADC通道

       for(i=0;i<(ADC_Channle*DMA_Count);i+=4)

                     {                  

                            Value1[j]=Buf[i+0];

                            Sum1+=Value1[j];                      

                            Value2[j]=Buf[i+1];

                            Sum2+=Value2[j];                      

                            Value3[j]=Buf[i+2];

                            Sum3+=Value3[j];

                            Value4[j]=Buf[i+3];

                            Sum4+=Value4[j];

                            j++;

                     }           

              Valu1=Sum1/DMA_Count;

              Valu2=Sum2/DMA_Count;

              Valu3=Sum3/DMA_Count;

              Valu4=Sum4/DMA_Count;

              Delay(100000);     

              printf("rn當前AD_0值:0x%x,電壓值:%d.%d%dVnr",

              Valu1,((Valu1*100/4096)*33)/1000,((Valu1*100/4096)*33)00/100,((Valu1*100/4096)*33)0/10);

[1] [2]
關(guān)鍵字:stm32  ADC  DMA傳輸 引用地址:stm32 ADC全解(單次,連續(xù)DMA傳輸)

上一篇:教你如何使用stm32發(fā)送一幀數(shù)據(jù)(結(jié)構(gòu)體中的數(shù)據(jù))
下一篇:Stm32-SWD下載調(diào)試配置

推薦閱讀

全球混合云數(shù)據(jù)管理領(lǐng)域的權(quán)威企業(yè)NetApp(納斯達克股票代碼:NTAP)今日宣布與DreamWorks開展合作,開發(fā)并指導這家工作室使用的定制Data Fabric方法,該方法旨在幫助這家總部位于格倫代爾的家庭娛樂行業(yè)領(lǐng)導者拓展業(yè)務(wù)能力,推動未來的業(yè)務(wù)發(fā)展。 NetApp的工程師與DreamWorks的IT團隊密切合作,對Data Fabric進行了優(yōu)化,滿足了工作室對數(shù)據(jù)存儲和數(shù)據(jù)...
程序運行后,出現(xiàn)錯誤,但是沒有顯示錯誤位置,不知道錯誤在哪,請問怎么讓錯誤信息顯示?Clean: Deleting intermediary and output files.Clean: Deleted file "E:PIC chengxulesson3lesson3_1.cce".Clean: Done.Executing: "d:BINPICC.EXE" -C -E"lesson3_1.cce" "lesson3_1.c" -O"lesson3_1.obj" -Zg9 -O -ASMLIST -Q -MPLAB -16F...
雖然沒能出現(xiàn)在昨晚Mate40發(fā)布會的PPT中,但華為在官方商城低調(diào)上線了Mate 30E Pro 5G手機,并確認其改用了麒麟990E芯片。麒麟990E的“動刀”思路和用在Mate40標準版上的麒麟9000E基本相同,CPU和基帶部分并未做調(diào)整,主要是GPU和NPU做了變動。  具體來說,麒麟990E的GPU是14核Mali-G76,NPU為大核+微核的雙核達芬奇架構(gòu)。對比之下,麒麟990...
隨著越來越多的國內(nèi)芯片設(shè)計公司的崛起和終端廠商加入造芯大軍,國內(nèi)IP產(chǎn)業(yè)正迎來一個難得的機遇。但是,擁有巨大的市場只能算一個起點,只有長期的積累和穩(wěn)定的輸出才能真正迎來最終的突破。IP市場的盛世隨著全球半導體產(chǎn)業(yè)的景氣度不斷提升,整個IC設(shè)計市場也持續(xù)快速增長,根據(jù)SIA公布的數(shù)據(jù),2020年全球IC銷售額為4390億美元,同比增長6.5%。作為IC設(shè)...

史海拾趣

問答坊 | AI 解惑

手機電路識別

在手機的維修當中,電路的識別對初學者來說是一個難點,尤其是許多初學者面對一個又一個的原理工作圖,往往束手無策,不知道怎樣查找電路?如何有效的利用電路圖分析電路?在手機中許多故障的排除都要對電路進行透徹的分析,才能找到故障點,從而排 ...…

查看全部問答∨

雙端口SRAM在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用

介紹一個實際使用中的數(shù)據(jù)采集系統(tǒng).本系統(tǒng)通過雙端口SRAM的應(yīng)用,解決了主機與外設(shè)(這里指數(shù)據(jù)采集板)之間由于速度不一致造成的系統(tǒng)運行的"瓶頸"問題.…

查看全部問答∨

請問哪位有用FPGA實現(xiàn)FFT的資料

請問哪位大哥有用FPGA實現(xiàn)FFT的詳細點的資料?看到的資料太粗了,實在是不知道咋搞了,先謝過了!!!!…

查看全部問答∨

關(guān)于譯碼器鍵盤

里面有protues仿真和keil程序 3-8譯碼器8個I/O掃40個鍵 4-16譯碼器8個I/O口64個鍵…

查看全部問答∨

做DSP最應(yīng)該懂得157個問題(精華轉(zhuǎn))

文章寫得挺不錯的,采用一問一答的形式,都是些使用DSP進行系統(tǒng)設(shè)計時常見問題的歸納!和大家分享一下!…

查看全部問答∨

尋址方式與指令系統(tǒng)

單片機第八課(尋址方式與指令系統(tǒng)) 通過前面的學習,我們已經(jīng)了解了單片機內(nèi)部的結(jié)構(gòu),并且也已經(jīng)知道,要控制單片機,讓它為我們干學,要用指令,我們已學了幾條指令,但很零散,從現(xiàn)在開始,我們將要系統(tǒng)地學習8051的指令部份。 一、概述 1 ...…

查看全部問答∨

微機各個數(shù)字電路是同時工作的還是依次工作的?

書上好象說是依次工作的,比如程序計數(shù)器先指向并讀取第n條指令后,后面的電路才會解釋執(zhí)行該命令.但從另一方面說,似乎微機的各個部件是基于同一個時鐘脈沖觸發(fā)而工作的,這又意味著各個數(shù)字部件是同時(同步)工作的.那么,各個部件到底是同時還是依次工 ...…

查看全部問答∨

請問高手們,eeprom的讀寫次數(shù)是否可以想辦法查到?

請問高手們,eeprom的讀寫次數(shù)是否可以想辦法查到? 多謝~!…

查看全部問答∨

第一次做東西的本科小弟求救:有關(guān)GPRS通信問題

系統(tǒng)實現(xiàn)的功能:將位置信息和指令通過GPRS發(fā)送給PC,pc根據(jù)收到的信息返回相關(guān)信息。實現(xiàn)這些功能至少需要哪些硬件?開發(fā)價格大概在多少?需要準備哪些知識(我現(xiàn)在只有數(shù)模電基礎(chǔ):(我會加油學的))? 由于實在是水平和知識所限,以前有沒有經(jīng) ...…

查看全部問答∨

修改的USB虛擬串口程序,只給PC發(fā)數(shù)據(jù),如何提高速度?

我的程序只修改了,keil例子中USB虛擬串口程序的main()函數(shù),請問怎么才能獲得100k/s以上的速度啊?我的只有10k左右。 CDC類的極限速度是多少啊? keil是3.5版本的,例子中的緩沖區(qū)參數(shù)應(yīng)該是64。 main()如下: int main(void) { ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 红原县| 赤水市| 汶川县| 宁陵县| 崇信县| 台南县| 武穴市| 米泉市| 长葛市| 墨脱县| 无为县| 盐城市| 吐鲁番市| 兴化市| 利川市| 徐汇区| 五莲县| 布拖县| 班戈县| 民乐县| 广昌县| 泸州市| 剑川县| 隆子县| 德阳市| 永丰县| 耿马| 新竹市| 红桥区| 探索| 灵石县| 通道| 紫阳县| 元阳县| 南岸区| 宁德市| 常熟市| 镶黄旗| 新平| 蒙自县| 江门市|