JiZzJiZZ国产免费A_国产午夜成人AV在线播放_亚洲欧美在线观看一区二区_91久久久久精品无嫩草影院_欧美高清一区二区三区_欧美日韩国产码高清_亚洲精品国产电影_亚洲AV无码专区亚洲AV桃
廣告招募

STM32通過DMA采集多通道AD

2025年07月10日 08:42:40      來源:江蘇瑞易通電子科技有限公司 >> 進(jìn)入該公司展臺      閱讀量:1

分享:

環(huán)境:

主機(jī):XP

開發(fā)環(huán)境:MDK4.23

MCU:STM32F103CBT6


說明:

通過腳PA1,PA2采集AD。每路AD采集10次。

#Include "ad_driver.h"  

  

//全局變量  

//AD采樣存放空間  

__IO uint16_t ADCConvertedValue[20];  

  

//函數(shù)  

//初始化AD  

void init_ad(void)  

{  

    ADC_InitTypeDef ADC_InitStructure;  

    DMA_InitTypeDef DMA_InitStructure;  

    GPIO_InitTypeDef GPIO_InitStructure;  

  

    //---------------------充電AD初始化--------------------  

    //啟動DMA時鐘  

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);  

  

    //啟動ADC1時鐘  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);  

  

    //采樣腳設(shè)置  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;  

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  

    GPIO_Init(GPIOA, &GPIO_InitStructure);  

  

    //DMA1通道1配置  

    DMA_DeInit(DMA1_Channel1);  

    //外設(shè)地址  

    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_ADDRESS;  

    //內(nèi)存地址  

    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADCConvertedValue;  

    //dma傳輸方向單向  

    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  

    //設(shè)置DMA在傳輸時緩沖區(qū)的長度  

    DMA_InitStructure.DMA_BufferSize = 20;  

    //設(shè)置DMA的外設(shè)遞增模式,一個外設(shè)  

    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  

    //設(shè)置DMA的內(nèi)存遞增模式  

    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  

    //外設(shè)數(shù)據(jù)字長  

    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  

    //內(nèi)存數(shù)據(jù)字長  

    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  

    //設(shè)置DMA的傳輸模式:連續(xù)不斷的循環(huán)模式  

    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  

    //設(shè)置DMA的優(yōu)先級別  

    DMA_InitStructure.DMA_Priority = DMA_Priority_High;  

    //設(shè)置DMA的2個memory中的變量互相訪問  

    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  

    DMA_Init(DMA1_Channel1, &DMA_InitStructure);  

      

    //使能通道1  

    DMA_Cmd(DMA1_Channel1, ENABLE);  

  

    //ADC1配置  

    //獨(dú)立工作模式  

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  

    //掃描方式  

    ADC_InitStructure.ADC_ScanConvMode = ENABLE;  

    //連續(xù)轉(zhuǎn)換  

    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;  

    //外部觸發(fā)禁止  

    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  

    //數(shù)據(jù)右對齊  

    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  

    //用于轉(zhuǎn)換的通道數(shù)  

    ADC_InitStructure.ADC_NbrOfChannel = 2;  

    ADC_Init(ADC1, &ADC_InitStructure);  

      

    //規(guī)則模式通道配置  

    ADC_RegularChannelConfig(ADC1, ADC_Channel_1 , 1, ADC_SampleTime_239Cycles5);  

    ADC_RegularChannelConfig(ADC1, ADC_Channel_2 , 2, ADC_SampleTime_239Cycles5);  

      

    //使能ADC1的DMA  

    ADC_DMACmd(ADC1, ENABLE);  

      

    //使能ADC1  

    ADC_Cmd(ADC1, ENABLE);  

      

    //使能ADC1復(fù)位校準(zhǔn)寄存器    

    ADC_ResetCalibration(ADC1);  

    //檢查校準(zhǔn)寄存器是否復(fù)位完畢  

    while(ADC_GetResetCalibrationStatus(ADC1));  

      

    //開始校準(zhǔn)  

    ADC_StartCalibration(ADC1);  

    //檢測是否校準(zhǔn)完畢  

    while(ADC_GetCalibrationStatus(ADC1));  

       

    //開啟ADC1的軟件轉(zhuǎn)換  

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);  

}  

  

//獲得充電電壓  

float voltage_charge(void)  

{  

    uint8_t i = 0;  

    uint16_t sum = 0;  

    float v = 0;  

  

    //取得10次充電電壓平均值  

    for (i = 0;i < 10;i++)="">

    {  

        sum += ADCConvertedValue[i * 2];   

    }  

    sum /= 10;  

    //變換成電壓值  

    v = 0.002991 * sum;  

  

    return v;  

}  

  

//獲得放電電壓  

float voltage_discharge(void)  

{  

    uint8_t i = 0;  

    uint16_t sum = 0;  

    float v = 0;  

  

    //取得10次充電電壓平均值  

    for (i = 0;i < 10;i++)="">

    {  

        sum += ADCConvertedValue[i * 2 + 1];   

    }  

    sum /= 10;  

    //變換成電壓值  

    v = 0.002991 * sum;  

  

    return v;  

}  


版權(quán)與免責(zé)聲明:
1.凡本網(wǎng)注明"來源:中美貿(mào)易網(wǎng)"的所有作品,版權(quán)均屬于中美貿(mào)易網(wǎng),轉(zhuǎn)載請必須注明中美貿(mào)易網(wǎng)。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
2.企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
3.本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品來源,并自負(fù)版權(quán)等法律責(zé)任。 4.如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系。

JiZzJiZZ国产免费A_国产午夜成人AV在线播放_亚洲欧美在线观看一区二区_91久久久久精品无嫩草影院_欧美高清一区二区三区_欧美日韩国产码高清_亚洲精品国产电影_亚洲AV无码专区亚洲AV桃