RTT(RT-Thread)ADC设备(RTT保姆级介绍)

news2024/9/20 22:50:31

目录

ADC设备

前言

ADC相关参数说明

访问ADC设备

配置ADC设备

ADC实例

硬件设计 

软件设计


ADC设备

前言

ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。

对于ADC的详细介绍和在STM32中的裸机应用可参考以下博客

ADC电压采集(基于STM32hal库)(详细介绍)_竹烟淮雨的博客-CSDN博客

ADC电压采集(基于STM32hal库)(保姆级应用)_竹烟淮雨的博客-CSDN博客

ADC相关参数说明

  • 分辨率:

分辨率以二进制(或十进制)数的位数来表示,一般有 8 位、10 位、12 位、16 位等,它说明模数转换器对输入信号的分辨能力,位数越多,表示分辨率越高,恢复模拟信号时会更精确。

比如电压访问在0-3.3V,如果使用12Bit的分辨率的话,最大表示的数字量为2^11-1=4095(范围为0-4095),也就是把3.3V分为4096份,实际电压值=模拟电压值/4095*3.3V

  • 精度:

精度表示 ADC 器件在所有的数值点上对应的模拟值和真实值之间的最大误差值,也就是输出数值偏离线性最大的距离。

  • 转换速率:

转换速率是指 A/D 转换器完成一次从模拟到数字的 AD 转换所需时间的倒数。例如,某 A/D 转换器的转换速率为 1MHz,则表示完成一次 AD 转换时间为 1 微秒。

访问ADC设备

应用程序通过 RT-Thread 提供的 ADC 设备管理接口来访问 ADC 硬件,相关接口如下所示:

  • 查找 ADC 设备

rt_device_t rt_device_find(const char* name);

  • 使能 ADC 通道

rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel)

@dev ADC 设备句柄

@channel ADC 通道

  • 读取 ADC 通道采样值(读取到的是模拟量转成数字量后的值)

rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel);

@dev ADC 设备句柄

@channel ADC 通道

  • 关闭 ADC 通道

rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel);

仅仅有这些函数接口,并不能够实现ADC设备的功能,我们还需要进行相应的配置。

配置ADC设备

打开我们的工程源码中的board.h,关于芯片的一些外设的配置基本上都在board.h中去配置,关于我们之前的时钟、串口配置,以及IIC、SPI、PWM等等的配置。

打开board.h找到ADC的相关配置步骤描述

/** if you want to use adc you can use the following instructions.
 *
 * STEP 1, open adc driver framework support in the RT-Thread Settings file
 *
 * STEP 2, define macro related to the adc
 *                 such as     #define BSP_USING_ADC1
 *
 * STEP 3, copy your adc init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file
 *                 such as     void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
 *
 * STEP 4, modify your stm32xxxx_hal_config.h file to support adc peripherals. define macro related to the peripherals
 *                 such as     #define HAL_ADC_MODULE_ENABLED
 *
 */
  • 步骤一:开启ADC驱动框架的支持

  • 步骤二:定义一个ADC设备相关的宏

共有三种选择

根据我们的STM32开发板公有三个ADC外设,这里选择使用ADC1

  • 步骤三:拷贝ADC初始化函数,通过CubeMX生成stm32xxxx_hal_msp.c后,将相应的初始化函数拷贝到board.c中
  • 步骤四:修改hal层配置文件,使其支持ADC外设

ADC实例

我们在这里以ADC的独立模式单通道采集模式为例,来使用我们RTT的ADC设备。

硬件设计 

我们的霸道开发板板载了一个贴片滑动变阻器,滑动变阻器的滑片端连接到了 STM32 的 PC1 引脚。

贴片滑动变阻器的动触点通过连接至 STM32 芯片的 ADC 通道引脚。当我们旋转滑动变阻器调 节旋钮时,其动触点电压也会随之改变,电压变化范围为 0~3.3V,亦是开发板默认的 ADC 电压 采集范围。

软件设计

我们接着前面配置ADC设备的步骤进行。

1.首先寻找ADC1设备句柄

2.接着如果查找到ADC,则打开我们的ADC设备,这里使用专属的使能函数,注意我们需要对dev进行类型转换为rt_adc_device_t

3.使能完成之后,我们就可以继续数据读取了。这里我们开启一个线程来读取ADC1的通道11。

(1)动态创建线程

(2)设置入口函数

(3)开启线程

4.在线程处理函数中,通过rt_adc_read函数进行ADC通道数据的读取

5.此外要注意在线程处理中加上延时,这样可以让线程主动释放CPU资源,让CPU去调度其它线程

6.完善打印结果

7.将我们的CubeMX生成的代码复制到board.c中

void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(adcHandle->Instance==ADC1)
  {
  /* USER CODE BEGIN ADC1_MspInit 0 */

  /* USER CODE END ADC1_MspInit 0 */
    /* ADC1 clock enable */
    __HAL_RCC_ADC1_CLK_ENABLE();

    __HAL_RCC_GPIOC_CLK_ENABLE();
    /**ADC1 GPIO Configuration
    PC1     ------> ADC1_IN11
    */
    GPIO_InitStruct.Pin = GPIO_PIN_1;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    /* ADC1 interrupt Init */
    HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
  /* USER CODE BEGIN ADC1_MspInit 1 */

  /* USER CODE END ADC1_MspInit 1 */
  }
}

 8.编译下载,注意要加上adc.h头文件

运行结果,调节电压旋钮,模拟量正常输出,但数字量输出是%f???

(这个问题琢磨半天尚未解决,rt_kprintf("Analog val:%.3f\n\r\n",(float)val/4096.0*3.3);输出的结果是%f???,同样我将%.3f换成%d或%u输出的结果却是很大的随机数,希望有大佬可以帮忙解决!!)

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

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

相关文章

C语言暑假刷题冲刺篇——day2

目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练 ✨其他专栏:代码小游戏C语言初阶🤝希望作者的文章能对你…

基于OFDM+64QAM系统的载波同步matlab仿真,输出误码率,星座图,鉴相器,锁相环频率响应以及NCO等

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 2.1 OFDM原理 2.2 64QAM调制 2.3 载波同步 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................…

图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009

首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性

RTT(RT-Thread)IIC设备

目录 IIC设备 IIC介绍 电气连接 IIC总线时序 IIC协议 读协议 写协议 访问I2C总线设备 查找 I2C 总线设备 I2C数据读写(数据传输) 配置IIC步骤 IIC设备 IIC介绍 I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发…

【vue3】对axios进行封装,方便更改路由并且可以改成局域网ip访问(附代码)

对axios封装是在main.js里面进行封装,因为main.js是一个vue项目的入口 步骤: 在1处创建一个axios实例为http,baseURL是基础地址(根据自己的需求写),写了这个在vue界面调用后端接口时只用在post请求处写路由…

【Git】(三)回退版本

1、git reset命令 1.1 回退至上一个版本 git reset --hard HEAD^ 1.2 将本地的状态回退到和远程的一样 git reset --hard origin/master 注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。HEAD 说明:HEAD 表示当前版本HEAD^ 上…

深入探究Linux黑客渗透测试:方法、工具与防御

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 随着信息技术的迅…

【idea工具报错】程序包sun.misc不存在 的问题如何解决

【idea工具报错】程序包sun.misc不存在 的问题如何解决 idea工具出现下面这个报错 : java: 程序包sun.misc不存在 赤裸裸的报错,但是idea在编译代码 build的时候就报上面这个错误。 先说我的解决办法吧: 上面第3步这里全部改成jdk1.8的配置…

数据血缘深度透析

学习数据血缘也好几个月了,网上的资料也看了很多,有了一些自己的理解,所以归纳一下,分享 出来,欢迎批评指正! 数据血缘是什么? 我觉得刚开始学习数据血缘肯定会有这样一个问题。比较官方、比较…

Java线程池的七个参数

线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler。 一、corePoolSize 核心线程数,是指线程池中长期存活的线程数。int 类型。可以理解为长期存在的、“常驻的”线程。就好…

【OpenGauss源码学习 —— 列存储(创建表)】

列存储 什么是列存储?语法实现语法格式参数说明示例源码分析(创建表)语法层(Gram.y)子模块(utility.cpp) 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们…

设置Windows主机的浏览器为wls2的默认浏览器

1. 准备工作 wsl是可以使用Windows主机上安装的exe程序,出于安全考虑,默认情况下改功能是无法使用。要使用的话,终端需要以管理员权限启动。 我这里以Windows Terminal为例,介绍如何默认使用管理员权限打开终端,具体…

煤矿调度IP语音对讲广播模块一键求助对讲矿用调度通信系统SIP语音对讲求助终端

硬件接口描述 SV-2101VP/ SV-2103VP系列网络音频模块,所有外部连接采用端子,电源采用2.0mm的端子,网络采用标准RJ45连接器,其他都是1.25mm的连接器。 端口类型定义 P ———— 电源 AI ———— 模拟输入(在这里是音…

diffusion model classifier-guided与classifier-free的区别

classifier-guided 训练阶段 diffusion model 和 classifier分开训练。 diffusion model的数据训练数据为 classifier的数据训练数据为 生成图片阶段 每一个时间步的降噪中会用当前时间步图片在classifier的类别梯度来调整均值。(如上图所示) 之前写…

智慧云实训室建设方案

一、智慧云系统概述 智慧云系统是一种基于云计算技术和虚拟化技术的系统,用于实现各种仿真和模拟任务。它可以提供强大的计算能力和资源管理,为用户提供灵活、高效、可扩展的仿真环境。 该系统通常由一组服务器、网络和存储设备组成,这些设备…

Vue轻量级富文本编辑器-Vue-Quill-Editor

效果图&#xff1a; 下载Vue-Quill-Editor npm install vue-quill-editor --save 下载quill&#xff08;Vue-Quill-Editor需要依赖&#xff09; npm install quill --save vue项目中使用代码 <template><div class"edit_container"><quill-edito…

linux系统安装nginx操作步骤

话不多说&#xff0c;直接上教程 一&#xff1a;安装依赖 输入命令&#xff1a;yum install -y gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel 二&#xff1a;下载nginx安装包 输入命令&#xff1a;wget http://nginx.org/download/nginx-1.24.0.tar.gz 用…

Flink内核源码解析

Flink内核源码 Flink RPC 网络通信框架Akka 以往&#xff0c;我们接触过非常多的大数据技术栈相关的框架&#xff0c;用的比较多的大数据相关组件&#xff0c;常用的RPC实现技术如下&#xff1a; 技术组件RPC实现HadoopNIO Protobuf (Protobuf即Protocol Buffers&#xff0…

iOS设计规范是什么?都有哪些具体规范

iOS设计规范是苹果为移动设备操作系统iOS制定的设计指南。iOS设计规范的制定保证了苹果应用在外观和操作上的一致性和可用性&#xff0c;从而提高了苹果界面设计的用户体验和应用程序的成功性。本文将从七个方面全面分析iOS设计规范。 1.iOS设计规范完整版分享 由「即时设计」…

VS2019+Qt5.15.2 编译 QtWebEngine(带音视频解码)

前言 QtWebEngine 是 Qt 框架的一部分&#xff0c;用于构建现代 Web 浏览器功能。本篇教程将向您展示如何在 Visual Studio 2019 中编译 QtWebEngine 5.15.2 源码&#xff0c;并配置以支持音视频解码功能。 准备工作 1、源码下载 2、源码修改&#xff0c;参考Qt Code Review…