STM32F030C8T6 多通道ADC采集

void adc_init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);//配置ADC的时钟频率
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
//ADC-IN:PA4~7    
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;         
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//ADC1配置
ADC_DeInit(ADC1);
ADC_StructInit(&ADC_InitStructure);//结构体初始化里面包含ADC设置,例如AD位,触发模式,转换模式,对齐等
ADC_Init(ADC1, &ADC_InitStructure);
 // ADC Calibration
ADC_GetCalibrationFactor(ADC1);

// Enable the ADC1
ADC_Cmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
}

//得到并返回ADC_index
//ch:ADC通道
uint16_t adc_index_get(uint8_t ch)
{
uint16_t adc_index;
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);

//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
//通道选择寄存器ADC1->CHSELR赋值至关重要,少了没法实现多通道采集
if(ch==4)
{
ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_239_5Cycles);
ADC1->CHSELR =ADC_Channel_4;
}
if(ch= =5)
{
ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_239_5Cycles);
ADC1->CHSELR =ADC_Channel_5;
}
if(ch= =6)
{
ADC_ChannelConfig(ADC1, ADC_Channel_6 , ADC_SampleTime_239_5Cycles);
ADC1->CHSELR =ADC_Channel_6;
}
if(ch= =7)
{
ADC_ChannelConfig(ADC1, ADC_Channel_7 , ADC_SampleTime_239_5Cycles);
ADC1->CHSELR =ADC_Channel_7;
}
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY) == RESET);
ADC_StartOfConversion(ADC1);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)!=1){} //等待ADC转换完成
adc_index = ADC_GetConversionValue(ADC1);
ADC_StopOfConversion(ADC1);
return adc_index;
}
if条件的()里面编辑时多了一个空格,否则编辑时没法正常显示

//多次采样获得平均值
//ch:ADC通道; times:采样次数
uint16_t get_adc_average(uint8_t ch,uint8_t times)
{
uint32_t temp_val = 0;
uint8_t t;
for(t=0; t<times; t++)
{
temp_val += adc_index_get(ch);
delay_ms(5);
}
return (temp_val / times);
}

需要工程的朋友可以去下载:https://download.csdn.net/download/weixin_41623723/12660585

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值