标签:tco typedef eset rcu 索引 不用 pcl art reset
//==文件adc.h============================================================#ifndef __ADC_H#define __ADC_H#include stm32f0xx.h#define Adc_Channel_Num 4 //ADC通道数目//========各通道在结果列表中的位置===================#define Adc_Data_IS 0#define Adc_Data_Bat 1#define Adc_Data_Vr 2#define Adc_Data_NTC 3//=======AD通道定义==========================================#define ADC_CHANNEL_IS ADC_Channel_5 //电流检测#define ADC_CHANNEL_BAT ADC_Channel_1 //电池电压检测#define ADC_CHANNEL_VR ADC_Channel_0 //电位器通道#define ADC_CHANNEL_NTC ADC_Channel_2 //NTC通道//=========================================extern __IO uint16_t RegularConvData_Tab[Adc_Channel_Num];//extern uint16_t R_AdcResult_Tab[Adc_Channel_Num] ;extern uint32_t Adc_Channel_Tab[Adc_Channel_Num] ;extern uint32 Adc_Index ;extern void ADC_GPIO_Init(void) ;extern void ADC1_Init(void);extern uint16 Adc_Switch(uint32 ADC_Channel) ;extern void Adc_StartSwitch(uint32 ADC_Channel) ;#endif /* __ADC_H *///==文件adc.c============================================================#include global.h #include adc.h/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*/#define ADC1_DR_Address 0x40012440__IO uint16_t RegularConvData_Tab[Adc_Channel_Num]; //adc转换结果表//uint16_t R_AdcResult_Tab[Adc_Channel_Num]; //adc转换结果表-最终取值表uint32_t Adc_Channel_Tab[Adc_Channel_Num]={ADC_CHANNEL_IS,ADC_CHANNEL_BAT,ADC_CHANNEL_VR,ADC_CHANNEL_NTC} ;//adc转换通道表uint32 Adc_Index = 0 ; //adc转换索引/******************************************************************************** 函数名称: ADC_GPIO_Init();* 功能描述: ADC--GPIO输入引脚配置---在此可以设置16路外部输入通道* 输入参数: void* 返回参数: 无********************************************************************************/void ADC_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOA clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //==================VR========================PA4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; // GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //AD无需要上下拉// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 做输入时不用设置速率 GPIO_Init(GPIOA, &GPIO_InitStructure); }/******************************************************************************** 函数名称: ADC1_Init* 功能描述: * 输入参数: void* 返回参数: 无********************************************************************************/void ADC1_Init(void){ ADC_InitTypeDef ADC_InitStruct;// DMA_InitTypeDef DMA_InitStruct; /* ADC1 DeInit */ ADC_DeInit(ADC1); /* ADC1 Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4) ; //时钟分频48M/4=12M 最大时钟不超过14M // /* ADC DMA request in circular mode */ ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular); /* Enable ADC_DMA */// ADC_DMACmd(ADC1, ENABLE); ADC_DMACmd(ADC1, DISABLE); /* Initialize ADC structure */ ADC_StructInit(&ADC_InitStruct); /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits */ ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b; ADC_InitStruct.ADC_ContinuousConvMode = DISABLE ;//ENABLE; ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStruct.ADC_ScanDirection = ADC_ScanDirection_Upward;//ADC_ScanDirection_Backward; ADC_Init(ADC1, &ADC_InitStruct); // /* Convert the ADC1 temperature sensor with 55.5 Cycles as sampling time */ // ADC_ChannelConfig(ADC1, ADC_Channel_TempSensor , ADC_SampleTime_55_5Cycles); // ADC_TempSensorCmd(ENABLE); /* Convert the ADC1 Vref with 55.5 Cycles as sampling time */ ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_55_5Cycles); ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_55_5Cycles); ADC_ChannelConfig(ADC1, ADC_Channel_2 , ADC_SampleTime_55_5Cycles); ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_55_5Cycles); // ADC_VrefintCmd(ENABLE); /* ADC Calibration 校验 */ ADC_GetCalibrationFactor(ADC1); ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Wait the ADCEN falg */ while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN)); /* ADC1 regular Software Start Conv */ ADC_StartOfConversion(ADC1); }/******************************************************************************** 函数名称: Adc_Switch* 功能描述: ADC转换* 输入参数: ADC转换通道标号* 返回参数: 该通道的转换结果********************************************************************************/uint16 Adc_Switch(uint32 ADC_Channel){ ADC1->CHSELR = 0 ; ADC1->CHSELR = (uint32_t)ADC_Channel; //选择通道 /* ADC1 regular Software Start Conv */ ADC_StartOfConversion(ADC1); //启动转换 while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET) ; //等级转换 return ADC_GetConversionValue(ADC1) ; }/******************************************************************************** 函数名称: Adc_StartSwitch* 功能描述: ADC转换* 输入参数: ADC转换通道标号* 返回参数: 该通道的转换结果********************************************************************************/void Adc_StartSwitch(uint32 ADC_Channel){ ADC1->CHSELR = 0 ; ADC1->CHSELR |= (uint32_t)ADC_Channel; //选择通道 /* ADC1 regular Software Start Conv */ ADC_StartOfConversion(ADC1); //启动转换// while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET) ; //等级转换// return ADC_GetConversionValue(ADC1) ; }标签:tco typedef eset rcu 索引 不用 pcl art reset
原文地址:https://www.cnblogs.com/beiyhs/p/11412273.html