forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

周巍
2024-04-11 91ef77c00ed797b1048c5187f416e351e646a009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
/******************************************************************************
 * Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD.
 *
 *-----------------------------------------------------------------------------
 * File:                 DMA.c
 * Description:        initialize DMA config code
 * Author:              Lishoujian (867693272@qq.com)
 * Date:                Jan 8, 2015
 *****************************************************************************/
 
/* ----------------------- Platform includes --------------------------------*/
#include "dma.h"
#include "stm32f10x_rcc.h"
 
 
uint16 SendBuff[1000];
 
/******************************************
 * func:    DMA_Configuration
 * desc:    Initialize DMA
 * input:   none
 * output:  none
 * return:  none
 *****************************************/
          
void DMA_Configuration(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    ADC_InitTypeDef  ADC_InitStructure; 
    GPIO_InitTypeDef GPIO_InitStructure;     
    
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);    //Enable DMA
    
    DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;  //DMA peripheral base address
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;  //DMA memory base address
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  
    DMA_InitStructure.DMA_BufferSize = DMA_bufsize;  //DMA  send buffer size
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;  
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);  
 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE |RCC_APB2Periph_ADC1, ENABLE);//enbale adc channel clock 
 
    RCC_ADCCLKConfig(RCC_PCLK2_Div4);//72M /6 = 12M ;adc max sample frequence <= 14MHZ
    
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;//
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOB, &GPIO_InitStructure);    
 
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9;   //power
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO¿ÚËÙ¶ÈΪ50MHz
  GPIO_Init(GPIOE, &GPIO_InitStructure);        
  GPIO_SetBits(GPIOE,GPIO_Pin_9);
 
 
    ADC_DeInit(ADC1);//reset adc1
 
    ADC_InitStructure.ADC_Mode                =  ADC_Mode_Independent;    //ADC1 work mode:independent
    ADC_InitStructure.ADC_ScanConvMode        =  DISABLE;    //single channel mode
    ADC_InitStructure.ADC_ContinuousConvMode  =  ENABLE;    //
    ADC_InitStructure.ADC_ExternalTrigConv    =  ADC_ExternalTrigConv_None;    //triggered by software
    ADC_InitStructure.ADC_DataAlign           =  ADC_DataAlign_Right;    //ADC data align right
    ADC_InitStructure.ADC_NbrOfChannel        =  1;
    ADC_Init(ADC1, &ADC_InitStructure);//init adc1 register
  
    ADC_DMACmd(ADC1, ENABLE);
    
    ADC_Cmd(ADC1, ENABLE);//enbale adc1
    
    ADC_ResetCalibration(ADC1);//reset & calibrate adc1
     
    while(ADC_GetResetCalibrationStatus(ADC1));//waiting for ending
    
    ADC_StartCalibration(ADC1);//open calibrating adc1
 
    while(ADC_GetCalibrationStatus(ADC1));//waiting for ending
    
    ADC_RegularChannelConfig(ADC1, 9, 1, ADC_SampleTime_1Cycles5 );        
}