stm32f103c8t6ADC
时间: 2025-05-11 19:28:45 AIGC 浏览: 28
### STM32F103C8T6 ADC 配置与使用教程
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的微控制器,其内置有模数转换器 (Analog-to-Digital Converter, ADC),能够实现模拟信号到数字信号的高效转换。以下是关于如何配置和使用 STM32F103C8T6 的 ADC 模块的相关说明。
#### 一、硬件资源概述
STM32F103C8T6 提供了一个 12 位分辨率的 ADC,支持多达 16 路输入通道[^1]。这些通道可以用于单次采样或连续采样模式下的电压测量。ADC 还具备多种触发机制以及 DMA 支持功能,从而简化数据采集过程并提高效率。
#### 二、软件初始化流程
为了正确设置 ADC,在程序启动阶段需完成如下几个主要步骤:
##### 1. **时钟使能**
确保开启对应外设的时钟供应。对于大多数项目而言,默认情况下 RCC_APB2ENR 寄存器中的 `ADC1EN` 应被激活以启用 ADC1 外设时钟[^2]。
```c
// 启用 GPIO 和 ADC 的时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_ADC1EN;
```
##### 2. **GPIO 初始化**
将目标引脚配置成模拟输入模式(ANALOG),这样它们才能作为 ADC 输入端口工作而不受其他数字 I/O 功能干扰[^3]。
```c
// 设置 PA0 为模拟输入
GPIOA->CRH &= ~(GPIO_CRH_MODE0); // 清除原有模式
GPIOA->CRH |= GPIO_CRH_CNF0_1; // CNF=10 -> Analog mode
```
##### 3. **ADC 参数设定**
通过修改控制寄存器来定义具体操作参数,比如扫描方向、对齐方式等。这里给出一个简单的例子展示基本配置方法[^4]:
```c
// 执行校准前先关闭 ADC
ADC1->CR2 &= ~ADC_CR2_ADON;
// 开始自动校准序列
ADC1->CR2 |= ADC_CR2_CAL;
while(ADC1->CR2 & ADC_CR2_CAL);
// 正式打开 ADC 设备
ADC1->CR2 |= ADC_CR2_ADON;
// 数据右对齐;单一转换模式
ADC1->CFGR &= ~(ADC_CFGR_ALIGN | ADC_CFGR_CONT);
ADC1->CFGR |= ADC_CFGR_RES_12BIT | ADC_CFGR_EXTSEL_SWSTART;
```
##### 4. **启动转换**
当一切准备就绪之后就可以调用相应 API 来触发展开实际的数据获取动作了。如果采用轮询法,则可通过不断查询状态标志位得知当前进度情况[^5]。
```c
// 发起一次手动请求
ADC1->CR2 |= ADC_CR2_SWSTART;
while(!(ADC1->SR & ADC_SR_EOC)); // 等待结束标记出现
uint16_t result = ADC1->DR; // 获取最终数值
```
#### 三、高级特性应用实例
除了上述基础之外,还有许多增强型选项可供开发者探索利用,例如中断服务处理、DMA 自动传输等等。下面简单列举部分场景及其解决方案:
- 利用 NVIC 中断向量表注册回调函数以便实时响应事件发生时刻;
- 结合 DMA 控制器减少 CPU 占用率的同时提升吞吐性能表现;
- 实现多路复用切换逻辑满足复杂电路需求环境下的灵活调度要求。
---
####
阅读全文
相关推荐




















