ADC数据采集相关笔记(一)

本文主要介绍了使用STM32进行ADC数据采集,并利用双缓存策略实现数据快速稳定转存的方法。通过HAL库配置ADC、DMA及TIM,启动数据采集并在转换完成时触发回调,实现连续采样并更新缓存。
摘要由CSDN通过智能技术生成

主要内容:ADC采集完后的快速稳定转存 

双缓存下次ADC数据采集相关笔记(二)写一写

原型:C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1

应用

volatile uint16_t adc_buff[ADC_SIZE];            /* 存放ADC采集的数据 */
volatile uint16_t adc_cache_buff[ADC_SIZE];            /* 存放ADC采集数据的缓存 */

volatile uint8_t  AdcConvEnd = 0;            /* ADC转换完毕标志位 */

//ADC初始化

MX_ADC1_Init();

MX_TIM3_Init();        // 用于ADC采集触发

//开始采集

HAL_TIM_Base_Start(&htim3);

HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buff, ADC_SIZE);    

//存满操作

if (AdcConvEnd == 1)

{

        memcpy((void*)adc_cache_buff, (const void*)adc_buff, ADC_SIZE*(sizeof(uint16_t)));

        AdcConvEnd = 0;
        HAL_TIM_Base_Start(&htim3);                                   /* 开启定时器3 */
        HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buff, ADC_SIZE);    /* 开启ADC_DMA传输 */

}

//回调函数

//HAL_ADC_ConvCpltCallback
//DMA转换完数据中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if (hadc == (&hadc1))
    {
        AdcConvEnd = 1;
        HAL_TIM_Base_Stop(&htim3);  /* 关闭TIM3,采集停止 */
    }
}

//ADC配置

ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;

/* ADC1 init function */
void MX_ADC1_Init(void)
{

    /* USER CODE BEGIN ADC1_Init 0 */<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值