stm32f103c8t6内部AD
时间: 2025-05-25 16:22:22 浏览: 41
### STM32F103C8T6 微控制器内部 ADC 的工作原理
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的微控制器,其内置了一个高性能模数转换器 (Analog-to-Digital Converter, ADC)[^1]。该 ADC 支持单次采样模式以及连续采样模式,并能够处理多达 16 路输入信号。
#### 主要特性
- **分辨率**: STM32F103C8T6 的 ADC 提供 12 位分辨率,这意味着它可以将模拟电压量化为范围从 0 到 4095 的数字值[^2]。
- **通道数量**: 它支持最多 18 个外部输入通道(其中部分可能被复用作为其他功能),并允许通过软件配置选择不同的输入源[^3]。
- **采样速率**: 取决于时钟频率设置,默认情况下可以达到最高约 1 MHz 的采样率[^4]。
#### 配置过程概述
为了正确初始化和操作 STM32F103C8T6 上的 ADC 功能模块,通常需要完成以下几个方面的参数设定:
1. **使能外设电源供应**
- 确保 RCC 控制寄存器已开启对应区域内的 GPIO 和 ADC 外设供电开关[^5]。
2. **定义引脚映射关系**
- 将目标模拟量接入指定端口之一,并将其配置成模拟输入模式而非通用 I/O 接口用途[^6]。
3. **调整系统时基分配给 ADC 单元使用的具体数值**
- 设置合适的预分频系数来决定最终实际运行速度下的有效周期长度单位 Tclk_adc = (PCLK / Prescaler_value),从而间接影响整个测量流程所需耗费时间长短[^7]。
4. **校准阶段执行与否的选择权交给开发者自行判断是否必要实施零偏移补偿措施以提高精度表现水平[^8]**
以下是利用 HAL 库实现简单读取单一通道数据的一个例子程序片段:
```c
#include "stm32f1xx_hal.h"
// 初始化函数声明省略...
void Start_ADC(void){
__HAL_RCC_ADC1_CLK_ENABLE(); // 启动ADC时钟
hadc.Instance = ADC1;
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PREScaler_2;
hadc.Init.Resolution = ADC_RESOLUTION_12B;
hadc.Init.ScanConvMode = DISABLE;
hadc.Init.ContinuousConvMode = ENABLE;
hadc.Init.DiscontinuousConvMode = DISABLE;
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc.Init.NbrOfConversion = 1;
if(HAL_ADC_Init(&hadc)!= HAL_OK){Error_Handler();}
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
if(HAL_ADC_ConfigChannel(&hadc,&sConfig)!= HAL_OK){Error_Handler();}
}
uint16_t Read_ADC_Value(){
uint32_t tmp=0;
HAL_ADC_Start(&hadc);
HAL_ADC_PollForConversion(&hadc,10);
tmp = HAL_ADC_GetValue(&hadc);
return(tmp & 0xFFF); // 返回低12位的有效结果
}
```
此代码展示了如何启动 ADC 并获取来自第一个通道的数据样本。注意这里启用了连续转换模式以便反复采集最新状态信息直到停止指令下达为止[^9]。
---
阅读全文
相关推荐

















