stm32f103cbt6adc
时间: 2025-01-07 09:51:29 浏览: 68
### STM32F103CBT6 ADC 配置与使用
#### 一、ADC简介
STM32F103CBT6内置了一个12位精度的模数转换器(Analog-to-Digital Converter, ADC),能够实现单次和连续模式下的多通道采样。该器件支持多达18个外部信号源作为输入,并可通过软件编程设置不同的参数来满足特定应用需求[^1]。
#### 二、硬件连接说明
对于具体的开发板而言,模拟ADC摇杆JS_X接到了PA6端口用于X轴方向上的电压采集;同样地,Y轴则通过PA7完成读取操作。另外还有一个按钮状态检测功能被安排给了PB2引脚,在这里它负责提供数字逻辑电平而非模拟值。值得注意的是,这些接口均需经过适当处理才能正确接入目标设备并获得预期效果[^2]。
#### 三、初始化过程概述
为了使能上述提到的功能模块,开发者应当先调用库函数`RCC_APB2PeriphClockCmd()`开启对应外设时钟供应路径,接着利用结构体变量定义好各个选项之后再执行实际创建动作——即调用`ADC_Init()`. 接下来就是配置DMA传输方式以及中断服务程序等相关事宜了.
```c
// 开启APB2总线上的GPIOA与时钟门控开关
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);
// 初始化ADC1的相关属性
ADC_InitTypeDef adc_init_struct;
adc_init_struct.ADC_Mode = ADC_Mode_Independent; // 单独工作模式
adc_init_struct.ADC_ScanConvMode = DISABLE; // 关闭扫描模式
adc_init_struct.ADC_ContinuousConvMode = DISABLE; // 禁止持续转换
adc_init_struct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;// 不采用外部触发机制
adc_init_struct.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐存储
adc_init_struct.ADC_NbrOfChannel = 1; // 只有一个信道参与测量活动
ADC_Init(ADC1,&adc_init_struct);
```
#### 四、启动一次性的AD变换请求
当一切准备就绪以后就可以发出命令让MCU去获取当前时刻所对应的物理量大小了。这一步骤通常借助于宏指令`ADC_Cmd()`来进行控制,而具体数值会保存到寄存器内等待后续提取出来加以分析利用.
```c
// 启动ADC1的数据收集流程
ADC_Cmd(ADC1,ENABLE);
// 设置要使用的通道号为CH6 (注意这里的编号是从零开始计数)
ADC_RegularChannelConfig(ADC1,ADC_Channel_6,1,ADC_SampleTime_55Cycles5);
// 发起单一周期内的量化作业
ADC_StartConversion(ADC1);
```
#### 五、读回最终结果
一旦完成了全部必要的准备工作并且确认已经得到了想要的结果,则可以安全地关闭电源供给以免造成不必要的能量浪费。在此之前还需要记得把之前得到的信息给取回来以便进一步加工处理或是直接显示输出给用户查看.
```c
uint16_t result;
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); // 循环等待直到结束标志位置高
result=ADC_GetConversionValue(ADC1); // 获取最近一次有效样本点处记录下来的整型数据
printf("The voltage is %d\n",result); // 打印出计算所得的实际电压等级
```
阅读全文
相关推荐


















