个人学习stm32 DMA_AD采集温度

来源:互联网 发布:手机淘宝结算不了 编辑:程序博客网 时间:2024/05/03 11:17
#include "advalue.h"
#include "gpioconfig.h"
#include "stm32f10x_dac.h"
#include  "variable.h"




extern  struct Flag flag;
u32 getADValue[100]={0};
u16 getdata [3]  ={1,2,3};
static DMA_InitTypeDef DMA_InitStructure;
static ADC_InitTypeDef ADC_InitStructure;




void adc_init()
{
    GPIO_InitTypeDef GPIO_InitStructure;  
   NVIC_InitTypeDef NVIC_InitStructure;  


 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // positive rotate signal input
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOC, &GPIO_InitStructure);  //in put
  

    //---------------------??AD???--------------------  
    //DMA1??1??  
    DMA_DeInit(DMA1_Channel1);  
    //????  
    DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)( &(ADC1->DR));  
    //????  
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)getADValue;  
    //dma??????  
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  
    //??DMA??????????  
    DMA_InitStructure.DMA_BufferSize = 20;  
    //??DMA???????,????  
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  
    //??DMA???????  
    DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable;   //    DMA_MemoryInc_Enable;  
    //??????  
    DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Word;  
    //??????  
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; 
    //??DMA?????:?????????  
    DMA_InitStructure.DMA_Mode =DMA_Mode_Circular;          //DMA_Mode_Circular;  
    //??DMA?????  
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;  
    //??DMA?2?memory????????  
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);  
      
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
    //????1  
    DMA_Cmd(DMA1_Channel1, ENABLE);  
  
    //ADC1??  
    //??????  
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  
    //????  
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;  
    //???? 
    ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;  
    //??????  
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  
    //?????  
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  
    //????????  
    ADC_InitStructure.ADC_NbrOfChannel = 1;  
    ADC_Init(ADC1, &ADC_InitStructure);  
   
    //????????  
    ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_71Cycles5);
    
      
    //??ADC1?DMA  
    ADC_DMACmd(ADC1, ENABLE);  
      
    //??ADC1  
    ADC_Cmd(ADC1, ENABLE);  
      
    //??ADC1???????    
    ADC_ResetCalibration(ADC1);  
    //?????????????  
    while(ADC_GetResetCalibrationStatus(ADC1));  
      
    //????  
    ADC_StartCalibration(ADC1);  
    //????????  
    while(ADC_GetCalibrationStatus(ADC1));  
       
    //??ADC1?????  
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);  


 /* Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  /* Enable DMA channel1 IRQ Channel */
 NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
 


 

}


void DMA1_Channel1_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC1))//??1??????
 {  
  DMA_ClearITPendingBit(DMA1_IT_GL1); //????????
flag.DMA_GetOver=1;    
 }

}


0 0
原创粉丝点击