RT-Thread ADC_DMA
看到这里,相信大家已经尝试过网上各类ADC_DMA传输的文章,且大多都并不能实现,因为在RT-Thread中并没有找到关于ADC的DMA接口,在官方例程中有关DMA的传输也只有一个串口接收的介绍,找遍全网怕也没能找到真正有用的消息。
在我成功实现ADC_DMA之前,也是和大家一样,到处寻找相关消息以及求助ChatGPT,可想而知,把希望寄托于别人倒不如自己去摸索,这样自己更能知道缺什么做什么。。。
不多说了,请往下看
一、ADC_DMA
以下是我求助ChatGPT的示例代码:
#include <rtthread.h>
#include <board.h>
#include <rtdevice.h>#define ADC_SAMPLE_COUNT 100static rt_adc_device_t adc_device;
static rt_uint16_t adc_buffer[ADC_SAMPLE_COUNT];static void adc_dma_callback(rt_device_t dev, rt_size_t size)
{rt_adc_start(adc_device, ADC_MODE_DMA);
}static void adc_dma_thread_entry(void *parameter)
{rt_err_t result;/* 初始化ADC设备 */adc_device = (rt_adc_device_t)rt_device_find("adc");if (adc_device == RT_NULL){rt_kprintf("ADC device not found!\n");return;}/* 配置ADC设备参数 */struct rt_adc_msg msg;msg.channel = ADC_CHANNEL_0;msg.resolution = ADC_RESOLUTION_12BIT;msg.buf = adc_buffer;msg.count = ADC_SAMPLE_COUNT;msg.callback = adc_dma_callback;msg.user_data = RT_NULL;/* 启动ADC设备 */result = rt_adc_control(adc_device, RT_ADC_CMD_START, &msg);if (result != RT_EOK){rt_kprintf("Failed to start ADC device! Error code: %d\n", result);return;}while (1){/* 在这里可以对采集到的数据进行处理 */rt_thread_mdelay(1000);}
}int adc_dma_sample(void)
{rt_thread_t thread;thread = rt_thread_create("adc_dma",adc_dma_thread_entry,RT_NULL,1024,RT_THREAD_PRIORITY_MAX - 1,20);if (thread != RT_NULL)rt_thread_startup(thread);return 0;
}
ChatGPT: 这个示例代码中,首先我们需要使用 rt_device_find 函数来查找ADC设备。然后,我们使用 rt_adc_control 函数来配置ADC设备的参数,包括选择通道、分辨率、缓冲区和采样数量等。在参数配置完成后,我们使用 rt_adc_control 函数的 RT_ADC_CMD_START 命令来启动ADC设备,并指定了一个回调函数 adc_dma_callback,该回调函数在DMA传输完成后被调用。
在 adc_dma_thread_entry 函数中,我们使用 rt_adc_control 函数的 RT_ADC_CMD_START 命令来启动ADC设备,并在回调函数中再次调用 rt_adc_start 函数来触发下一次DMA传输。
在 adc_dma_thread_entry 函数的主循环中,可以对采集到的数据进行处理,例如打印到终端或进行其他计算。
最后,在 adc_dma_sample 函数中,我们创建一个线程来执行 adc_dma_thread_entry 函数,并将线程设置为最高优先级。
请注意,以上示例代码仅供参考,具体的实现可能会因硬件平台或RT-Thread版本的不同而有所差异。在使用时,请根据实际情况进行适当的修改和调试。
可发现,ChatGPT的代码有模有样的,但实际移植过来会出现各种指令或函数报错,因为它所提供的代码并不适用于你的当前环境,多说不说,但它是可以给你提供一个不错的路线。
在经过本人的多次尝试,我是用裸机的开发形式成功实现DMA传输,所以这里并没有依托于RT-Thread平台提供的软件库,运用平台提供的库函数肯定是可以实现的,经本人多次尝试还是未能成功实现,所以这里仅介绍依托于HAL库的开发形式。
- 第一步,进STM32 CubeMX 初始化设备


- 第二步,四步完成ADC_DMA初始化,MX_DMA_Init()、MX_ADC1_Init()为cubemx初始化自动生成
MX_DMA_Init();MX_ADC1_Init();HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adc_data1_origin,(uint32_t)6);HAL_ADC_Start(&hadc1);
- 第三步,直接打印,像什么找设备、打开设备的都不用管
while (1){rt_thread_mdelay(1000);rt_kprintf("\n\nadc0:%d\n",adc_data1_origin[0]);rt_kprintf("adc1:%d\n",adc_data1_origin[1]);rt_kprintf("adc2:%d\n",adc_data1_origin[2]);rt_kprintf("adc3:%d\n",adc_data1_origin[3]);rt_kprintf("adc4:%d\n",adc_data1_origin[4]);rt_kprintf("adc5:%d\n\n",adc_data1_origin[5]);}

至此,我都不敢相信 这就完事了
获取源码或学术交流联系下方即可👇👇👇
相关文章:
RT-Thread ADC_DMA
看到这里,相信大家已经尝试过网上各类ADC_DMA传输的文章,且大多都并不能实现,因为在RT-Thread中并没有找到关于ADC的DMA接口,在官方例程中有关DMA的传输也只有一个串口接收的介绍,找遍全网怕也没能找到真正有用的消息。…...
生成带依赖Jar 包的两种常用方式:IDEA打包工具:Artifacts 和 maven-shade-plugin
文章目录 前言1、IDEA打包工具:Artifacts1.1 创建Artifacts1.2 选择第三方jar文件1.3 打包Artifacts1.4 测试jar包 2、maven-shade-plugin2.1、pom文件添加2.2、打包2.3、测试jar包 总结 前言 当我们编写完Java程序后,为了提高执行效率通常会将应用程序…...
idea 插件开发日志绑定问题
错误日志 Searchable options index builder completed SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/gradle/caches/modules-2/files-2.1/com.jetbrains.intellij.idea/ideaIC/2021.2/b0727ceddea2b62b16825db9308e14a470198…...
Elasticsearch(ES)概述
文章目录 一.什么是Elasticsearch?1.正向索引和倒排索引2.Mysql和ES的概念对比3.安装elasticsearch、kibana 二.IK分词器三.索引库操作四.文档操作五.RestClient操作索引库1.初始化RestClient2.创建索引库3.删除索引库4.判断索引库是否存在 六.RestClient操作文档1.新增文档2.…...
网络入门---网络编程初步认识和实践
目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用,ip地址和MAC地址在网络通信时…...
Linux系统安装Docker-根据官方教程教程(以Ubuntu为例)
Linux系统安装Docker-根据官方教程教程(以Ubuntu为例) 1. 背景介绍2. 环境配置2.1 软件环境要求2.2 软件下载2.3 文档地址2.3 必备命令工具下载 3. 安装Docker3.1 使用root用户操作后续命令3.2 卸载可能存在的旧版本 4. 安装Docker4.1 更新依赖包4.2 配置…...
2023-12-03 LeetCode每日一题(可获得的最大点数)
2023-12-03每日一题 一、题目编号 1423. 可获得的最大点数二、题目链接 点击跳转到题目位置 三、题目描述 几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌&#x…...
【唐山海德教育】安全员b证的考试科目
安全员b证考试内容包括对安全生产知识和管理能力考核,采用书面或计算机闭卷考试方式,内容包括安全生产法律法规、安全管理和安全技术等内容。其中,法律法规占50%,安全管理占40%,土建综合安全技术占6%,机械设…...
吉他初学者学习网站搭建系列(4)——如何查询和弦图
文章目录 背景实现ChordDbvexchords 背景 作为吉他初学者,如何根据和弦名快速查到和弦图是一个必不可少的功能。以往也许你会去翻和弦的书籍查询,像查新华字典那样,但是有了互联网后我们不必那样,只需要在网页上输入和弦名&#…...
九章量子计算机:探索量子世界的革命性工具
九章量子计算机:探索量子世界的革命性工具 一、引言 九章量子计算机的推出,是近年来科技界最为引人瞩目的成就之一。这款基于量子力学的计算机,以其独特的计算方式和潜在的应用前景,引发了全球范围内的关注和讨论。本文将深入探讨九章量子计算机的原理、技术特点、应用前景…...
在 Linux 上修改 Oracle 控制文件、日志文件和数据文件的目录的脚本
以下是一个交互式的 Bash 脚本示例,用于在 Linux 上修改 Oracle 数据库控制文件、日志文件和数据文件的目录。脚本会要求您输入要修改的路径,并根据输入的路径执行相应的修改操作。 #!/bin/bash# 修改以下变量以匹配您的 Oracle 数据库设置 ORACLE_SID&…...
JavaScript 延迟加载的艺术:按需加载的最佳实践
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
HTML之实体和标签
HTML之实体和标签 实体标签meta标签语义化标签列表超链接 实体 如果我们需要在网页中书写一些特殊符号,则需要在html中使用【实体】(转义符) 实体语法: &实体的名字; <!DOCTYPE html> <html lang"en"> …...
【小布_ORACLE笔记】Part11-1--RMAN Backups
Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握: 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…...
卷积神经网络-3D医疗影像识别
文章目录 一、前言二、前期工作1. 介绍2. 加载和预处理数据 二、构建训练和验证集三、数据增强四、数据可视化五、构建3D卷积神经网络模型六、训练模型七、可视化模型性能八、对单次 CT 扫描进行预测 一、前言 我的环境: 语言环境:Python3.6.5编译器&a…...
C++基础 -33- 单目运算符重载
单目运算符重载格式 a和a通过形参确定 data1 operator() {this->a;return *this; }data1 operator(int) {data1 temp*this;this->a;return temp; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int…...
[传智杯 #3 初赛] 课程报名
题目描述 传智播客推出了一款课程,并进行了一次促销活动。具体来说就是,课程的初始定价为 v 元;每报名 m 个学员,课程的定价就要提升 a 元。由于课程能够容纳的学生有限,因此报名到 n 人的时候就停止报名。 现在老师…...
华为OD机试 - 悄悄话(Java JS Python C)
题目描述 给定一个二叉树,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 给定二叉树 0 9 20 -1 -1 15 7 -1 -1 -1 -1 …...
LeetCode - 965. 单值二叉树(C语言,二叉树,配图)
二叉树每个节点都具有相同的值,我们就可以比较每个树的根节点与左右两个孩子节点的值是否相同,如果不同返回false,否则,返回true。 如果是叶子节点,不存在还孩子节点,则这个叶子节点为根的树是单值二叉树。…...
每日一题(LeetCode)----哈希表--三数之和
每日一题(LeetCode)----哈希表–三数之和 1.题目(15. 三数之和) 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
网页端 js 读取发票里的二维码信息(图片和PDF格式)
起因 为了实现在报销流程中,发票不能重用的限制,发票上传后,希望能读出发票号,并记录发票号已用,下次不再可用于报销。 基于上面的需求,研究了OCR 的方式和读PDF的方式,实际是可行的ÿ…...
