关于使用RT-Thread系统读取stm32的adc无法连续转换的问题解决

news2025/2/24 11:41:10

关于使用RT-Thread系统读取stm32的adc无法连续转换的问题解决

今天发现rt系统的adc有一个缺陷(也可能是我移植的方法有问题,这就不得而知了!),就是只能单次转换,事情是这样的:
我在stm32的RT-Thread系统bsp上添加了adc相关驱动,但是在写完验证程序在板子上跑的时候,我发现用下面的程序是只会转换一次adc的,也就是说,只会测量第一次的电压值,之后再调用rt_adc_read函数,得到的一直都是第一次的值。

我当时的rt应用程序如下:


#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#define ADC_DEV_NAME        "adc1"  /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     6       /* ADC 通道 */
#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */

void my_adc_test(void)
{
	rt_adc_device_t adc_dev;            /* ADC 设备句柄 */
	rt_uint32_t value;
	float vol;
	
	/* 查找设备 */
	adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
	if(adc_dev==RT_NULL)
	{
		rt_kprintf("can't find adc!\r\n");
		return;
	}
	rt_kprintf("find adc successfully!\r\n");

	/* 使能设备 */
	rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

	while(1)
	{
		/* 读取采样值 */
		value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
		/* 转换为对应电压值 */
		vol = (float)value * REFER_VOLTAGE / CONVERT_BITS;
		rt_kprintf("the voltage is :%d.%02d \n", (int)vol / 100, (int)vol % 100);
		rt_kprintf("value=%d\r\n",value);
		rt_thread_delay(500);
	}
	/* 关闭通道 */
	rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
}

void show_adc1_pin(void)
{
	rt_kprintf("\r\n");
	rt_kprintf("The adc1 pins:\r\n");
	rt_kprintf("IN6--->A6\r\n");
	rt_kprintf("IN7--->A7\r\n");
	rt_kprintf("IN8--->B0\r\n");
	rt_kprintf("IN9--->B1\r\n");
}
MSH_CMD_EXPORT(show_adc1_pin, show_adc1_pin);

很明显,RT-Thread系统的bsp驱动并没有开启stm32的连续adc转换。解决办法只能是每次转换前都失能,使能一次adc。我不可能再去更改bsp驱动的,因为下一次重新使用env工具一配置,之前写的都被清除了。所以只能用这种笨的办法,哪位仁兄有更好的解决办法可以探讨一下哈

解决之后的程序如下:


#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#define ADC_DEV_NAME        "adc1"  /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     6       /* ADC 通道 */
#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */

void my_adc_test(void)
{
	rt_adc_device_t adc_dev;            /* ADC 设备句柄 */
	rt_uint32_t value;
	float vol;
	
	/* 查找设备 */
	adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
	if(adc_dev==RT_NULL)
	{
		rt_kprintf("can't find adc!\r\n");
		return;
	}
	rt_kprintf("find adc successfully!\r\n");

	/* 使能设备 */
	rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

	while(1)
	{
		/* 读取采样值 */
		value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
		/* 转换为对应电压值 */
		vol = (float)value * REFER_VOLTAGE / CONVERT_BITS;
		rt_kprintf("the voltage is :%d.%02d \n", (int)vol / 100, (int)vol % 100);
		rt_kprintf("value=%d\r\n",value);
		rt_thread_delay(500);
		
		//加上下面两行就可以连续转换
		rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
		rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
	}
	/* 关闭通道 */
	rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
}

void show_adc1_pin(void)
{
	rt_kprintf("\r\n");
	rt_kprintf("The adc1 pins:\r\n");
	rt_kprintf("IN6--->A6\r\n");
	rt_kprintf("IN7--->A7\r\n");
	rt_kprintf("IN8--->B0\r\n");
	rt_kprintf("IN9--->B1\r\n");
}

MSH_CMD_EXPORT(show_adc1_pin, show_adc1_pin);

实验现象:
adc

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

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

相关文章

中国人民大学与加拿大女王大学金融硕士项目——金融行业的你怎么能不知道?

虽然金融圈总是被内行各种吐槽&#xff0c;如工作时长久、内卷严重、做不完的报告、以及分析不完的数据等等&#xff0c;但不得不承认&#xff0c;金融行业的确给予了人实现财富自由的机会。人生的梦想与碎银几两同样重要。想要在金融圈混得更好就不能停下提升的脚步&#xff0…

全网首发!奔驰宝马奥迪卡带机卡带通道激活模块,无损安装可以接2路AUX

文章目录 1.前言2.时序逆向分析2.1协议分析2.2卡带音频通道引出 3、PCB设计4、程序设计5、焊接调试6、结语 1.前言 ​ 之前写过四篇关于车机增加音频输入的方法。 1、07宝来经典车机CD收音机&#xff08;RC668&#xff09;改装增加蓝牙播放音乐 2、全网首发&#xff01;老大…

基于共享内存 实现Python 和c++ 传输图片

需求&#xff1a;c 将图片写入共享内存&#xff0c;python读取。将c写的共享内存的操作封装为一个so库&#xff0c;c 和python共同调用这个库&#xff0c;便于双方的操作&#xff0c;省去信号量的管理操作。 一,c写入端 int main(int argc, char **argv) {SharedMemoryOption…

D358周赛复盘:哈希表模拟⭐⭐+链表乘法翻倍运算(先反转)⭐⭐⭐

文章目录 2815.数组中的最大数对和思路完整版 2816.翻倍以链表形式表示的数字&#xff08;先反转&#xff0c;再处理进位&#xff09;思路完整版 补充&#xff1a;206.反转链表&#xff08;双指针法&#xff09;完整版 2817.限制条件下元素之间的最小绝对差&#xff08;cpp不知…

每秒百万级高效C++异步日志实践

一个高效可拓展的异步C日志库&#xff1a;RING LOG&#xff0c;本文分享了了其设计方案与技术原理等内容 详细代码见github路径&#xff1a;点击打开链接 导论 同步日志与缺点 传统的日志也叫同步日志&#xff0c;每次调用一次打印日志API就对应一次系统调用write写日志文件…

国际音标学习笔记

目录 1.单元音2.双元音3.辅音4.音节5.自然拼读法则5.1辅音字母的音标 1.单元音 我觉得单纯的音标并不好记住&#xff0c;所以就跟着老师整&#xff0c;根据单词记住音标的发音&#xff0c;以下是我的理解 音标对应的单词汉化iis衣əer饿ɔorigin奥u/ʊwoman五ʌart啊eanything哎…

哪个视觉语言模型更优?InstructBLIP、MiniGPT-4?全面评估基准LVLM-eHub告诉你

夕小瑶科技说 原创 作者 | 王思若 LLaMA、GPT-3等大型语言模型实现了对自然语言强大的理解和推理能力&#xff0c;为AI社区构筑了强大的语言基座模型。进而&#xff0c;继续迭代的GPT-4&#xff0c;更是赋予了模型处理图像的视觉能力。 如今&#xff0c;构建强大的多模态模型…

有源医疗器械技术要求编写要求之附录内容

目录 一、附录A中主要安全特征内容 二、附录内容简介 1、按防电击类型分类: 2、按防电击的程度分类: 3.按对进液的防护程度进行分类: 4.按在与空气混合的易燃麻醉气或与氧或氧化亚氮混合的易燃麻醉气况下使用时的安全程度分类: 6.设备的额定电压和频率 7.设备的输入功率…

QT 发布软件基本操作

一、配置环境变量 找到Qt安装时的bin目录的路径&#xff1a;D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin&#xff0c;将目录拷贝至下述环境变量中。 打开计算机的高级系统设置 选中环境变量-->系统变量-->Path 点击编辑-->新建-->粘贴 二、生成发布软件的可执行程序 …

【Python从入门到进阶】34、selenium基本概念及安装流程

接上篇《33、使用bs4获取星巴克产品信息》 上一篇我们介绍了如何使用bs4来解析星巴克网站&#xff0c;获取其产品信息。本篇我们来了解selenium技术的基础。 一、什么是selenium&#xff1f; Selenium是一种用于自动化Web浏览器操作的开源工具。它提供了一组API&#xff08;应…

SpringBoot——整合Mongodb

简单介绍 Mongdb是一个开源&#xff0c;高性能&#xff0c;无模式的文档型数据库&#xff0c;NoSQL数据库产品中的一种&#xff0c;是最像关系型数据库的非关系型数据库。 使用场景 用户数据 存储位置&#xff1a;数据库特征&#xff1a;永久性存储&#xff0c;修改频率极低游…

【C++】C++ 引用详解 ⑩ ( 常量引用案例 )

文章目录 一、常量引用语法1、语法简介2、常引用语法示例 二、常量引用语法1、int 类型常量引用示例2、结构体类型常量引用示例 在 C 语言中 , 常量引用 是 引用类型 的一种 ; 借助 常量引用 , 可以将一个变量引用 作为实参 传递给一个函数形参 , 同时保证该值不会在函数内部被…

可观测性用观测云,观测云护航「杭州亚运会」

2023 年亚洲运动会定于 2023 年 9 月 23 日至 10 月 8 日在中国杭州举办&#xff0c;这是在党的二十大召开后&#xff0c;我国疫情防控措施优化调整后举办的最大规模、最高水平的国际综合性运动会&#xff0c;意义十分重大。杭州亚组委以「举办一届史上最成功的亚运会」为工作目…

【0901作业】QTday3 对话框、发布软件、事件处理机制,使用文件相关操作完成记事本的保存功能、处理键盘事件完成圆形的移动

目录 一、思维导图 二、作业 2.1 使用文件相关操作完成记事本的保存功能 2.2 处理键盘事件完成圆形的移动 一、思维导图 二、作业 2.1 使用文件相关操作完成记事本的保存功能 void Widget::on_saveBtn_clicked() {QString filename QFileDialog::getSaveFileName(this,&…

MySQL数据库学习【进阶篇】

MySQL数据库学习进阶篇 MySQL进阶篇已经更新完毕&#xff0c;点击网址查看&#x1f449;&#xff1a;MySQL数据库进阶篇

【点击checkbox复选框,显示or隐藏某区域】

功能&#xff1a; 1. 选中复选框&#xff0c;显示隐藏的区域&#xff1b; 2. 取消选中&#xff0c;再隐藏该显示的区域。 方法1&#xff1a;在layui jquery框架下 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta char…

接口测试系列 —— 什么是接口测试?

接口测试系列 为什么要做这个事情&#xff1f; 对自己过往在接口测试上的经验&#xff0c;写一个小结的系列文章&#xff0c;是一个系统性的思考和知识构建。发布的同时&#xff0c;也是希望获得更多感兴趣的同学的意见和反馈&#xff0c;可以把这个部分做的更好。 接口测试概…

充电比加油还快?一秒一公里,全液冷超充项目试点,5 年全覆盖?

华为中国数字能源旗舰峰会广西站在桂林举行&#xff0c;标志着桂林在数字能源领域的迈进。与此同时&#xff0c;桂林市和华为数字能源展开了合作&#xff0c;启动了全液冷超充示范项目&#xff0c;为城市的电动车充电基础设施添砖加瓦。 根据华为数字能源技术有限公司副总裁何波…

如何解决微信收款异常问题

一、自查原因 当您遇到微信收款异常问题时&#xff0c;首先需要了解异常的原因。可能的原因包括违反微信支付相关规定、存在异常交易行为、账户安全问题等。了解原因后&#xff0c;您可以采取相应的措施进行处理。 二、联系客服 您可以通过微信支付官方客服渠道咨询具体的问题&…

Is f(z)=1/z truly an analytic function

https://math.stackexchange.com/questions/755566/is-fz-1-z-truly-an-analytic-function