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

STM32的ADC电压采集

时间记录:2024/2/9

一、ADC相关知识点

(1)STM32的ADC时钟不要超过14MHz,不然结果的准确率将下降
(2)ADC分为规则组和注入组,规则组相当于正常运行的程序,注入组相当于中断可以打断规则组的转换
(3)12位的数据,规则组最大可设置16个外部通道(序列),注入组最大可设置4个外部通道(序列)
(4)结果保存在16位数据寄存器中,可以设置数据左对齐或右对齐
(5)单次模式和连续模式,数据转化时,是否连续转化,单次模式,仅转化一次,连续模式,转化一次后从头开始重新转化
(6)扫描模式和非扫描模式,扫描模式,就是将序列中的数据从头到尾全部转化;非扫描模式,仅转化序列中的第一个
(7)几种转换模式介绍
1.单次非扫描模式:给出一个触发后会将序列1对应的通道数据进行转换,然后产生EOC中断,并且只转换1次
单次非扫描模式
2.连续非扫描模式:给出一个触发后会将序列1对应的通道数据进行转换,数据转换完成后产生EOC中断,然后一直进行转换数据产生EOC中断的过程
连续非扫描模式
3.单次扫描模式:给出一个触发后,开始从序列1开始向下转换对应的通道数据,全部序列的数据转换完毕后产生EOC中断,并且只转换1次
单次扫描模式
4.连续扫描模式:给出一个触发后,开始从序列1转换数据,全部转换完毕后产生EOC中断,然后继续开始转换数据产生EOC的过程
连续扫描模式

二、示例代码(单次、非扫描模式)

(1)头文件

#ifndef __MYADC_H__
#define __MYADC_H__
#include "stm32f10x.h"//adc初始化
void vAdcInit(void);
//获取电压值
float xAdcGetValue(void);#endif

(2)源文件

#include "my_adc.h"void vAdcInit(void)
{//1.使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA,ENABLE);//2.配置初始化GPIOGPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//3.设置ADC分频因子RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADC时钟72M/6=12M,不能超过14M//4.初始化ADC参数ADC_InitTypeDef ADC_InitStruct;ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐方式,右对齐ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//连续转换模式,非连续转换ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//独立模式,只使用1个ADC时配置,ADC1和ADC2同时使用时配置为双重模式ADC_InitStruct.ADC_ScanConvMode = DISABLE;//扫描模式,非扫描模式ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//触发方式,外部触发、硬件或软件触发ADC_InitStruct.ADC_NbrOfChannel = 1;//转换的通道数ADC_Init(ADC1,&ADC_InitStruct);//5.设置ADC规则组通道,参数3:转换顺序(序列),参数4:采样时间ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_55Cycles5);//6.使能ADCADC_Cmd(ADC1,ENABLE);//7.ADC校准ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));
}float xAdcGetValue(void)
{uint16_t temp=0;ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能软件触发转换while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待转换结束temp=ADC_GetConversionValue(ADC1);//获取电压值return (float)3.3*temp/4095;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 七、Nacos源码系列:Nacos服务发现
  • c#多线程
  • 第2节、让电机转起来【51单片机+L298N步进电机系列教程】
  • ArcGIS的UTM与高斯-克吕格投影分带要点总结
  • Qt视频播放器项目
  • VUE学习——数组变化侦测
  • WordPress突然后台无法管理问题
  • Golang 基础 Go Modules包管理
  • Vue项目创建
  • Python和Java的区别(不断更新)
  • 生存类游戏《幻兽帕鲁》从部署服务器到开始体验全过程
  • 解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题
  • Unity SRP 管线【第十讲:SRP/URP 图形API】
  • Git的基础操作指令
  • uniapp小程序端使用计算属性动态绑定style样式踩坑
  • #Java异常处理
  • 【css3】浏览器内核及其兼容性
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES10 特性的完整指南
  • exif信息对照
  • Fastjson的基本使用方法大全
  • Java方法详解
  • JS字符串转数字方法总结
  • mysql外键的使用
  • React 快速上手 - 07 前端路由 react-router
  • Spring Boot MyBatis配置多种数据库
  • SQLServer之索引简介
  • V4L2视频输入框架概述
  • webgl (原生)基础入门指南【一】
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • web标准化(下)
  • 基于HAProxy的高性能缓存服务器nuster
  • 计算机常识 - 收藏集 - 掘金
  • 精彩代码 vue.js
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端路由实现-history
  • 入手阿里云新服务器的部署NODE
  • 山寨一个 Promise
  • 手写一个CommonJS打包工具(一)
  • 用element的upload组件实现多图片上传和压缩
  • 阿里云移动端播放器高级功能介绍
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • ${factoryList }后面有空格不影响
  • (31)对象的克隆
  • (NSDate) 时间 (time )比较
  • (pytorch进阶之路)扩散概率模型
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (初研) Sentence-embedding fine-tune notebook
  • (二)Linux——Linux常用指令
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)计算机毕业设计SSM在线影视购票系统