91视频丝瓜-91视频完整版高清-91视频网-91视频网店-91视频网或将从此无大神-91视频网入口

您好,歡迎訪問上海現(xiàn)易電子元器件有限公司網(wǎng)站!

021-51870898
021-51870898   18019251567
4新聞資訊
您的位置: 首頁 ->  新聞資訊 -> 單片機

?STM32通過DMA采集多通道AD

文章出處:單片機 責(zé)任編輯:上海現(xiàn)易電子元器件有限公司 發(fā)表時間:2020-11-10

環(huán)境:

主機: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配置  

    //獨立工作模式  

    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;  

}  


上海現(xiàn)易電子元器件有限公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

CopyRight 2020-2025 www.urqm.cn All rights reserved   滬ICP備2020031792號

電話

易經(jīng)理

18019251567

微信

易經(jīng)理

易經(jīng)理

頂部

咨詢
主站蜘蛛池模板: 国产国语高清在线视频二区 | 香蕉久久夜色精品国产尤物 | 影音先锋2024色资源网 | 色大片 | 国产精品人妻久久无码不卡 | 欧美又大又粗又爽无码视频 | 日本欧美一区二区三区不卡视频 | 污视频app网址丝瓜视频 | 久见久热 这里只有精品 | 99热这| 五月婷婷色丁香 | 少妇性夜夜春夜夜爽A片 | 免费黄色三级网站 | 亚洲熟女乱色一区二区三区 | 狠狠色丁香婷婷综合视频 | 激情五月 色播五月 | 国产乱码卡二卡三卡43 | 日本午夜片成年www 日本午夜精品 | 国产精品自拍亚洲 | 翁公的巨物挺进了密进 | 免费视频网站在线观看黄 | 久久这里有精品视频 | 日本欧美中文字幕 | 女人18毛片a级毛片 女人扒开屁股爽桶30分钟 | 日本综合欧美一区二区三区 | 在线观看免费av网 | 台湾一级特黄精品大片 | 久久大香萑太香蕉av | 无码AV免费一区二区三区A片 | A片女女女女女女BBBB | 日本高清不卡免费 | 精品日本亚洲一区二区三区 | 最近免费MV在线观看动漫 | 国产午夜爽爽窝窝在线观看 | 免费国产黄网站在线观看动图 | 免费国产在线观看 | 波多野结衣xxxxx在线播放 | 麻豆人妻无码性色AV | 黄色影视 | 亚洲精品色播一区二区 | 精品国产人妻国语 |