stm32f103c8t6多路ADC采集光敏电阻
时间: 2025-04-07 19:02:40 浏览: 35
### STM32F103C8T6多路ADC采集配置
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,其内置有多个ADC模块,可以用于模拟信号的数字化处理。为了实现多路ADC采集并连接光敏电阻,需要完成硬件电路设计以及软件初始化设置。
#### 硬件部分
在硬件上,光敏电阻通过分压电路接入MCU的ADC输入端口。每一路光敏电阻对应一个ADC通道。需要注意的是,光敏电阻的阻值变化范围较大,在选择分压电阻时应考虑匹配合适的电压范围以充分利用ADC分辨率[^1]。
#### 软件配置
以下是使用HAL库进行多路ADC采集的一个基本流程:
1. **启用相关外设时钟**
需要开启GPIO和ADC所需的时钟资源。
2. **配置GPIO引脚模式**
将要用作ADC输入的GPIO引脚配置为模拟输入模式。
3. **初始化ADC参数**
设置采样时间、转换顺序等参数,并使能连续转换模式或多通道扫描模式。
4. **启动DMA传输(可选)**
如果数据量大或者实时性要求高,则可以通过DMA方式自动读取ADC结果寄存器中的数值到内存缓冲区中去。
5. **编写中断服务程序或轮询获取数据**
下面给出一段简单的示例代码来展示上述过程:
```c
#include "stm32f1xx_hal.h"
// 定义全局变量存储 ADC 值
uint16_t adc_values[NUMBER_OF_CHANNELS];
void MX_ADC_Init(void){
ADC_HandleTypeDef hadc;
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启 GPIOA 的时钟
/* 配置 PA0,PA1,...作为模拟输入 */
GPIO_InitTypeDef gpio_init_structure;
gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1;
gpio_init_structure.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA,&gpio_init_structure);
__HAL_RCC_ADC1_CLK_ENABLE(); // 启动 ADC1 时钟
hadc.Instance=ADC1;
hadc.Init.ScanConvMode = ENABLE; // 扫描模式打开
hadc.Init.ContinuousConvMode = ENABLE;// 连续转换模式打开
hadc.Init.NbrOfConversion = NUMBER_OF_CHANNELS; // 设定转换数目
hadc.Init.DiscontinuousConvMode = DISABLE;
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.Resolution = ADC_RESOLUTION_12B;
if(HAL_ADC_Init(&hadc)!=HAL_OK){while(1);}// 初始化失败则死循环等待
}
int main(){
uint8_t i;
HAL_Init();
SystemClock_Config();
MX_ADC_Init();
while (true) {
HAL_ADC_Start(&hadc);
for(i=0;i<NUMBER_OF_CHANNELS;i++) {
adc_values[i]=HAL_ADC_GetValue(&hadc);
}
HAL_Delay(1000); // 模拟延时操作
}
}
```
此代码片段展示了如何利用STM32 HAL 库来进行基础的单次逐个通道的手动读数方法。实际应用当中可能还需要加入更多的错误检测机制以及其他优化措施比如采用 DMA 来提高效率等等[^2]。
阅读全文
相关推荐


















