【蓝桥杯嵌入式】四、各种外设驱动(十一)ADC(1):软件触发与中断触发方式

温馨提示:本文不会重复之前提到的内容,如需查看,请参考附录

【蓝桥杯嵌入式】附录

目录

重点提炼:

一、需求分析

1、需要的外设资源分析:

 2、外设具体分析:

比赛时ADC可能需要配置的部分:

二、软件配置

按照分析配置外设:

ADC2_IN15:采用软件触发的方式

 ADC1_IN11:采用TIM6触发的方式

三、程序功能实现

用到的函数:

程序流程:

在MDK中编写代码:

找到ADC的中断回调函数:

四、运行测试


重点提炼:

转换结果电压计算公式:

实际电压值(mV)=ADC读取值*VREF+(mV)/2^(转换精度)

VREF+是ADC转换的正参考电压,开发板上理论是3300mV;转换精度可以在CubeMX中设置;

在代码中描述如下:

uint32_t Volt=3300*HAL_ADC_GetValue(&hadc2);
Volt = Volt>>12;

 用到的函数:

一、需求分析

        开发板上有两个电压采集R37和R38,如图:

查看原理图可知,R37连接PB15,R38连接PB12.而使用CubeMX可以查到:PB15是ADC2的通道15,PB12是ADC1的通道11。

        设计一个示例,使用ADC的软件触发功能和中断触发功能。其中,中断触发包括外部中断触发和定时器中断触发,这里使用定时器触发。使用软件触发的方式检测R37的电压,中断触发方式检测R38的电压。

1、需要的外设资源分析:

  • ADC1_IN11——PB12——R38(电压采集2)
  • ADC2_IN15——PB15——R37(电压采集1)
  • LCD
  • TIM6

 2、外设具体分析:

查看原理图,和手册:

与LCD的相关的部分请参考附录。

比赛时ADC可能需要配置的部分:
  • ADC Mode:选择需要的通道,选择single_ended
  • ADCs_Common_Settings独立模式或多个ADC合作的模式(下一篇文章会用)
    • DMA Access Mode(DMA接入方式)
    • Delay between 2 sampling phases(2个采样相位之间的间隔)
  • Resolution:转换精度
  • DMA Continuous Requests:是否连续产生DMA请求(下一篇文章会用)
  • External Trigger Conversion Source:中断触发方式
  • External Trigger Conversion Edge:外部触发时使用的信号沿
  • Rank里的Sampling Time:采样时间,不设置也行,建议比赛时为提高准确性设置为640.5。

二、软件配置

参考附录的内容,建立名为“ADC_SofwareAndTimTrigger_Demo”的项目。

按照分析配置外设:

ADC2_IN15:采用软件触发的方式

软件触发方式很简单,打开ADC2_IN15即可,可以保持默认设置,也可以设置一下Rank里的Sampling Time为640.5。

 ADC1_IN11:采用TIM6触发的方式

开启ADC全局中断,ADC1和ADC2 的中断号是同一个,所以需要用到中断回调函数来判断是哪个ADC引起的中断。

TIM6:

按照附录中内容将TIM6设置为500ms一次触发Trigger Event Selection中断设置为Update Event。

无需开启TIM6的中断。

生成项目文件后,打开MDK;

导入LCD驱动程序文件。

三、程序功能实现

用到的函数:

中断回调函数:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc);

 ADC功能函数:

HAL_ADC_Start_IT(&hadc1);//以中断方式启动ADC
HAL_ADC_Start(&hadc2);//以软件方式启动ADC
HAL_ADC_PollForConversion(&hadc2,200);//查看ADC的转换是否完成
HAL_ADC_GetValue(&hadc2);//读取ADC转换后的结果并返回

程序流程:

  1. 在初始化HAL库后初始化LCD,之前实验发现中断可能会影响LCD初始化。
  2. 在main函数的while中每次以软件方式启动ADC2,计算并显示电压值。
  3. 以中断模式启动ADC1,启动定时器TIM6。
  4. 重新实现ADC中断回调函数,计算并显示电压值。

在MDK中编写代码:

 在main.h中 

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

 初始化HAL库后初始化LCD:

main.c 的 /* USER CODE BEGIN WHILE */ 代码段,编写以下代码

   /* USER CODE BEGIN WHILE */
	HAL_ADC_Start_IT(&hadc1);
	HAL_TIM_Base_Start(&htim6);
  while (1)
  {
		HAL_ADC_Start(&hadc2);
		if(HAL_ADC_PollForConversion(&hadc2,200)==HAL_OK)
		{
			uint32_t Volt=3300*HAL_ADC_GetValue(&hadc2);
			Volt = Volt>>12;
			char str[20];
			sprintf(str,"R37 Volt = %d",Volt);
			LCD_DisplayStringLine(Line3,str);
		}
		HAL_Delay(500);
    /* USER CODE END WHILE */
找到ADC的中断回调函数:

(详细步骤请查看附录NVIC部分)

stm32g4xx_it.c 中找到ADC的中断服务函数:

右键函数,点击 GoTo Definition,然后在跳转到的文件中使用

Find模式搜索"HAL_ADC_Con",找到带"__weak"的弱函数定义如图:

复制此函数到stm32g4xx_it.c的最下面的代码段中:

在代码段编写程序:注意这里是HAL_ADC_GetValue(hadc);

/* USER CODE BEGIN 1 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
	if(hadc->Instance == ADC1)
	{
		uint32_t Volt=3300*HAL_ADC_GetValue(hadc);
		Volt = Volt>>12;
		char str[20];
		sprintf(str,"R38 Volt = %d",Volt);
		LCD_DisplayStringLine(Line5,str);
	}
}
/* USER CODE END 1 */

四、运行测试

编译、下载(见附录)。

运行结果如下:

ADC_SofwareAndTimTrigger_Demo

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

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

相关文章

排序算法记录(冒泡+快排+归并)

文章目录 前言冒泡排序快速排序归并排序 前言 冒泡 快排 归并&#xff0c;这三种排序算法太过经典&#xff0c;但又很容易忘了。虽然一开始接触雀氏这些算法雀氏有些头大&#xff0c;但时间长了也还好。主要是回忆这些算法干了啥很耗时间。 如果在笔试时要写一个o(nlogn)的…

手机网页视频批量提取工具可导出视频分享链接|爬虫采集下载软件

解放你的抖音视频管理——全新抖音批量下载工具震撼上线&#xff01; 在这个信息爆炸的时代&#xff0c;如何高效地获取、管理和分享视频内容成为了许多用户的迫切需求。为了解决这一难题&#xff0c;我们研发了全新的视频批量下载工具&#xff0c;让你轻松畅享海量音视频资源。…

免费的本地图像无损放大工具upscayl,支持六种模型

文章目录 upscayl其他模型其他设置 upscayl upscayl是一款免费的图像无损放大软件&#xff0c;scayl应该就是scale&#xff0c;不知道是哪国语言。进入官网后可直接下载&#xff0c;支持Windows, Linux, MaxOS等主流平台&#xff0c;对于Windows而言&#xff0c;还提供了exe和…

单相桥式全控整流电路

1仿真目的 通过对单相桥式全控整流电路的仿真研究&#xff0c;分析电路带电阻负载与阻感负载的不同工作情况。研究对电路的影响 2仿真原理 2.1单相桥式 如图所示为单相桥式全控电路的框图&#xff0c;设负载为电阻负载。在桥式逆变电路中&#xff0c;桥臂的上下两个开关器件…

teamcenter 无法打开数据集,未找到兼容的工具

原因 teamcenter 图片无法打开看 解决 修改注册表&#xff1a; 注册表位置&#xff1a;计算机\HKEY_CLASSES_ROOT\jpegfile\shell\open\command 注册表的值&#xff1a;“%systemroot%\system32\mspaint.exe” “%1”

BetterDisplay Pro for Mac(显示器校准软件) v2.0.11激活版

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a;BetterDisplay Pro for Mac v2.0.11激活版 以下是BetterDisplay Pro的主要特点&…

【Redis】哨兵机制

1 &#x1f351;基本概念&#x1f351; 由于对 Redis 的许多概念都有不同的名词解释&#xff0c;所以在介绍 Redis Sentinel 之前&#xff0c;先对⼏个名词概念进⾏必要的说明。 名词逻辑结构物理结构主节点Redis 主服务⼀个独⽴的 redis-server 进程从节点Redis 从服务⼀个独…

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

为什么要写这么一篇介绍ArcGis的文章呢&#xff1f;因为大部分人也包括ArcGisdada&#xff0c;在使用ArcMap应用程序创建工程时总以为我们就是使用了ArcGis这个软件的所有。其实不然&#xff0c;在后期的接触和使用中慢慢发现原来ArcMap只是ArcGis这个综合平台的一部分&#xf…

fifo ip核 ————读写时钟同步

1.原理 timescale 1ns/1ns module tb_fifo();reg sys_clk ; reg sys_rst_n ; reg [7:0] pi_data ; reg rd_req ; reg wr_req ; reg [2:0] cnt;wire empty ; wire full ; wire [7:0] po_data ; wire [7:0] usedw ;initial begins…

《大模型面试宝典》(2024版) 正式发布!

2022 年11月底&#xff0c;OpenAI 正式推出 ChatGPT &#xff0c;不到两个月的时间&#xff0c;月活用户就突破1亿&#xff0c;成为史上增长最快的消费者应用。 目前国内已发布的大模型超过200个&#xff0c;大模型的出现彻底改变了我们的生活和学习方式。 现在只要你想从事 A…

结构体变量的引用、结构体变量的初始化、结构体数组

一、 结构体变量的引用 在定义了结构体变量以后&#xff0c;当然可以引用这个变量。但应遵守以下规则: 不能将一个结构体变量作为一个整体进行输入和输出。例如,已定义studentl和 student2为结构体变量并且它们已有值。不能这样引用: printf ("%d,%s,%c,%d,%f,%s\n&quo…

idea报错Terminated with exit code 1

今天学项目的时候&#xff0c;中途打开一个新的项目&#xff0c;pom.xml文件一直在下载依赖&#xff0c;下载了很久都没有下载成功&#xff0c;检查自己的Maven配置&#xff0c;感觉没问题 把项目移动到没有中文的目录下重新启动&#xff0c;也还是不行&#xff0c;后来发现原…

硬核分享|AI语音识别转文字与自动生成字幕

硬核分享|AI语音识别转文字与自动生成字幕_哔哩哔哩_bilibili 在现代快节奏的生活中&#xff0c;语音转文字工具成为了我们工作和学习中的得力助手。它能够将我们说出的话语迅速转化为文字或者将语音视频自动生成字幕&#xff0c;提供便捷和高效。 语音转文字转字幕工具是一种…

nodejs安装使用React

1、react安装 首先&#xff0c;确保电脑上具备nodejs环境&#xff0c;之后用 winr 呼出控制台&#xff0c;输入 cmd 命令弹出cmd控制台&#xff08;小黑框&#xff09;之后在默认路径输入如下代码 npm i -g create-react-app //全局安装react环境无需选择特定文件夹安装成功后…

刷题DAY31 | LeetCode 455-分发饼干 376-摆动序列 53-最大子序和

455 分发饼干&#xff08;easy&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并…

「发稿帮」权重媒体发稿的优势,资源有哪些?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 权重媒体发稿的优势主要包括以下方面&#xff1a; 获得更好的排名&#xff1a;高权重媒体在搜索引擎中的排名通常更靠前&#xff0c;这意味着在这些媒体上发布的内容更容易被用户发现和访问…

搞了半天blender整动画这么爽,骨骼重定向一回,动作就可以到处套用,和音频对轨也好使

我们搞到了运动数据&#xff08;可能是bvh文件&#xff0c;也可能是fbx文件&#xff09;之后&#xff0c;想要让某个静态的模型动起来。 我们假定用的是Tpose的模型&#xff08;因为我这个bvh文件是Tpose用的&#xff0c;所以为了动作映射不出问题&#xff0c;优先整的这种模型…

IPC网络摄像头媒体视屏流MI_VIF结构体

一个典型的IPC数据流 下图是一个典型的IPC数据流模型&#xff0c;流动过程如下&#xff1a; 1. 建立Vif->Vpe->Venc的绑定关系&#xff1b; 2. Sensor 将数据送入vif处理&#xff1b; 3. Vif 将处理后的数据写入Output Port申请的内存&#xff0c;送入下一级&#xff1b;…

基于python+vue的街道办管理系统flask-django-php-nodejs

在此基础上&#xff0c;结合现有街道办管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 python为基础的街道办管理信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色和多个主…

GTC AI 2024:人工智能的未来展望

在2024年GTC AI大会上&#xff0c;NVIDIA推出了多项创新技术和产品&#xff0c;涵盖了从新一代GPU平台到AI超级计算和量子计算云服务等多个领域。 新一代GPU平台 Blackwell Blackwell是为生成式AI时代设计的新一代GPU平台&#xff0c;与前代相比&#xff0c;在FP8训练性能上提…