当前位置: 首页 > news >正文

STM32 ADC转换完成回调函数详解 HAL_ADC_ConvCpltCallback与HAL_ADC_ConvHalfCpltCallback

HAL_ADC_ConvCpltCallback 和 HAL_ADC_ConvHalfCpltCallback 是 STM32 HAL 库中用于处理 ADC(模数转换器)转换完成事件的回调函数。它们分别在 ADC 转换完成和转换完成一半时被调用。以下是它们的详细说明:

1. HAL_ADC_ConvCpltCallback
功能:当 ADC 转换完全完成时,此回调函数会被调用。

使用场景:适用于需要处理完整转换数据的场景。例如,当 ADC 完成一组采样后,你可以在这个回调函数中读取转换结果并进行处理。

示例代码:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    // 读取 ADC 转换结果
    uint32_t adc_value = HAL_ADC_GetValue(hadc);

    // 处理转换结果
    // ...
}

2. HAL_ADC_ConvHalfCpltCallback
功能:当 ADC 转换完成一半时,此回调函数会被调用。

使用场景:适用于需要处理部分转换数据的场景。例如,在双缓冲模式下,当 ADC 完成一半的采样时,你可以在这个回调函数中读取并处理前半部分的数据。

示例代码:

void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{
    // 读取前半部分 ADC 转换结果
    uint32_t adc_value = HAL_ADC_GetValue(hadc);

    // 处理前半部分转换结果
    // ...
}

3. 使用注意事项
启用中断:为了使用这些回调函数,你需要确保 ADC 的中断已经启用。通常,你需要在初始化 ADC 时配置中断。

双缓冲模式:在双缓冲模式下,HAL_ADC_ConvHalfCpltCallback 和 HAL_ADC_ConvCpltCallback 可以分别用于处理前半部分和后半部分的转换数据。

回调函数重写:这些回调函数是弱定义的,你需要在你的代码中重写它们以实现具体的功能。

4. 示例配置
以下是一个简单的 ADC 配置示例,展示了如何启用中断并使用这些回调函数:

ADC_HandleTypeDef hadc;

void ADC_Init(void)
{
    // ADC 初始化配置
    hadc.Instance = ADC1;
    hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
    hadc.Init.Resolution = ADC_RESOLUTION_12B;
    hadc.Init.ScanConvMode = DISABLE;
    hadc.Init.ContinuousConvMode = ENABLE;
    hadc.Init.DiscontinuousConvMode = DISABLE;
    hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc.Init.NbrOfConversion = 1;
    HAL_ADC_Init(&hadc);

    // 配置 ADC 通道
    ADC_ChannelConfTypeDef sConfig = {0};
    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
    HAL_ADC_ConfigChannel(&hadc, &sConfig);

    // 启用 ADC 中断
    HAL_NVIC_SetPriority(ADC_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(ADC_IRQn);

    // 启动 ADC 转换
    HAL_ADC_Start_IT(&hadc);
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    uint32_t adc_value = HAL_ADC_GetValue(hadc);
    // 处理完整转换结果
}

void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{
    uint32_t adc_value = HAL_ADC_GetValue(hadc);
    // 处理前半部分转换结果
}

通过这种方式,你可以灵活地处理 ADC 转换的不同阶段,并根据需要执行相应的操作。

相关文章:

  • 轮胎厂相关笔记
  • Rancher2.8.5架构
  • 如何把数据从SQLite迁移到PostgreSQL
  • c++ primer 阅读手记 第七章
  • 【蓝桥杯】 枚举和模拟练习题
  • 统一语言学习范式
  • 企业级海外网络专线行业应用案例及服务商推荐
  • element-ui图片查看器
  • idea导入tomcat的jar
  • 算法学习11——滑动窗口——最大连续1的个数
  • 兼职网|基于Java+vue的兼职网系统(源码+数据库+文档)
  • 交换机、路由器、VLAN、单臂路由、三层交换、STP
  • python学习笔记(6)运算符
  • 蓝桥杯—日期遍历
  • 1. 两数之和
  • 美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?
  • 2025宁德时代测评Verify考什么?网申测评如何通过SHL笔试|附真题线上笔试考点、高分攻略、CATL新能源科技SHL测评宁德社招题目、面试攻略、求职建议
  • 华为MPLS Virtual PN option C1(有/无RR)配置wireshark抓包分析
  • AgGridReact 禁止checkbox复选框选中(isRowSelectable)
  • uniapp实现小票打印 兼容微信小程序安卓
  • 那个网站教宝妈做辅食/郑州网络推广报价
  • 最好的网站模板下载网站/seoul是什么品牌
  • 营销型和展示型网站/百度站长管理平台
  • 做jsp网站用哪些软件下载/磁力天堂最新版地址
  • 商户如何做h5商城网站是什么意思/百度公司推广
  • 北京企业建站程序/网页搜索引擎大全