⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setadc.c

📁 基于stm32f103rb微处理的9路AD采样并上传至can总线
💻 C
字号:
/******************************************************************************/
/* SETUP.C: Setup Functions                                                   */
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2007 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/* development tools. Nothing else gives you the right to use this software.  */
/******************************************************************************/

#include <stm32f10x_lib.h>              /* STM32F10x Library Definitions      */
//#include "UET_GPIO.h"


#define ADC1_DR_Address    ((u32)0x4001244C) //参考编程手册第二章及相关寄存器偏移地址得出


unsigned short int ADC_ConvertedValue[9]={0};
ADC_InitTypeDef   ADC_InitStructure;
DMA_InitTypeDef   DMA_InitStructure;

void SetupADC (void) 
{
  
//  /* Configure PC0-PC5 (ADC Channel10-Channel5) as analog input                             */
//  GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
//  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* DMA Channel1 Configuration ----------------------------------------------*/
  DMA_DeInit(DMA_Channel1);	//将通道1的相关寄存器复位为默认值
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//外设地址
  DMA_InitStructure.DMA_MemoryBaseAddr     = (u32)&ADC_ConvertedValue;//内存地址
  DMA_InitStructure.DMA_DIR                = DMA_DIR_PeripheralSRC;//dma传输方向单向
  DMA_InitStructure.DMA_BufferSize         = 9;//设置DMA在传输时缓冲区的长度 word
  DMA_InitStructure.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;//设置DMA的外设递增模式,一个外设
 
  DMA_InitStructure.DMA_MemoryInc          = DMA_MemoryInc_Enable;//设置DMA的内存递增模式
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据字长 16bits
  DMA_InitStructure.DMA_MemoryDataSize     = DMA_MemoryDataSize_HalfWord;//内存数据字长	 16bits
  DMA_InitStructure.DMA_Mode               = DMA_Mode_Circular;//设置DMA的传输模式:连续不断的循环模式
  DMA_InitStructure.DMA_Priority           = DMA_Priority_High;//设置DMA的优先级别
  DMA_InitStructure.DMA_M2M                = DMA_M2M_Disable;//设置DMA的2个memory中的变量互相访问
  DMA_Init(DMA_Channel1, &DMA_InitStructure);//设置新的通道寄存器值
  
  DMA_Cmd(DMA_Channel1, ENABLE);        /* Enable DMA Channel1                */
  
  /* ADC1 Configuration (ADC1CLK = 12 MHz) -----------------------------------*/
  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       = 9;//9个通道
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 Regular Channel Configuration                                      */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 2, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 3, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 4, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 5, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 6, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 7, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 8, ADC_SampleTime_55Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 9, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 10, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 11, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 12, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 13, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 14, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 15, ADC_SampleTime_55Cycles5);
//  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 16, ADC_SampleTime_55Cycles5);

   /* Enable JEOC interupt */
  ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);

  ADC_DMACmd(ADC1, ENABLE);             /* Enable ADC1's DMA interface        */
  ADC_Cmd   (ADC1, ENABLE);             /* Enable ADC1                        */

  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1)){};

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1)){};


  ADC_SoftwareStartConvCmd(ADC1,ENABLE);/* Start ADC1 Software Conversion     */ 
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -