stm32f103c8t6 多通道adc采集电压
时间: 2025-02-19 21:32:24 浏览: 87
### 实现STM32F103C8T6多通道ADC电压采集
对于STM32F103C8T6微控制器而言,其内置的模数转换器(ADC)能够支持多个模拟输入通道的同时采样。为了实现高效的多通道ADC电压采集并确保数据准确性,在初始化阶段需配置好各个参数。
#### 初始化设置
在开始任何ADC操作之前,必须先完成必要的硬件和软件初始化工作。这包括但不限于使能相应的时钟、配置GPIO引脚功能以及设定ADC的工作模式等[^1]。
```c
// 使能所需外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 设置ADC时钟分频因子
// 配置PA1, PA2, PA3作为模拟输入端口
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ADC初始化结构体定义
ADC_CommonInitTypeDef ADC_CommonInitStruct;
ADC_InitTypeDef ADC_InitStruct;
// 共同初始化部分...
ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div2;
ADC_CommonInit(&ADC_CommonInitStruct);
// 单独初始化ADC1...
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_ScanConvMode = ENABLE; // 扫描模式开启
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;// 连续转换关闭
ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStruct.ADC_NbrOfChannel = 3; // 总共三个通道
ADC_Init(ADC1, &ADC_InitStruct);
```
#### 添加通道至序列
接下来要做的就是指定哪些具体的物理引脚对应于哪个逻辑上的ADC通道,并按照期望顺序加入到扫描列表里去。这里假设使用的是PA1 (CH1), PA2(CH2),PA3(CH1)[^2]:
```c
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_239Cycles5);
```
#### 启动转换与读取结果
一旦上述准备工作都已完成,则可以通过调用`ADC_StartConversion()`来触发一次性的AD转换过程;而当所有预定数量的样本都被成功获取之后,就可以利用`ADC_GetConversionValue()`函数取出最终的结果值了。考虑到实际应用场景可能涉及到连续不断的监测需求,因此通常还会配合DMA或者中断机制一起运作以提高效率。
```c
while (1){
// 开始单次转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); // 等待转换结束
uint16_t adc_value_ch1 = ADC_GetConversionValue(ADC1);
printf("Ch1 Value:%d\n", adc_value_ch1);
}
```
以上即为基于STM32F103C8T6平台下执行多路ADC信号捕捉的一个基本框架描述及其对应的编程实践指南。
阅读全文
相关推荐


















