RT-Thread Studio学习(十八)ADC+TIM+DMA

article/2025/7/26 9:49:31

RT-Thread Studio学习(十八)ADC+TIM+DMA

  • 一、简介
  • 二、新建RT-Thread项目并使用外部时钟
  • 三、启用ADC
  • 四、修改代码
  • 五、测试

一、简介

本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用ADC设备。硬件及开发环境如下:

  • OS WIN10
  • STM32F407VET6
  • STM32CubeMX v6.10.0
  • STM32Cube MCU Package for STM32F4 Series v1.28.2
  • RT-Thread Studio v2.2.9
  • RT-Thread Source Code v5.1.0
  • STM32F4 chip support packages v0.2.3

二、新建RT-Thread项目并使用外部时钟

打开RT-Thread Studio软件新建基于芯片的项目,并使用外部时钟系统,具体参见《RT-Thread Studio学习(一)使用外部时钟系统》。

三、启用ADC

  1. 打开ADC驱动框架
    RT-Thread Setting 中借助图形化配置工具打开软件ADC的驱动框架,如下图所示:
    在这里插入图片描述
  2. 定义ADC相关的宏
    board.h文件中使能宏定义:
#define BSP_USING_ADC3

.\cubemx\Inc\stm32f4xx_hal_conf.h中使能宏定义:

#define HAL_ADC_MODULE_ENABLED
  1. 复制ADC初始化函数
    双击RT-Thread Studio工程中的cubemx.ioc文件,使能ADC3,具体如下图:
    在这里插入图片描述
    ADC3的4个模拟输入分别对应引脚PC0、PC1、PC2和PC3。
    ADC3的参数设置如下图:

    DMA的参数设置如下:
    在这里插入图片描述
    ADC3使用TIM3进行触发,TIM3的配置如下:
    在这里插入图片描述

四、修改代码

在Sconscript中添加如下代码,可以省去将HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle)等函数复制到board.c的步骤。

src = Split('''
Src/stm32f4xx_hal_msp.c
Src/main.c
Src/gpio.c
Src/tim.c
Src/adc.c
Src/dma.c

在这里插入图片描述
修改main.c文件,添加DMA中断等相关函数

extern TIM_HandleTypeDef htim3;
extern ADC_HandleTypeDef hadc3;void DMA2_Stream0_IRQHandler(void)
{/* USER CODE BEGIN DMA2_Stream0_IRQn 0 */rt_interrupt_enter();/* USER CODE END DMA2_Stream0_IRQn 0 */HAL_DMA_IRQHandler(&hdma_adc3);/* USER CODE BEGIN DMA2_Stream0_IRQn 1 */rt_interrupt_leave();/* USER CODE END DMA2_Stream0_IRQn 1 */
}/***  ADC转换完成回调函数*/
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{if( hadc == &hadc3){HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_2);uint32_t adcValue=0, Volt;for(uint8_t i=0; i<4;i++){// The buffer contains the conversion results of 4 channels.adcValue=buffer[i];Volt=3300*adcValue;Volt=Volt>>12;rt_kprintf("ADC[%d] = %ld.%03ld\r\n",i,Volt/1000,Volt%1000 );}}
}void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
{rt_kprintf("HAL_ADC_ErrorCallback.");
}

main函数中添加代码:

int main(void)
{
...MX_GPIO_Init();MX_DMA_Init();  // DMA初始化必须要在前面MX_ADC3_Init();MX_TIM3_Init();HAL_ADC_Start_DMA(&hadc3, buffer, 4);  // Start ADC3, DMA modeHAL_TIM_Base_Start(&htim3);            // Start TIM3
...
}

五、测试

将引脚PC1和3V3短接,运行结果如下:
在这里插入图片描述
PE2作为调试引脚,用逻辑分析仪观察结果如下:
在这里插入图片描述
间距为2.968s,与TIM3设定的参数吻合。


http://www.hkcw.cn/article/tWrUkYpJkg.shtml

相关文章

ES分词搜索

ES的使用 前言作者使用的版本作者需求 简介ES简略介绍ik分词器简介 使用es的直接简单使用es的查询 es在java中使用备注说明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一个业务需求&#xff0c;我们系统有份数据被…

Drawio编辑器二次开发

‌ Drawio &#xff08;现更名为 Diagrams.net &#xff09;‌是一款完全免费的在线图表绘制工具&#xff0c;由 JGraph公司 开发。它支持创建多种类型的图表&#xff0c;包括流程图、组织结构图、UML图、网络拓扑图、思维导图等&#xff0c;适用于商务演示、软件设计等多种场景…

破解高原运维难题:分布式光伏智能监控系统的应用研究

安科瑞刘鸿鹏 摘要 高原地区光照资源丰富&#xff0c;具有发展分布式光伏发电的巨大潜力。然而&#xff0c;该地区复杂的气候环境、地形地貌和运维条件对光伏电站的运行与维护带来严峻挑战。本文结合Acrel1000DP分布式光伏监控系统的技术特点和典型应用案例&#xff0c;探讨其…

Golang|分布式搜索引擎中所使用到的设计模式

迭代器模式 定义&#xff1a;在遍历接口时&#xff0c;提供统一的方法函数供调用&#xff0c;保持一致性。核心思想&#xff1a;与大众习惯保持一致&#xff0c;方便第三方实现容器类时保持一致。常见方法&#xff1a;如next()方法&#xff0c;适用于所有集合类&#xff0c;简化…

招工招聘系统开发——适配多元场景,满足企业多样化招聘需求

不同的企业有不同的招聘需求&#xff0c;不同的岗位也有不同的招聘特点。我们的招工招聘系统开发&#xff0c;充分考虑了企业的多样化需求&#xff0c;适配多元场景&#xff0c;为企业提供全方位的招聘解决方案。 对于大型企业来说&#xff0c;招聘规模大、岗位种类多、招聘流…

优化版本,增加3D 视觉 查看前面的记录

上图先 运来的超出发表上限&#xff0c;重新发。。。 #11:06:57Current_POS_is: X:77Y:471Z:0U:-2 C:\Log\V55.txt import time import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import socket import threading from date…

《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构

基本的IP地址结构 分类寻址 早期Internet采用分类地址&#xff08;Classful Addressing&#xff09;&#xff0c;将IPv4地址划分为五类&#xff1a; A类和B类网络号通常浪费太多主机号&#xff0c;而C类网络号不能为很多站点提供足够的主机号。 子网寻址 子网&#xff08;Su…

JNI开发流程

一. 引言 最近在做一个自己的项目&#xff0c;就是基于FastDDS封装一套JAVA库&#xff0c;让android和java应用可以使用dds的功能。 由于FastDDS是使用C编写的开源库&#xff0c;因此java的类库想要调用FastDDS的接口&#xff0c;需要额外编写一个JNI层的动态库对FastDDS的接口…

powershell 中 invoke-expression 报错解决

打开powershell就出现这个报错&#xff1a; 网上搜了也没有很好的解决办法&#xff0c;抱着一点点期待&#xff0c;问了豆包 根据豆包的指示&#xff0c;在终端执行以下 几个命令&#xff0c;报错解决了&#xff08;开心万岁&#xff09; # 移除多余的引号和空路径 $pathArra…

交错推理强化学习方法提升医疗大语言模型推理能力的深度分析

核心概念解析 交错推理:灵活多变的思考方式 交错推理(Interleaved Reasoning)是一种在解决复杂问题时,不严格遵循单一、线性推理路径,而是交替、灵活应用多种推理策略的方法。这种思维方式与人类专家在处理复杂医疗问题时的思考模式更为接近,表现为一种动态、适应性强的…

【下载ECharts最简单的方法】

最简单下载ECharts的方法 对于简单项目&#xff0c;我们需要的echarts文件是echarts.min.js&#xff0c;以下是下载ECharts的最简单方法&#xff1a; 方法一&#xff1a;直接下载&#xff08;推荐初学者&#xff09; 访问ECharts官网&#xff1a;https://echarts.apache.org…

西藏建筑安全员 B 证考试中常见的 单选题及解析

西藏建筑安全员 B 证考试中常见单选题及解析&#xff0c;涵盖安全生产管理、法律法规、安全技术等核心考点&#xff0c;结合西藏地区建筑施工特点整理&#xff0c;帮助理解考试重点&#xff1a; 一、安全生产管理基础 1. 安全管理原则与制度 1、建筑施工安全管理的方针是&am…

案例分享--血管支架的径向力分布评估--DIC数字图像相关技术用于生物医学-高置信度DIC测量

医疗设备制造商有责任创造和确保高效且安全的产品&#xff0c;以守护人类的健康。EchoBio LLC公司的Kenneth Perry博士是植入式医疗设备实验验证行业的领导者和专家。Perry博士的一项研究任务是评估用于疏通血管阻塞的编织自膨胀支架的径向力分布。Perry博士特别需要关注径向力…

[Javascript进阶]JSON.stringify与JSON.parse详解

JSON.stringfy JSON.stringify 的核心作用是&#xff1a; &#x1f449; 将 JS 的对象、数组、基本类型转换为合法的 JSON 字符串。 手撕实现时&#xff0c;要考虑以下几个方面&#xff1a; 基本类型处理&#xff1a; string → 加上双引号&#xff0c;注意转义&#xff1b;nu…

VirtualBox给Rock Linux9.x配置网络

写这篇文章之前&#xff0c;先说明一下&#xff0c;我参考的是我之前写的《VirtualBox Linux网络配置》 我从CentOS7转到了Rock9&#xff0c;和配置Centos7一样&#xff0c;主流程没有变化&#xff0c;变化的是Rock9.x中的配置文件和使用的命令。 我再说一次&#xff0c;因为主…

逆向分析基础总结

一、了解计算机部件 CPU&#xff1a; 中央处理器。有三个重要的部件&#xff1a; 逻辑部件&#xff1a;负责算数运算&#xff0c;包括定点运算、浮点运算等。 寄存器部件&#xff1a;负责临时数据存储&#xff0c;一个CPU包含多个寄存器。 控制部件&#xff1a;负责发出指令所…

企业信息化集成方案:聚水潭·奇门数据对接金蝶云星空

聚水潭奇门数据集成到金蝶云星空&#xff1a;销售退货单更新方案 在企业信息化管理中&#xff0c;数据的高效流动和准确对接是实现业务流程自动化的关键。本文将分享一个实际案例&#xff0c;展示如何通过轻易云数据集成平台&#xff0c;将聚水潭奇门系统中的销售退货数据无缝…

多功能文档处理工具推荐

软件介绍 今天为大家介绍一款功能强大的文档编辑工具坤Tools&#xff0c;这是一款在吾爱论坛广受好评的办公软件。 软件背景 坤Tools是由吾爱论坛用户分享的软件&#xff0c;在论坛软件榜单上长期位居前列&#xff0c;获得了用户的一致好评。 软件性质 这是一款完全离线、…

软考-系统架构设计师-第十八章 面向服务架构设计理论与实践

面向服务架构设计理论与实践 18.1 SOA 的相关概念18.2 SOA 的发展历史18.3 SOA 的参考架构18.4 SOA 主要协议和规范18.5 SOA 设计的标准要求18.6 SOA 的作用与设计原则18.7 SOA 的设计模式18.8 构建 SOA 架构时应该注意的问题18.9 SOA 实施的过程 18.1 SOA 的相关概念 &#x…

AI书签管理工具开发全记录(五):后端服务搭建与API实现

文章目录 AI书签管理工具开发全记录&#xff08;四&#xff09;&#xff1a;后端服务搭建与API实现前言 &#x1f4dd;1. 后端框架选型 &#x1f6e0;️2. 项目结构优化 &#x1f4c1;3. API路由设计 &#x1f9ed;分类管理书签管理 4. 数据模型定义 &#x1f4be;分类模型&…