STM32 F103C8T6学习笔记20:cubemx 配置 ADC采样 电位器

突然想起自己接触ADC采样比较之少,这里记录一下怎么配置使用AD采样

用的stm32cubemx 加HAL库

文章提供测试代码、截图、工程下载

目录

RCC时钟配置:

ADC配置:

测试应用程序:

测试结果:

测试工程下载:


RCC时钟配置:

一般c8t6最小系统板都有一个8Mhz的外部晶振,这里就给他把频率拉满:

ADC配置:

这里配置ADC1 通道IN1 对应引脚PA1

测试应用程序:

ADC中断最好不要写什么函数,就基础的数据搬运就行了:

复制代码
#include "adc.h"
#include "stdio.h"

ADC_HandleTypeDef hadc1;

// 配置
#define ADC_SAMPLE_COUNT_MAX 200   // 最大缓存
#define SEND_INTERVAL        100   // 00ms 发一次

// 全局变量
uint32_t adc_buf[ADC_SAMPLE_COUNT_MAX];
uint32_t  adc_cnt = 0;              // 实际采了多少个(重点!)
uint32_t adc_avg_val = 0;
uint32_t last_time = 0;

// ========================= ADC 中断回调 =========================
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if(hadc->Instance == ADC1)
    {
        // 只在【没满】的时候存数据
        if(adc_cnt < ADC_SAMPLE_COUNT_MAX)
        {
            adc_buf[adc_cnt] = HAL_ADC_GetValue(&hadc1);
            adc_cnt++;  // 实际采样数 +1
        }

        HAL_ADC_Start_IT(&hadc1);
    }
}


void ADC_Task_(void)
{
    if(HAL_GetTick() - last_time >= SEND_INTERVAL)
    {
        last_time = HAL_GetTick();
        if(adc_cnt > 0)  // 必须有数据才计算,防止除0
        {
            uint32_t sum = 0;
            for(uint8_t i=0; i<adc_cnt; i++)
            {
                sum += adc_buf[i];
            }
            adc_avg_val = sum / adc_cnt;
        }

        // 打印
        printf_uart1("100ms 采样数量:%d,平均值:%d\r\n", adc_cnt, adc_avg_val);

        // 清空计数,准备下一轮采集
        adc_cnt = 0;
    }
}

测试结果:

转动电位器可以提供串口1 打印每100ms采样最大200点的平均值

测试工程下载:

STM32F103C8T6学习笔记20:cubemx配置ADC采样电位器资源-CSDN下载

相关推荐
程序员梅雨4 分钟前
【从零开始学习数据仓库 | 第三篇】: Flume——数据采集基石
java·大数据·数据仓库·后端·学习·flume
snysy16 分钟前
WordPress伪静态404故障排查笔记
android·笔记·wordpress
Z21-X19 分钟前
云原生运维实战笔记:华为云计算与网络类服务全景解析
运维·笔记·学习·云原生·华为云
半壶清水23 分钟前
[软考网规考点笔记]-局域网之冗余网关技术
网络·笔记·智能路由器
redtank200024 分钟前
纯血鸿蒙学习效率三件套实测:背单词艾宾浩斯曲线、时间记录与睡眠辅助
学习·华为·harmonyos
LK_0735 分钟前
【Agent】工具调用的安全边界:从模型输出到程序执行
人工智能·笔记·python·agent
乐橙开放平台44 分钟前
跨地域监控难管理?通过 GB28181 把各地海康大华乐橙摄像头注册到云端平台
开发语言·笔记·物联网·自动化·php·音视频·智能家居
动词ing44 分钟前
【学习笔记】51单片机 模块化编程
笔记·学习·51单片机
海绵宝宝转agent1 小时前
计网基础知识
网络·笔记·学习·智能路由器
糖糖单片机设计1 小时前
基于 STM32 + LU-ASR01 的智能台灯
stm32·单片机·嵌入式硬件·51单片机·语音识别