【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块

一、电位器模块

(1)资源介绍

        🔅原理图 

        蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2,所有拓展模块均可直接安装在 Lora 终端上使用;

图1        拓展接口

         电位器模块电路原理图如下所示:

图2        电位器模块电路原理图

         通过两张电路图连接可知,引脚资源配置情况为:

表1 引脚资源配置情况
Pot & LEDMCU
AIN1PB1
AIN2PB0
LD1PB6
LD2PB7
        🔅采集原理

        在 STM32L071 系列微控制器中嵌入了原生的12位模数转换器,通过硬件过采样扩展到16位模数转换器。它有多达19个多路复用通道,允许它测量来自16个外部和3个内部来源的信号。各种通道的 A/D 转换可以在单、连续、扫描或不连续模式下进行。ADC的结果存储在左对齐或右对齐的16位数据寄存器中。
        16个外部通道在转换时分为注入通道和规则通道:

  • 规则通道:

        最多有16路,相当于正常运行的程序,平时ADC的转换都是使用规则通道来实现的;

  • 注入通道:

        最多有4路,相当于中断,当注入通道需要转换时,规则通道的转换就会停止,优先执行注入通道的转换,当注入通道转换完成后,再继续执行规则通道的转换。

(2)STM32CubeMX 软件配置


🔅“工程建立、时钟树配置、Debug 串行线配置、代码生成配置” 在下文中有讲解,这里不再赘述❗️

【蓝桥杯——物联网设计与开发】基础模块1- GPIO输出icon-default.png?t=N7T8https://blog.csdn.net/m0_63116406/article/details/135604705?spm=1001.2014.3001.5502

1️⃣点击 "Analog" → 点击 "ADC"→勾选通道 "IN8" 和 "IN9"

图3        ADC通道配置


2️⃣在 "ADC" 的参数设置栏中,找到 "Low Power Auto wait" 并选择 "Enabled" 进行使能;

图4        修改ADC配置


3️⃣初始化 OLED;(配置步骤在下文中有讲解,这里不再赘述);

【蓝桥杯——物联网设计与开发】基础模块6 - OLED

4️⃣生成代码即可;

(3)代码编写

🟢️main 函数

/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "oled.h"
/* USER CODE END Includes */

/* USER CODE BEGIN PV */
uint8_t puc_oled[17];	// OLED显示数组
uint16_t pui_adc[2];	// ADC采集数组
/* USER CODE END PV */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC_Init();
  MX_I2C3_Init();
  /* USER CODE BEGIN 2 */
	/* OLED初始化 */
	OLED_Init();
	/* ADC校正 */
	HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		/* 启动ADC */
		HAL_ADC_Start(&hadc);
		/* ADC转换 */
		if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
			pui_adc[1]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
		if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
			pui_adc[0]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
		/* OLED显示 */
		sprintf((char*)puc_oled, "RP1:%.2fV", pui_adc[0] * 3.3 / 4095);
		OLED_ShowString(0, puc_oled);
		sprintf((char*)puc_oled, "RP2:%.2fV", pui_adc[1] * 3.3 / 4095);
		OLED_ShowString(2, puc_oled);
		HAL_Delay(200);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

(4)实验现象

        旋转旋钮,对应的电压值发生变化。


二、ADC接口函数封装

🟡️ADC初始化校正

/* ADC校正 */
HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);

        ⚠️该函数调用放在ADC初始化函数中。若不进行校正,会导致采集的电压值有误!

🟡️ADC采集函数

void ADC_Colt(uint16_t *puc_adc)
{
	/* 启动ADC */
	HAL_ADC_Start(&hadc);
	/* ADC转换 */
	if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
		puc_adc[1]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
	if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
		puc_adc[0]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
}

🔴ADC采集接口函数调用实例

/* 采集任务函数 */
void Task_Colt(void)
{
	/* 200ms进入一次 */
	if(cnt_colt < 200)	return;
	cnt_colt = 0;
	/* ADC采集 */
	ADC_Colt(pui_adc);
	/* 数据转换 */
	pui_adc[0] = pui_adc[0] * 330 / 4095;
	pui_adc[1] = pui_adc[1] * 330 / 4095;
}

三、踩坑日记

(1)LowPowerAutoWait模式

        🔅LowPowerAutoWait:配置是否使用低功耗自动延迟等待模式,*可选参数为 ENABLE DISABLE,当使能时,仅当一组内所有之前的数据已处理完毕时,才开始新的转换,适用于低频应用。该模式仅用于 ADC 的轮询模式,不可用于 DMA 以及中断

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通用代码生成器应用场景三,遗留项目反向工程

通用代码生成器应用场景三&#xff0c;遗留项目反向工程 如果您有一个遗留项目&#xff0c;要重新开发&#xff0c;或者源代码遗失&#xff0c;或者需要重新开发&#xff0c;但是希望复用原来的数据&#xff0c;并加快开发。 如果您的项目是通用代码生成器生成的&#xff0c;…

无线蓝牙耳机品牌推荐:倍思M2s Pro,让旅途更添乐趣

随着端午节的临近,许多人开始规划起出游计划。出游除了要做好行程安排,还需准备一些实用的物品来提升旅途的舒适度。特别是在高铁等长途旅行中,一款优质的降噪蓝牙耳机无疑是消磨时光、享受音乐的绝佳选择。那么,在众多的无线蓝牙耳机品牌中,有哪些值得推荐的呢?今天,我们就来…

IT廉连看——UniApp——事件绑定

IT廉连看——UniApp——事件绑定 这是我们上节课最终的样式&#xff1b; 一、现在我有这样一个需求&#xff0c;当我点击“生在国旗下&#xff0c;长在春风里”它的颜色由红色变为蓝色&#xff0c;该怎么操作&#xff1f; 这时候我们需要一个事件的绑定&#xff0c;绑定一个单…

指纹识别经典图书、开源算法库、开源数据库

目录 1. 指纹识别书籍 1.1《精通Visual C指纹模式识别系统算法及实现》 1.2《Handbook of Fingerprint Recognition》 2. 指纹识别开源算法库 2.1 Hands on Fingerprint Recognition with OpenCV and Python 2.2 NIST Biometric Image Software (NBIS) 3. 指纹识别开源数…

react-native 默认停用 flipper 通知

react-native 0.74 默认停用 flipper &#xff0c;但仍然可以手动安装 flipper 官方声明文档 英语好的可以直接阅读。 integration with React Native will no longer be enabled 原因 增加编译时间有时候会有连接问题升级会导致不能使用 之后调试推荐 我们建议团队使用 A…

谷粒商城实战(029 业务-订单支付模块-支付宝支付2)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第305p-第p310的内容 代码编写 前端代码 这里使用的是jsp 在这里引用之前配置的各种支付信息 在AlipayConfig.java里 这里是调用阿里巴巴写…

单片机的内存映射和重映射

内存映射 在单片机内&#xff0c;不管是RAM还是ROM还是寄存器&#xff0c;他们都是真实存在的物理存储器&#xff0c;为了方便操作&#xff0c;单片机会给每一个存储单元分配地址&#xff0c;这就叫做内存映射。 单片机的内存映射是指将外部设备或外部存储器映射到单片…

​测斜仪数据处理软件-MCU自动测量单元的重要性及应用

随着科技的快速发展&#xff0c;测斜仪数据处理软件在多个领域&#xff0c;如土木工程、地质学、环境科学等&#xff0c;扮演着越来越重要的角色。本文旨在探讨测斜仪数据处理软件-MCU自动测量单元的重要性、应用及其发展趋势。 一、MCU自动测量单元处理测斜仪数据的重要性 测斜…

快速上手 HuggingFace

HuggingFace HuggingFace 是类似于 GitHub 的社区&#xff0c;它主要提供各种的模型的使用&#xff0c;和 github 不同的是&#xff0c;HuggingFace 同时提供了一套框架&#xff0c;进行模型推理&#xff0c;模型训练、和模型库文件的管理等等。本文将介绍&#xff0c;如何快速…

用源码建站可能涉及知产侵权,建站的注意!

近日普推知产老杨看到央视报道一家公司用了某建站源码涉及知产侵权&#xff0c;起诉了全国八千多家公司&#xff0c;某梦自从创始人因病转给某公司后&#xff0c;也在大量起诉用其建站代码公司侵权&#xff0c;他们也都是申请了相关的著作权。 有的中小企业在运营中会涉及建站…

在React中使用Sass实现Css样式管理-10

0. 什么是Sass Sass(Syntactically Awesome Stylesheets)是一个 CSS 预处理器&#xff0c;是 CSS 扩展语言&#xff0c;可以帮助我们减少 CSS 重复的代码&#xff0c;节省开发时间&#xff1a; Sass 引入合理的样式复用机制&#xff0c;可以节约很多时间来重复。支持变量和函…

基于形态学滤波的心电信号ECG处理(MATLAB 2021B)

数学形态学简称形态学&#xff0c;在数学意义上&#xff0c;其基于集合理论、积分几何和网格代数&#xff0c;是一门严格建立在数学基础之上的学科&#xff0c;着重用来研究图像的几何结构和形状&#xff0c;因而称之为形态学。其基本思想是用结构元素对待分析图像进行“探测”…

【设计模式】创建型-工厂方法模式

前言 工厂方法模式是一种经典的创建型设计模式&#xff0c;它提供了一种灵活的方式来创建对象实例。通过本文&#xff0c;我们将深入探讨工厂方法模式的概念、结构和应用。 一、什么是工厂方法模式 工厂方法模式是一种创建型设计模式&#xff0c;旨在解决对象的创建过程和客…

【DevOps】Elasticsearch在Ubuntu 20.04上的安装与配置:详细指南

目录 一、ES 简介 1、核心概念 2、工作原理 3、 优势 二、ES 在 Ubuntu 20.04 上的安装 1、安装 Java 2、下载 ES 安装包 3、创建 ES 用户 4 、解压安装包 5、 配置 ES 6、 启动 ES 7、验证安装 三、ES 常用命令 1、创建索引 2、 插入文档 3、查询文档 四、ES…

操作系统 - 输入/输出(I/O)管理

输入/输出(I/O)管理 考纲内容 I/O管理基础 设备&#xff1a;设备的基本概念&#xff0c;设备的分类&#xff0c;I/O接口 I/O控制方式&#xff1a;轮询方式&#xff0c;中断方式&#xff0c;DMA方式 I/O软件层次结构&#xff1a;中断处理程序&#xff0c;驱动程序&#xff0c;…

VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载

一、Ubuntu镜像地址 转载备份一下&#xff1b; 官方下载地址&#xff08;不推荐&#xff09; https://www.ubuntu.com/downloadhttps://www.ubuntu.com/download 中科大源 Index of /ubuntu-releases/16.04/http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开…

使用 Django ORM 进行数据库操作

文章目录 创建Django项目和应用定义模型查询数据更新和删除数据总结与进阶聚合和注解跨模型查询原始SQL查询 Django是一个流行的Web应用程序框架&#xff0c;它提供了一个强大且易于使用的对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;用于与数据库进行交互。在本文…

0基础认识C语言(理论知识)

为了给0基础一个舒服的学习路径&#xff0c;就有了这个专栏希望带大家一起进步。 话不多说&#xff0c;开始正题。 一、C语言的一段小历史 C语言的设计要追溯到20世纪60年代末和70年代初&#xff0c;在那个时代美国有这么一号人叫做丹尼斯.里奇&#xff0c;他和同事肯.汤普逊…

学习编程对英语要求高吗?

学习编程并不一定需要高深的英语水平。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 虽然一些编程资源和文档可能…

cesium开发实例分享

反正 cesium 看到的效果几乎都有