目录
2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现
ADC采集
ADC配置步骤
- 使能GPIO时钟和ADC时钟,设置引脚为模拟输入
- 设置ADC的分频因子
- 初始化ADC参数,包括ADC工作模式,规则序列等
- 使能ADC并校准
- 触发AD转换,读取AD转换值
STM32F103C8T6的ADC
根据中文参考手册介绍,STM32F103C8T6单片机有2个12位ADC,共有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。
输入通道
内外部共18个,16个GPIO,1个内部温感,1个内部参考电压。
1路ADC(A4 ADC 通道4)
ADC初始化代码:
void Init_adc(void)
{
/*
1. **开启RCC时钟**:包括ADC和GPIO的时钟。
2. **配置GPIO**:将GPIO配置为模拟输入模式。
3. **配置多路开关**:将左边的通道接入到规则组或注入组中。
4. **配置ADC转换器**:设置ADC的工作模式、数据对齐方式、外部触发方式等。
5. **启动ADC和DMA**:调用相关函数使能ADC和DMA,开始数据采集和传输。
*/
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
ADC_DeInit(ADC1); //将外设 ADC1 的全部寄存器重设为缺省值
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE); // 开启RCC时钟
// 配置ADC时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 6分频,72/6
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; // |GPIO_Pin_5
GPIO_Init(GPIOA,&GPIO_InitStruct);//配置GPIO
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; // 持续模式
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 向右对齐模式
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 不使用外部触发模式
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; // 独立ADC模式
ADC_InitStruct.ADC_NbrOfChannel = 1; // 总共两个通道
ADC_InitStruct.ADC_Scan