stm32f103c8t6用hal库采集ADC
时间: 2025-05-12 16:37:16 AIGC 浏览: 41
### STM32F103C8T6 HAL库 ADC采样教程
STM32F103C8T6 微控制器内置了三个独立的ADC模块,每个模块具有12位分辨率,并支持多种工作模式,如单次、连续、扫描和间断转换模式。为了高效地使用这些功能,开发者可以通过ST官方提供的HAL库来简化开发流程。
以下是基于HAL库实现ADC采样的具体方法以及示例代码:
#### 初始化配置
在初始化阶段,需要完成以下几个关键步骤:
1. **使能时钟**:确保为所使用的ADC模块启用相应的时钟源。
2. **配置GPIO引脚**:将目标模拟信号连接到指定的GPIO引脚,并将其配置为模拟输入模式。
3. **设置ADC参数**:包括分辨率为12位、数据对齐方式(左对齐或右对齐)、采样时间等。
4. **启动ADC校准**:每次开启ADC前都需要执行一次校准操作以提高测量精度。
```c
// 定义全局变量用于存储ADC值
uint16_t adcValue;
void MX_ADC_Init(void) {
// 创建一个ADC句柄结构体实例
ADC_HandleTypeDef hadc;
// 配置ADC参数
hadc.Instance = ADC1; // 选择ADC1作为当前工作的ADC单元
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;// 设置ADC时钟相对于APB2总线时钟的比例因子
hadc.Init.Resolution = ADC_RESOLUTION_12B; // 设定分辨率为12比特
hadc.Init.ScanConvMode = DISABLE; // 关闭扫描模式
hadc.Init.ContinuousConvMode = ENABLE; // 启用连续转换模式
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐
hadc.Init.NbrOfConversion = 1; // 转换序列长度为1
if (HAL_ADC_Init(&hadc) != HAL_OK) { // 如果初始化失败则停止运行
Error_Handler();
}
}
```
#### 配置通道与采样时间
通过`HAL_ADC_ConfigChannel()`函数进一步细化各通道的具体属性,比如设定较长的采样窗口以便更精确捕捉缓慢变化的信号电平。
```c
static void ConfigureAdcChannel(ADC_HandleTypeDef* hadc, uint32_t channel){
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = channel; // 指定要访问哪个物理端口对应的逻辑编号
sConfig.Rank = 1; // 将此信道放置于第一个位置
sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES5; // 增加样本获取周期至最大可能值之一
sConfig.SingleDiff = SINGLE_ENDED; // 单端输入而非差分输入形式
sConfig.OffsetNumber = ADC_OFFSET_NONE; // 不应用任何偏移补偿机制
sConfig.Offset = 0; // 默认零点偏移量
if(HAL_ADC_ConfigChannel(hadc,&sConfig)!=HAL_OK){
Error_Handler(); // 出错处理分支
}
}
ConfigureAdcChannel(&hadc, ADC_CHANNEL_0); // 对应PA0上的外部传感器接口
```
#### 开始转换并读取结果
一旦完成了全部前期准备工作之后就可以调用下面这个简单的API命令触发实际的数据采集过程,并最终取得数字化后的数值表示形式供后续算法分析或者显示界面呈现之用了。
```c
if (HAL_ADC_Start(&hadc) != HAL_OK) { // 发起新的一轮异步型AD变换请求动作
Error_Handler();
}
if (HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY)==HAL_OK){
adcValue=HAL_ADC_GetValue(&hadc); // 获取最近已完成的一笔有效测量成果
}else{
Error_Handler(); // 若超时期限到达仍未收到预期回应,则报告异常状况发生
}
```
以上就是利用STM32CubeMX生成的基础框架配合少量手动调整后达成基本功能需求的一个完整案例展示[^1][^2]。
---
###
阅读全文
相关推荐




















