久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11822|回復: 0
打印 上一主題 下一主題
收起左側

STM32F4 ADC多通道轉換DMA傳輸

[復制鏈接]
跳轉到指定樓層
樓主
ID:90014 發表于 2015-9-14 18:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*

        本文件主要是實現ADC底層驅動的實現
*/

/* 包含主要頭文件 */

#include "adc.h"

/* 定義存儲ADC轉換結果的內存 */

uint16_t ADC_Val[4];

/*
        串口1初始化函數
        參數:無
        返回值:無
        波特率:115200
        停止位:1
        奇偶校驗:無
        數據位:8
*/

void USART1_Configuration(void)
{
        /* 定義串口初始化結構體 */
       
        USART_InitTypeDef        USART_InitStructure;
       
        /* 開啟USART1和GPIOA 的時鐘 */
       
        RCC->APB2ENR|=RCC_APB2Periph_USART1;
       
        RCC->AHB1ENR|=RCC_AHB1Periph_GPIOA;
       
        /* GPIOA9/A10 復用模式 */
       
        GPIOA->MODER|=GPIO_Mode_AF<<2*9|GPIO_Mode_AF<<2*10;
       
        /* GPIOA9/A10 復用到USART1--TX/RX */
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
       
        /* 配置USART結構體 */
       
        USART_InitStructure.USART_BaudRate=115200; /* 波特率設置為115200Hz,每秒鐘傳輸115200個二進制位 */
       
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; /* 硬件流失能 */
       
        USART_InitStructure.USART_Mode=USART_Mode_Tx; /* 設置為發送模式 */
       
        USART_InitStructure.USART_Parity=USART_Parity_No; /* 不使用奇偶校驗 */
       
        USART_InitStructure.USART_StopBits=USART_StopBits_1;/* 停止位設置為1位 */
       
        USART_InitStructure.USART_WordLength=USART_WordLength_8b; /* 數據位設置為8位 */
       
        /* 初始化USART1 */
       
        USART_Init(USART1,&USART_InitStructure);
       
        /* 開啟USART1 */
       
        USART_Cmd(USART1,ENABLE);
       
}

/*
        重映射printf
        參數:待傳輸字符,文件指針
        返回值:傳輸完成測字符串
*/

int fputc( int ch , FILE *f )
{
        /* 給USART1->DR 賦值就可以發送 */
       
        USART1->DR=ch;
       
        /* 等到發送完成 */
       
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
       
        /* 返回發送完成的字符 */
       
        return ch;
}

/*
        TIM2初始化函數
        參數:無
        返回值:無
        實現定時1s
        輸出溢出事件
*/

void TIM2_Configuration(void)
{
        /* 定義TIM初始化結構體 */
       
        TIM_TimeBaseInitTypeDef        TIM_TimeBaseStructure;
       
        /* 開啟TIM2的時鐘 */
       
        RCC->APB1ENR|=RCC_APB1Periph_TIM2;
       
        /* 配置TIM結構體 */
       
        TIM_TimeBaseStructure.TIM_ClockDivision=0; /* 時鐘不分割 */
       
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上計數模式 */
       
        TIM_TimeBaseStructure.TIM_Period=9999; /* 進過9999+1個脈沖就會溢出 */
       
        TIM_TimeBaseStructure.TIM_Prescaler=8399; /* 時鐘分頻值為8399+1 */
       
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0; /* 重復計數器設置為 0 */
       
        /* 初始化TIM_TimeBase */
       
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
       
        /* 啟動定時器 */
       
        TIM_Cmd(TIM2,ENABLE);
       
        /* 輸出TIM2溢出事件 */
       
        TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
       
}

/*
        DMA-->>ADC_Memory初始化函數
        參數:無
        返回值:無
*/

void DMA_ADC_Configuration(void)
{
        /* 定義DMA初始化結構體 */
       
        DMA_InitTypeDef        DMA_InitStructure;
       
        /* 開啟DMA時鐘 */
       
        RCC->AHB1ENR|=RCC_AHB1Periph_DMA2;
       
        /* 配置DMA結構體 */
       
        DMA_InitStructure.DMA_Channel = DMA_Channel_2; /* ADC3 在DMA2_Stream0 的通道2 上 */
       
        DMA_InitStructure.DMA_PeripheralBaseAddr =((uint32_t)&ADC3->DR); /* 外設地址 */
       
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)ADC_Val; /* 內存地址 */
       
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; /* 從外設到內存傳輸 */
       
        DMA_InitStructure.DMA_BufferSize =4; /* 傳輸數據量為4 */
       
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;/* 外設地址不變 */
       
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /* 內存地址自增 */
       
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; /* 傳輸單位為16位 */
       
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; /* 傳輸單位為16位 */
       
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; /* 循環傳輸模式 */
       
        DMA_InitStructure.DMA_Priority = DMA_Priority_High; /* 高優先級 */
       
        DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; /* 不使用FIFO */
       
        DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; /* 不使用FIFO */
       
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; /* 存儲器突發單次傳輸 */
       
        DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; /* 外設突發單次傳輸 */
       
        /* 初始化DMA2_Stream0 */
       
        DMA_Init(DMA2_Stream0, &DMA_InitStructure);
       
        /* 啟動DMA */
       
        DMA_Cmd(DMA2_Stream0, ENABLE);
       
}

/*
        ADCC3 配置
        參數:無
        返回值:無
*/

void ADC3_Configuration(void)
{
        /* 定義ADC控制結構體 */
       
        ADC_InitTypeDef        ADC_InitStructure;
       
        ADC_CommonInitTypeDef ADC_CommonInitStructure;
       
        /* 開啟ADC時鐘 */
       
        RCC->APB2ENR|=RCC_APB2Periph_ADC3;
       
        /* 開啟GPIOF時鐘 */
       
        RCC->AHB1ENR|=RCC_AHB1Periph_GPIOF;
       
        /* 初始化GPIOF7/8/9/10 */
       
        GPIOF->MODER|=GPIO_Mode_AIN<<2*7|GPIO_Mode_AIN<<2*8|GPIO_Mode_AIN<<2*9|GPIO_Mode_AIN<<2*10;
       
        /* 初始化所有ADC結構體 */
       
        ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_1; /* 使用DMA 模式1 */
       
        ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent; /* ADC獨立模式 */
       
        ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div2; /* 分頻值為2 */
       
        ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles; /* 轉換速度為5個周期 */
       
        /* 初始化所有ADC */
       
        ADC_CommonInit(&ADC_CommonInitStructure);
       
        /* 初始化所有ADC3結構體 */
       
        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; /* 12位精度 */
       
        ADC_InitStructure.ADC_ScanConvMode = ENABLE; /* 指定的通道掃描使能 */
       
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; /* 啟用連續掃描 */
       
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; /* 不使用外部促發 */
       
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; /* 外部觸發源 定時器1的PWM輸出通道1 */
       
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /* 轉換數據右對齊 */
       
        ADC_InitStructure.ADC_NbrOfConversion =4; /* 轉換的次數 */
       
        /* 初始化ADC3 */
       
        ADC_Init(ADC3, &ADC_InitStructure);
       
        /* 初始化各個通道 */
       
        ADC_RegularChannelConfig(ADC3, ADC_Channel_5, 1, ADC_SampleTime_3Cycles); /* 第5通道的轉換速度第1 */
       
        ADC_RegularChannelConfig(ADC3, ADC_Channel_6, 2, ADC_SampleTime_3Cycles); /* 第6通道的轉換速度第2 */
       
        ADC_RegularChannelConfig(ADC3, ADC_Channel_7, 3, ADC_SampleTime_3Cycles); /* 第7通道的轉換速度第3 */
       
        ADC_RegularChannelConfig(ADC3, ADC_Channel_8, 4, ADC_SampleTime_3Cycles); /* 第8通道的轉換速度第4 */
       
        /* 使能ADC3 DMA的請求 */
       
        ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

        /* Enable ADC3 DMA */
        ADC_DMACmd(ADC3, ENABLE);

        /* Enable ADC3 */
        ADC_Cmd(ADC3, ENABLE);
       
}

                ADC_SoftwareStartConv(ADC3);/* 軟件啟動ADC3轉換 */
                Delay(1000000);
                while(RESET == DMA_GetFlagStatus(DMA2_Stream0,DMA_FLAG_TCIF0)); /* 等待轉換完成 */
                printf("v1=%d\tv2=%d\tv3=%d\tv4=%d\n",ADC_Val[0],ADC_Val[1],ADC_Val[2],ADC_Val[3]);



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产99对白在线播放 | 欧美色噜噜 | 久久99九九 | 日本国产一区 | 日韩免费一级片 | 成人免费av | 免费毛片基地 | 欧美日韩亚洲天堂 | 精品久久久久久久久久久 | 99热亚洲 | 亚洲17p| 糖心vlog精品一区二区 | 日韩午夜在线 | 午夜免费网站 | 美女一级片 | 久久久成人免费视频 | 久久综合爱| 酒色成人网| 毛片av在线 | 成人激情片 | 中文字幕欧美在线 | 永久免费看片在线播放 | 亚洲精品影院 | 无套内谢的新婚少妇国语播放 | 亚洲 欧美 激情 另类 校园 | 亚洲一区二区在线播放 | 欧美在线一区二区 | 香蕉视频一区二区三区 | 日韩欧美一级片 | 成人爽a毛片一区二区免费 www.欧美精品 | 不卡视频在线观看 | 五月天婷婷激情网 | 亚洲精品免费在线 | 中文字幕第一 | 可以免费看黄的网站 | 精品一区二区三区中文字幕 | 亚洲激情久久 | 91精品看片 | 亚洲国产精品自拍 | 一级片久久 | 日韩精品在线免费观看 |