stmF103ADC
时间: 2025-01-09 13:53:36 浏览: 48
### STM32F103 ADC 配置指南
STM32F103系列微控制器内置了一个高性能的模拟到数字转换器(ADC),能够实现单次和连续模式下的多通道采样。该器件支持多达18个外部输入通道,可以测量内部温度传感器信号以及Vrefint电压。
#### 初始化设置
为了使能并配置ADC模块,在初始化阶段需完成如下操作:
- 解锁ADC外设时钟
- 设置分辨率、对齐方式等参数
- 启动校准过程以确保精度
```c
// 开启RCC时钟访问权限并启动ADC时钟
__HAL_RCC_ADC_CLK_ENABLE();
// 创建默认配置结构体实例
ADC_HandleTypeDef hadc;
hadc.Instance = ADC1;
if (HAL_ADC_Init(&hadc) != HAL_OK){
// 错误处理逻辑...
}
```
#### 单次转换模式
当只需要获取一次性的AD值读取结果时可采用此方法。调用`HAL_ADC_Start()`函数触发开始命令;随后通过轮询等待结束标志位被置位来判断是否已完成数据采集工作[^1]。
```c
uint32_t adc_value;
if(HAL_ADC_Start(&hadc)!= HAL_OK){
// 处理错误情况...
}
if(HAL_ADC_PollForConversion(&hadc, 1000) == HAL_OK){
adc_value = HAL_ADC_GetValue(&hadc);
} else {
// 超时或其他异常情形...
}
```
#### 连续扫描模式
对于需要持续监控多个IO口电平的应用场景而言更为适用。在此种情况下应该先指定好要参与循环检测的目标引脚列表,并开启DMA传输功能以便高效地搬运大量样本点至内存缓冲区中存储起来待后续分析使用[^2]。
```c
static uint32_t aAdcValues[NO_OF_CHANNELS];
// DMA流/请求ID定义
#define DMA_STREAM_ID LL_DMA_STREAM_1
#define DMA_REQUEST_ID LL_DMAMUX_REQ_ADC1
LL_DMA_ConfigTransfer(DMA1,
DMA_CHANNEL,
LL_DMA_DIRECTION_PERIPH_TO_MEMORY |
LL_DMA_PRIORITY_HIGH |
LL_DMA_MODE_CIRCULAR |
LL_DMA_PERIPH_NOINCREMENT |
LL_DMA_MEMORY_INCREMENT |
LL_DMA_PDATAALIGN_HALFWORD |
LL_DMA_MDATAALIGN_HALFWORD);
LL_DMA_SetPeriphAddress(DMA1,DMA_CHANNEL,(uint32_t)&(ADC1->DR));
LL_DMA_SetMemoryAddress(DMA1,DMA_CHANNEL,(uint32_t)aAdcValues);
LL_DMA_SetDataLength(DMA1,DMA_CHANNEL,sizeof(aAdcValues)/sizeof(uint32_t));
/* Enable the DMA channel */
LL_DMA_EnableChannel(DMA1,DMA_CHANNEL);
/* Start conversion with software trigger and enable continuous mode*/
LL_ADC_REG_StartConversionSWStart(ADC1);
LL_ADC_REG_SetSequencerContinuousMode(ADC1,LL_ADC_SEQ_CONTINUOUS_ENABLED);
```
阅读全文
相关推荐

















