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下载

相关推荐
滕州市燕猫虎计算机科技工作室个体工商户1 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
别动我齐刘海2 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
志尊宝2 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
后季暖3 小时前
电商问数笔记(2)
笔记
xier_ran4 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
wuyk5556 小时前
嵌入式驱动开发:量产级工程化实战(第9篇)——低功耗下的通信可靠性
c语言·驱动开发·stm32·单片机·嵌入式硬件
li星野6 小时前
5 TYPES OF ADVERBS — One-Page Notes
学习
星恒随风6 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考6 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
创界工坊工作室6 小时前
24-基于单片机的仓鼠养殖环境监控系统设计
stm32·单片机·嵌入式硬件·proteus