ADC模数转换器(基于STM32F407)

news2024/11/26 1:39:13

简介

Analog-to-digital converters(模拟数字转换器),我的STM32F407中内置3个ADC,每个 ADC 有 12 位、10 位、8 位和 6 位可选,ADC 具有独立模式、双重模式和三重模式,对于不同 AD 转换要求几乎都有合适的模式可选。

特性

  • 分辨率有 12 位、10 位、8 位和 6 位可选
  • 有3个ADC、但多重模式中ADC1一定为主
  • 单次和连续转换模式
  • 外部触发器选项,可为规则转换和注入转换配置极性
  • 可使用双重/三重ADC模式
  • 可独立设置各通道采样时间
  • 可使用DMA或者中断采集数据

通道选择(规则与注入通道的区别)

这个是我比较疑惑的点,就收集了一些资料总结下

  • 规则通道:顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道,或者应该说我们用到的都是这个通道,没有什么特别要注意的可讲。规则通道最多有16路
  • 注入通道:注入,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种通道。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。这点跟中断程序很像,都是不安分的主。所以,注入通道只有在规则通道存在时才会出现,注入通道最多有4路
    在这里插入图片描述

ADC对应的引脚和DMA通道选择

在这里插入图片描述
在这里插入图片描述

采样转换时间

采样时间长短是基于分辨率决定的,采样时间是3个时钟周期再加上分辨率的周期得出转换时间
在这里插入图片描述
在这里插入图片描述

数据寄存器

独立模式的数据存储在ADC 规则数据寄存器 (ADC_DR),低16位有效,数据可以选择左对齐或者右对齐
在这里插入图片描述
双重和三重ADC模式数据存储在适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR),32位有效
在这里插入图片描述
在这里插入图片描述

ADC_CSR偏移量

在这里插入图片描述
计算过程:0x40012000(基地址) + 0x300(相关偏移) +0x08(偏移量) = 0x40012308
在这里插入图片描述

独立模式单通道代码

  1. 初始化配置 ADC 目标引脚为模拟输入模式;
  2. 使能 ADC 时钟;
  3. 配置通用 ADC 为独立模式,采样 4 分频;
  4. 设置目标 ADC 为 12 位分辨率,1 通道的连续转换,不需要外部触发;
  5. 设置 ADC 转换通道顺序及采样时间;
  6. 配置使能 ADC 转换完成中断,在中断内读取转换完数据;
  7. 启动 ADC 转换;
  8. 使能软件触发 ADC 转换。
    ADC 转换结果数据使用中断方式读取,这里没有使用 DMA 进行数据传输

中断方式

代码后续补上

DMA方式

代码后续补上

三重模式多通道代码

理解一下下图,主打的就是转换速度快,间隔小
在这里插入图片描述

  1. 初始化配置 ADC 目标引脚为模拟输入模式;
  2. 使能 ADC1、ADC2、ADC3 以及 DMA 时钟;
  3. 配置 DMA 控制将 ADC 通用规矩数据寄存器数据转存到指定存储区;
  4. 配置通用 ADC 为三重 ADC 交替模式,采样 4 分频,使用 DMA 模式 2;
  5. 设置 ADC1、ADC2 和 ADC3 为 12 位分辨率,禁用扫描,连续转换,不需要外部触发;
  6. 设置 ADC1、ADC2 和 ADC3 转换通道顺序及采样时间;
  7. 使能 ADC1 的 DMA 请求,在 ADC 转换完后自动请求 DMA 进行数据传输;
  8. 启动 ADC1、ADC2 和 ADC3 转换;
  9. 使能软件触发 ADC 转换。
    ADC 转换结果数据使用 DMA 方式传输至指定的存储区,这样取代单通道实验使用中断服务的
    读取方法

代码

后续补上

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

list链表,结点

目录 1.链表 2.list构造函数 3.list的赋值和交换,,assign,swap 4.list大小的操作,size,empty,resize 5.list插入和删除,push_back,pop_back,push_front,pop_front,insert,clear,erase,remove 6.list容器数据存取,front,back 7.list反转…

数字孪生加持,水利水电工程或将实现全生命周期管理

水利水电工程在数字孪生技术的加持,使得建设和运营更加高效和智能化,将工程中各种元素、过程和系统数字化,并建立数字孪生模型,以实现工程建设和运营的智能化管理。数字孪生对水利水电实现对工程建设的全生命周期管理,…

Bean的生命周期和作用域

Bean的生命周期Bean的执行流程:Bean 执行流程:启动Spring 容器 -> 实例化 Bean(分配内存空间,从无到有)-> Bean 注册到 Spring 中(存操作) -> 将 Bean 装配到需要的类中(取…

《计算机网络:自顶向下方法》实验2:常用网络命令的使用

使用Ping实用程序来测试计算机的网络连通性 登录到Windows中。单击开始,然后将鼠标指针移到程序上,再移到Windows系统,然后单击命令提示符。在命令提示窗口键入ping 127.0.0.1。问题1:发送了多少数据包?接受了多少数据包?丢失了多少数据包? 发送了4个数据包;接受了4个数…

JavaScript Web API实战:7个小众技巧让你的网站瞬间提升用户体验

随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。但据了解,在100 多个 API中,只有5%被开发人员积极使用。 让我们来看看一些有用的Web API,它们可以帮助您将网站推向月球! 1、 截屏接口 Screen Capt…

Blockchain gold经测试完美兼容EVM虚拟机

尽管对于行业人士来说,有关寻找更快更便宜的基础层区块链的对话并不是什么新鲜事。 但随着 Defi Summer 持续一年有余的繁荣增长,更实际的需求——以太坊上高昂的 gas 费用使得开发者时间尤为昂贵。 可以看到的是,作为有着以太坊 CPU 之称的 …

Halcon 拟合直线

本文用 Halcon 的矩阵操作实现最小二乘拟合直线 *首先随机生成一组数据 Mx : [100:10:500] tuple_length(Mx, len) tuple_gen_const(len, 5, r) Ma : 2 Mb : 40 tuple_rand(len, noise) My : Ma * Mx Mb * noise gen_circle(ContCircle, My, Mx, r)接下来用矩阵进行最小二乘求…

一次Linux系统密码修改失败事件

一、事件描述 某业务系统采用移动云主机,某次因误操作导致移动云内嵌密码管理相关Pga进程导致页面无法修改密码,东移动云主机web终端登录也无法修改,密码错误次数最大已无法登录,无奈只能重启主机,修改密码&#xff1b…

如何保证线程的原子性

线程的原子性是指:一个或者一系列指令,它的操作是不可中断的,一旦开始是不允许被其他CPU或线程来中断。 我们来看下述代码:ThreadAtomicityDemo类中有个初始值为0的Integer类型的静态变量count,还有一个每次sleep一毫…

Vue3快速上手

Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…

微信上制作投票链接在线制作投票链接如果制作投票链接

现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情,又可以让商家和企业实现推广的目的&…

华为OD机试 - 知识图谱新词挖掘 1(Python)【2023-Q1 新题】

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 知识图谱新词挖掘…

利用global mapper导出等高线 在sketch up制作三维模型

为了做一个地形模型,绞尽脑汁实验了所有能查到的教程,在免费的基础上总体尝试失败,一是需要花钱的插件例如bitmap to mesh,即便能下载到,也是无法安装使用。如果你能下到且安装上,别忘了分享给我。 二是有的…

如何终止一个线程

如何终止一个线程 是使用 thread.stop() 吗? public class ThreadDemo extends Thread{Overridepublic void run() {try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("this is demo thread :"Thre…

学了两个月的Java,最后自己什么也不会,该怎么办?

学着学着你会发现每天的知识都在更新,也都在遗忘,可能就放弃了。但是只要自己肯练,肯敲代码,学过的知识是很容易就被捡起来的。等你学透了用不了一年也可以学好 Java的运行原理:Java是一门编译解释型语言,…

片内RAM读写测试实验

片内RAM读写测试实验 概念 RAM是FPGA中常用的基础模块,可广泛用于缓存数据的情况,同样它也是 ROM,FIFO 的基础。 官方已经提供了RAM的IP核进行例化即可。 读写时序(具体还是要看官方资料): 过程 创…

华为OD机试真题 用 C++ 实现 - 获取最大软件版本号

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

以太网协议和DNS协议

1.以太网协议报文属性上面的图表示的是整个以太网数据报.目的地址和原地址此处的地址并非是IP地址,而是mac地址.在大小上:mac地址占有6个字节,相比于IPv4,mac可以给全球的每一台设备一个自己的mac地址.在地址的描述上:IP地址描述的是整体路程的起点和终点,而mac地址描述的是相邻…

GAN入门示例

本文参考:pytorch实现简单GAN - 灰信网(软件开发博客聚合) 上文中pytorch代码执行会有问题,这块本文中已经修复! 1、GAN概述 GAN:Generative Adversarial Nets,生成对抗网络。在给定充分的建…

SpringBoot整合Mybatis+人大金仓(kingbase8)

陈老老老板🦸👨‍💻本文专栏:国产数据库-人大金仓(kingbase8)(主要讲一些人大金仓数据库相关的内容)👨‍💻本文简述:本文讲一下Mybatis框架整合人…