




已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
STM32 ADC多通道轉(zhuǎn)換描述:用ADC連續(xù)采集11路模擬信號(hào),并由DMA傳輸?shù)絻?nèi)存。ADC配置為掃描并且連續(xù)轉(zhuǎn)換模式,ADC的時(shí)鐘配置為12MHZ。在每次轉(zhuǎn)換結(jié)束后,由DMA循環(huán)將轉(zhuǎn)換的數(shù)據(jù)傳輸?shù)絻?nèi)存中。ADC可以連續(xù)采集N次求平均值。最后通過(guò)串口傳輸出最后轉(zhuǎn)換的結(jié)果。程序如下:#include stm32f10x.h /這個(gè)頭文件包括STM32F10x所有外圍寄存器、位、內(nèi)存映射的定義#include eval.h /頭文件(包括串口、按鍵、LED的函數(shù)聲明)#include SysTickDelay.h #include UART_INTERFACE.h#include #define N 50 /每通道采50次#define M 12 /為12個(gè)通道vu16 AD_ValueNM; /用來(lái)存放ADC轉(zhuǎn)換結(jié)果,也是DMA的目標(biāo)地址vu16 After_filterM; /用來(lái)存放求平均值之后的結(jié)果int i;/*GPIO管腳的配置選用ADC的通道0 1 2 8 9 10 11 12 13 14 15,分別對(duì)應(yīng)的管腳為PA0 PA1 PA2 PB0 PB1 PC0 PC1 PC2 PC3 PC4 PC5串口使用USART1其中TX為PA9,RX為PA10 */void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /因?yàn)閁SART1管腳是以復(fù)用的形式接到GPIO口上的,所以使用復(fù)用推挽式輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/PA0/1/2 作為模擬通道輸入引腳 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模擬輸入引腳GPIO_Init(GPIOA, &GPIO_InitStructure);/PB0/1 作為模擬通道輸入引腳 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模擬輸入引腳GPIO_Init(GPIOB, &GPIO_InitStructure);/PC0/1/2/3/4/5 作為模擬通道輸入引腳 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模擬輸入引腳GPIO_Init(GPIOC, &GPIO_InitStructure);/*配置系統(tǒng)時(shí)鐘,使能各外設(shè)時(shí)鐘*/void RCC_Configuration(void) ErrorStatus HSEStartUpStatus; RCC_DeInit(); /RCC 系統(tǒng)復(fù)位 RCC_HSEConfig(RCC_HSE_ON); /開(kāi)啟HSE HSEStartUpStatus = RCC_WaitForHSEStartUp(); /等待HSE準(zhǔn)備好 if(HSEStartUpStatus = SUCCESS) FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /Enable Prefetch Buffer FLASH_SetLatency(FLASH_Latency_2); /Set 2 Latency cycles RCC_HCLKConfig(RCC_SYSCLK_Div1); /AHB clock = SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); /APB2 clock = HCLK RCC_PCLK1Config(RCC_HCLK_Div2); /APB1 clock = HCLK/2 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); /PLLCLK = 12MHz * 6 = 72 MHz RCC_PLLCmd(ENABLE); /Enable PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /Wait till PLL is ready RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /Select PLL as system clock source while(RCC_GetSYSCLKSource() != 0x08); /Wait till PLL is used as system clock source /*使能各個(gè)外設(shè)時(shí)鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 | RCC_APB2Periph_AFIO |RCC_APB2Periph_USART1, ENABLE ); /使能ADC1通道時(shí)鐘,各個(gè)管腳時(shí)鐘/* Configure ADCCLK such as ADCCLK = PCLK2/6 */ RCC_ADCCLKConfig(RCC_PCLK2_Div6); /72M/6=12,ADC最大時(shí)間不能超過(guò)14MRCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/使能DMA傳輸 /*配置ADC1*/void ADC1_Configuration(void) ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1); /將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值/* ADC1 configuration -*/ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC工作模式:ADC1和ADC2工作在獨(dú)立模式ADC_InitStructure.ADC_ScanConvMode =ENABLE;/模數(shù)轉(zhuǎn)換工作在掃描模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;/模數(shù)轉(zhuǎn)換工作在連續(xù)轉(zhuǎn)換模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/外部觸發(fā)轉(zhuǎn)換關(guān)閉ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/ADC數(shù)據(jù)右對(duì)齊ADC_InitStructure.ADC_NbrOfChannel = M;/順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目ADC_Init(ADC1, &ADC_InitStructure);/根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器/* ADC1 regular channel11 configuration */ /設(shè)置指定ADC的規(guī)則組通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間/ADC1,ADC通道x,規(guī)則采樣順序值為y,采樣時(shí)間為239.5周期ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 5, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 6, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 7, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 8, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 9, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 10, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 11, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 12, ADC_SampleTime_239Cycles5 ); / 開(kāi)啟ADC的DMA支持(要實(shí)現(xiàn)DMA功能,還需獨(dú)立配置DMA通道等參數(shù)) ADC_DMACmd(ADC1, ENABLE);/* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /使能指定的ADC1 /* Enable ADC1 reset calibaration register */ ADC_ResetCalibration(ADC1); /復(fù)位指定的ADC1的校準(zhǔn)寄存器/* Check the end of ADC1 reset calibration register */while(ADC_GetResetCalibrationStatus(ADC1);/獲取ADC1復(fù)位校準(zhǔn)寄存器的狀態(tài),設(shè)置狀態(tài)則等待/* Start ADC1 calibaration */ADC_StartCalibration(ADC1);/開(kāi)始指定ADC1的校準(zhǔn)狀態(tài)/* Check the end of ADC1 calibration */while(ADC_GetCalibrationStatus(ADC1);/獲取指定ADC1的校準(zhǔn)程序,設(shè)置狀態(tài)則等待/*配置DMA*/void DMA_Configuration(void)/* ADC1 DMA1 Channel Config */DMA_InitTypeDef DMA_InitStructure;DMA_DeInit(DMA1_Channel1); /將DMA的通道1寄存器重設(shè)為缺省值DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1-DR; /DMA外設(shè)ADC基地址DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; /DMA內(nèi)存基地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /內(nèi)存作為數(shù)據(jù)傳輸?shù)哪康牡谼MA_InitStructure.DMA_BufferSize = N*M; /DMA通道的DMA緩存的大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /外設(shè)地址寄存器不變DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /內(nèi)存地址寄存器遞增DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; /數(shù)據(jù)寬度為16位DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; /數(shù)據(jù)寬度為16位DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /工作在循環(huán)緩存模式DMA_InitStructure.DMA_Priority = DMA_Priority_High; /DMA通道 x擁有高優(yōu)先級(jí) DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; /DMA通道x沒(méi)有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏擠MA_Init(DMA1_Channel1, &DMA_InitStructure); /根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道/配置所有外設(shè)void Init_All_Periph(void)RCC_Configuration();GPIO_Configuration();ADC1_Configuration();DMA_Configuration();/USART1_Configuration();USART_Configuration(9600); /*獲取ADC的值,將二進(jìn)制換算為十進(jìn)制*/u16 GetVolt(u16 advalue) return (u16)(advalue * 330 / 4096); /求的結(jié)果擴(kuò)大了100倍,方便下面求出小數(shù) /*求平均值函數(shù)*/void filter(void) int sum = 0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中提前考試數(shù)學(xué)試卷
- 福建省質(zhì)檢卷數(shù)學(xué)試卷
- 高一年泉州統(tǒng)考數(shù)學(xué)試卷
- 福州初中五月數(shù)學(xué)試卷
- 甘肅15高考數(shù)學(xué)試卷
- 教師課件的制作培訓(xùn)
- 2025年浙江醫(yī)療衛(wèi)生招聘金華義烏市中醫(yī)醫(yī)院招聘4人筆試歷年專業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 2025年年唐都醫(yī)院住培醫(yī)師招錄筆試歷年專業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 2025至2030城市建設(shè)規(guī)劃發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 二一年高考數(shù)學(xué)試卷
- 滲濾液處理應(yīng)急預(yù)案
- 肺部結(jié)節(jié)病例討論范文
- 整本書閱讀《平凡的世界》中職語(yǔ)文高教版(2023-2024)基礎(chǔ)模塊上冊(cè)
- 全冊(cè)背記資料-2024-2025學(xué)年七年級(jí)地理上學(xué)期湘教版
- 買賣合同法律知識(shí)及風(fēng)險(xiǎn)防范培訓(xùn)課件
- 富順縣中醫(yī)醫(yī)院《護(hù)理質(zhì)控手冊(cè)》模版
- 《水工建筑物》課件-模塊四:土石壩
- 貴陽(yáng)市云巖區(qū)2023-2024學(xué)年重點(diǎn)中學(xué)小升初數(shù)學(xué)入學(xué)考試卷含解析
- (完整版)小學(xué)六年級(jí)奧數(shù)應(yīng)用題100道附答案
- GB/T 9799-2024金屬及其他無(wú)機(jī)覆蓋層鋼鐵上經(jīng)過(guò)處理的鋅電鍍層
- 2020年遼寧省普通高中學(xué)業(yè)水平合格性考試地理真題
評(píng)論
0/150
提交評(píng)論