单通道配置
单通道就比较简单了,并且Duck不比用DMA,这里正好讲解一下,STM32内部自带的一个温度传感器。
adc.c
#include "adc.h"
void Adc_Init(void){
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1/*|RCC_APB2Periph_GPIOB*/, ENABLE);
//如果用的是温度传感器则不需要初始化引脚,反之则必须
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
// GPIO_Init(GPIOB, &GPIO_InitStructure);
/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
//这个参数用来指定转换是扫描(多通道模式)还是单个转换(单通道模式)
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
//ADC转换可以在一次转换后停止,然后再次触发后进行下一次转换;也可以是持续不断地转换下去。
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
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_TempSensorVrefintCmd(ENABLE);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}