AD单通道/多通道

1.AD单通道(单次转换,非扫描模式)

1.1 接线图

1.2 AD.c

#include "stm32f10x.h"                  // Device headervoid AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//开启ADC时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADC时钟分频,6分频,72/6=12,12MHz小于14MHzGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//将IO口配置为模拟输入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//查表得知PA0口为ADC通道0口GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//ADC规则组输入通道,因为IO口选择PA0,所以此处通道为ADC通道0,序列号,采样时间//ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//采用多通道可以多次配置//ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);ADC_InitTypeDef ADC_Initstructure;ADC_Initstructure.ADC_Mode = ADC_Mode_Independent;//ADC模式,单ADC模式,区别于双ADC模式ADC_Initstructure.ADC_DataAlign = ADC_DataAlign_Right;//参数值右对齐ADC_Initstructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发选择:不使用外部触发ADC_Initstructure.ADC_ContinuousConvMode = DISABLE;//单次转换ADC_Initstructure.ADC_ScanConvMode = DISABLE;//非扫描模式ADC_Initstructure.ADC_NbrOfChannel = 1;//通道数为1ADC_Init(ADC1,&ADC_Initstructure);ADC_Cmd(ADC1, ENABLE);//开启ADCADC_ResetCalibration(ADC1);//校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//获取所选ADC复位校准寄存器状态,等待校准完成。判断CR2_RSTCAL状态,经查阅参考手册 //ADC控制寄存器 2(ADC_CR2)得知当校准完成后,该位自动置0,置0后跳出循环,等待结束ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1)== SET);//获取所选ADC校准状态,等待校准完成。原理同上}uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件启动AD转换while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)== RESET);//获取EOC标志位,检查转换是否完成,检查ADC状态寄存器(ADC_SR)寄存器的EOC标志位//经查阅参考手册得,转换结束位,该位由硬件在(规则或注入)通道组转换结束时设置,由软件清除或由读取ADC_DR时清除//0:转换未完成;1:转换完成,所以在此处while循环中判断条件为EOC是否等于RESET,转换结束即可跳出循环//ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//因为读取ADC_DR时自动清除EOC标志位,所以此处无需这条代码return ADC_GetConversionValue(ADC1);//返回常规通道的最后一次ADCx转换结果数据。因为此代码是读取ADC_DR寄存器,读取后自动自动清除EOC标志位
}

 需要注意:

  • AD校准中,在等待校准完成时,while的判断条件,具体根据寄存器ADC_CR2描述来配合

  • 在等待转换完成读取EOC标志位时的判断条件, 具体根据寄存器ADC_SR描述来配合

1.3 main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;
int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"ADValue:");while (1){ADValue = AD_GetValue();//将获取AD值赋给ADValue;OLED_ShowNum(1,9,ADValue,4);}
}

1.4 实验结果

  •  通过调整旋钮来改变阻值,进而改变输出电压的大小,并通过AD转换输出

2.  AD多通道(连续转换,扫描模式)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/319492.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js 解析post请求 方法二

前提:以前面发的node.js解析post请求方法一为模板,具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法:使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

OpenWRT部署Zerotier虚拟局域网实现内网穿透

前言 细心的小伙伴肯定已经发现了:电脑上部署了Zerotier,如果路由器也部署了OpenWRT,那是否能远程访问呢? 答案是肯定的。 OpenWRT部署Zerotier有啥好处? 那好处必须多,其中的一个便是在外远程控制家里…

初识MVC

初识MVC 理论部分 今天第一次学MVC,拿到一个练手项目。现在来记录一下学习过程。 项目的背景就是个学生管理系统。我只做后端。 从大的来说MVC将应用程序分为三个主要组件(部分): 模型(Model)是应用程序…

sql 中having和where区别

where 是用于筛选表中满足条件的行,不可以和聚类函数一起使用 having 是用于筛选满足条件的组 ,可与聚合函数一起使用 所以having语句中不能使用select中定义的名字

Hive大数据任务调度和业务介绍

目录 一、Zookeeper 1.zookeeper介绍 2.数据模型 3.操作使用 4.运行机制 5.一致性 二、Dolphinscheduler 1.Dolphinscheduler介绍 架构 2.架构说明 该服务内主要包含: 该服务包含: 3.FinalShell主虚拟机启动服务 4.Web网页登录 5.使用 5-1 安全中心…

C++中的reverse_iterator迭代器结构设计

目录 reverse_iterator迭代器结构设计 reverse_iterator迭代器基本结构设计 operator*()函数 operator()函数 operator->()函数 operator!()函数 rbegin()函数 rend()函数 operator--()函数 operator()函数 测试代码 const_reverse_iterator迭代器设计 reverse…

安全再升级,亚信安慧AntDB数据库与亚信安全二次牵手完成兼容性互认证

日前,湖南亚信安慧科技有限公司(简称:亚信安慧)的产品与亚信科技(成都)有限公司(简称:亚信安全)再次携手,完成亚信安慧AntDB数据库与亚信安全IPoE接入认证系统…

Ftrans文件外发系统 构建安全可控文件外发流程

文件外发系统是企业数据安全管理中的关键组成部分,它主要用于处理企业内部文件向外部传输的流程,确保数据在合法、安全、可控的前提下进行外发。 文件外发系统的主要作用包括: 1、防止数据泄露:通过严格的审批流程和安全策略&…

节能洗车房车牌识别项目实战

项目背景 学电子信息的你加入了一家节能环保企业,公司的主营产品是节能型洗车房。由于节水节电而且可自动洗车,产品迅速得到了市场和资本的认可。公司决定继续投入研发新一代产品:在节能洗车房的基础上实现无人值守的功能。新产品需要通过图…

Altium Designer——第一课

一个电子设计包含四个部分: 1.原理图库的设计 2.原理图的设计 3.PCB封装库的设计 4.PCB布局和PCB布线的设计 电子设计工程包含的部分: Free documents: 在我们保存AD工程的文件夹中,如果打开的是prjpcb后缀的工程文件&#xf…

《Fundamentals of Power Electronics》——基础交流建模方法

PWM整流器小信号交流模型建模的主要步骤为: (a)利用小纹波近似的动态版本,建立与电感和电容波形的低频平均值有关的方程; (b)平均方程的扰动和线性化; (c)交流等效电路模型的建立。 以下图buck-boost电路为例进行分析。 首先测…

二叉树的迭代遍历 | LeetCode 144. 二叉树的前序遍历、LeetCode 94. 二叉树的中序遍历、LeetCode 145. 二叉树的后序遍历

二叉树的前序遍历(迭代法) 1、题目 题目链接:144. 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2&#x…

【Java】实现一个简单的线程池

📝个人主页:哈__ 期待您的关注 目录 ​编辑 一、线程池的模式 二、线程池的一些参数 三、代码实现 1.BlockingQueue 2.ThreadPool 四、拒绝策略 一、线程池的模式 线程池顾名思义就是管理线程的一个池子,我们把创建线程的过程交给…

Neo4j v5 中 Cypher 的变化

How Cypher changed in Neo4j v5 Neo4j v5 中 Cypher 的变化 几周前,Neo4j 5 发布了。如果你像我一样,在 Neo4j 4 的后期版本中忽略了所有的弃用警告,你可能需要更新你的 Cypher 查询以适应最新版本的 Neo4j。幸运的是,新的 Cyp…

SpringBoot自定义定时任务

通常,在我们的项目中需要定时给前台发送一些提示性消息或者我们想要的定时信息,这个时候就需要使用定时任务来实现这一功能,实现也很简单,接下来具体来看看吧~ 简单定时任务 首先,你需要在你的启动类上加上开启定时任…

Python-VBA函数之旅-oct函数

目录 一、oct函数的常见应用场景 二、oct函数使用注意事项 三、如何用好oct函数? 1、oct函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页:神奇夜光杯-CSDN博客 一、oct函数的常见应用场景 oc…

docker部署nginx并实现https

文章目录 docker部署nginx并实现https1、服务器环境2、安装docker3、准备证书4、准备nginx配置文件和dockerfile文件5、创建nginx镜像与容器6、验证访问 docker部署nginx并实现https 1、服务器环境 [rootliuyanfen12 ~]#systemctl stop firewalld [rootliuyanfen12 ~]#setenf…

WORD排版常见问题与解决方案

前言 近期使用word软件进行论文排版工作,遇到了一些常见的问题,记录一下,避免遗忘。 基本配置 系统环境:win10/win11 word版本:Microsoft Office LTSC 专业增强版 2021 问题与解决方案 问题1:页眉显示内…

【STM32F407+CUBEMX+FreeRTOS+lwIP netconn UDP TCP记录】

STM32F407CUBEMXFreeRTOSlwIP netconn UDP TCP记录 注意UDPUDP1UDP2 TCPTCP clientTCP server图片 注意 1、超时 #include “lwipopts.h” #define LWIP_SO_RCVTIMEO 12、先保证能ping通 3、关于工程创建可参考 【STM32F407CUBEMXFreeRTOSlwIP之UDP记录】 4、…

C语言之数据结构之栈和队列的运用

目录 1. 用队列实现栈1.1 思路讲解1.2 代码实现 2. 用栈实现队列1.1 思路讲解1.2 代码实现 总结 •͈ᴗ•͈ 个人主页:御翮 •͈ᴗ•͈ 个人专栏:C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1. 用队列实现栈 题目描述: 请你仅使用两个…