第十四届蓝桥杯嵌入式国赛

news2024/11/15 18:24:31

一. 前言

        本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目,包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题,可去 蓝桥云课 上搜索历届真题即可。

二. 题目概述

        下面是总体框架图:

本次国赛题目主要设计到使用LCD显示4个界面,包括 实时数据界面,报警参数界面,报警统计界面以及最后的回放设置界面(这应该对于大多数人来说是最难的,包括我自己,当时在做的时候没有理解它所说的是什么含义,好在后面还是开窍了)。

题目要求实现的功能概述如下:

主要设计到PWM波的输出和PWM的输入捕获,ADC数模转换数据的采集,以及通过配置相关的LED和LCD来展示一些效果和结果,DS18B20来获取环境温度数据等等。

题目大概就讲到这里,想知道具体题目的小伙伴们可去这里:第十四届蓝桥杯嵌入式国赛题目

三. CubeMx的相关配置

        由于要使用到LED和LCD,所以就可以根据产品手册确定引脚位置,将它们在CubeMx中的状态都设置为GPIO_Output。这个比较简单,要是有小伙伴有疑问可去我另外一篇博客关于蓝桥杯嵌入式学习中查看。如下所示,为了方便,这里我把整个国赛需要配置的芯片GPIO口都配置好,后面也会提到CubeMx左侧的配置的。

关于LCD相关代码,我们可以直接使用官方提供的资料代码,这在比赛中都是会给出的,所以这里我也不再展示有关LCD的相关代码了。

下面我们来一步一步完成这道国赛题目。首先因为涉及到数据界面之间的切换,所以我们先来搞好按键中断部分和LCD的显示,代码如下:

#include "interrupt.h"

struct keys key[4]={0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	 if(htim->Instance==TIM4)
	 {
		 key[0].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
		 key[1].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
		 key[2].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
		 key[3].key_sta=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);
	 }
	for(int i=0;i<4;i++)
  {
	 switch(key[i].judge_sta)
	 {
		 case 0:
		 {
		 if(key[i].key_sta==0) key[i].judge_sta=1;
			 key[i].long_time=0;
			 break;
		 }
		 
		 case 1:
		 {
			 if(key[i].key_sta==0)
			 {
				 key[i].judge_sta=2;
			 }
			 else
			 {
				 key[i].judge_sta=0;
			 }
			 break;
		 }
		 
		 case 2:
		 {
			 if(key[i].key_sta==1)
			 {
				 key[i].judge_sta=0;
				 if(key[i].long_time<70)
						key[i].single_flag=1;
			 }
			 else
			 {
				 key[i].long_time++;
				 if(key[i].long_time>70)
					 key[i].long_flag=1;
			 }
			 break;
		 }
		 
	 }
 }
}

上面就是按键处理的代码,为了避免定时器之间的冲突,这里我选择了定时器4来控制按键的中断。在CubeMX中的配置如下:

由于题目还要求我们输入输出频率和占空比,这里我们可以选择定时器2来实现,为了获得占空比可以使用定时器2的两个通道,一个处于上拉状态,另外一个则相反。配置如下:

这里设置了通道一为直接模式,通道二为间接模式,下面的分频系数就设置为80-1就好了,重装载值就让它默认。 下面就给通道一和通道二设置了上拉和下拉。

 

获取相关频率和占空比的代码实现如下所示:

double ccrla_F=0;
double ccrlb_F=0;
double ccrl_F=0;
float ccrl_D=0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{
		if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
		{
			ccrla_F=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
			ccrlb_F=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);
			__HAL_TIM_SetCounter(htim,0);
			ccrl_F=(80000000/80)/ccrla_F;
			ccrl_D=(ccrlb_F/ccrla_F)*100;
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);
		}
	}
}

 其他的一些功能实现代码由于比较长,我这里就不再展示出来。关于整个国赛题目的完整CubeMx配置和实现所有功能的完整源代码我都放在了我主页的资源当中,如果对此有需要的小伙伴们可以拿去使用,如不能使用都可以直接私信我获取。

四. 最终实现展示

 

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

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

相关文章

探索LLM中的CoT链式推理:ECHO方法深度解读

近年来&#xff0c;随着大型语言模型&#xff08;LLMs&#xff09;的快速发展&#xff0c;如何有效利用这些模型进行复杂任务的推理成为了研究热点。其中&#xff0c;链式思考&#xff08;Chain-of-Thought, CoT&#xff09;推理方法作为一种有效的策略&#xff0c;能够显著提升…

Redhat 6,7,8系(复刻系列) 一键部署Oracle12c zip

Oracle12c前言 Oracle 12c是甲骨文公司推出的一款关系数据库管理系统,它引入了多项创新特性,如多租户架构、大数据处理和云部署,适用于企业级应用。以下是Oracle 12c的详细介绍: Oracle 12c的主要特点 高性能:通过多线程处理、自动优化等技术,提高了数据库的查询和处理…

云栖大会 | 天润融通发布微藤智能体平台,中国客户联络正式进入“智能体时代”

9月19日&#xff0c;以“云启智跃&#xff0c;产业蝶变”为主题的2024云栖大会在杭州正式开幕。大会持续三天&#xff0c;聚焦AI时代的技术升级与实践应用&#xff0c;设有三大主论坛、400多个分论坛&#xff0c;并开放4万平方米的智能科技展区&#xff0c;展示全球百余款AI应用…

CHARLS数据库系列教程(3)---绘制(加权和不加权)基线表一

CHARLS 是一项具备中国大陆 45 岁及以上人群代表性的追踪调查&#xff0c;旨在建设一个高质量的公共微观数据库&#xff0c;采集的信息涵盖社会经济状况和健康状况等多维度的信息&#xff0c;以满足老龄科学研究的需要。 为利用国际上最佳的数据采集方式&#xff0c;并确保研究…

2024年工业制造企业CRM研究报告:需求清单、市场格局、案例分析

我国是世界上产业体系最完备的国家&#xff0c;拥有全球规模最大、门类最齐全的生产制造体系&#xff0c;在500种主要工业产品中&#xff0c;有四成以上产品产量位居全球第一。2023年制造业增加值达33万亿元&#xff0c;占世界的比重稳定在30%左右&#xff0c;我国制造业增加值…

Register Two Point Sets 注册两个点集

文章目录 Register Two Point Sets 注册两个点集Visualize Gradient Descent 可视化梯度下降Hyperparameter Search 超参数搜索JensenHavrdaCharvatTsallisPointSetToPointSetMetricv4类说明 原文url: https://examples.itk.org/src/registration/metricsv4/registertwopointse…

基于 BERT 的自定义中文命名实体识别实现

基于 BERT 的自定义中文命名实体识别实现 在自然语言处理中,命名实体识别(Named Entity Recognition,NER)是一项重要的任务,旨在识别文本中的特定实体,如人名、地名、组织机构名等。本文将介绍如何使用 BERT 模型实现自定义中文命名实体识别,并提供详细的代码分析和解读…

乐(智)尚代驾~~--------Day5----司机认证篇~

前言&#xff1a; Hello亲爱的uu们&#xff0c;在读过了一个愉快的周末后&#xff08;摸鱼了一会&#xff09;&#xff0c;我又回来更新啦&#xff0c;感谢uu们的阅读&#xff0c;话不多说~ 司机认证 当司机点击开始接单的时候&#xff0c;会先判断该司机有没有通过认证&…

跨平台数据库工具DataGrip v2024.2全新发布——增加智能刷新功能

DataGrip 是一个跨平台的数据库工具可在Windows&#xff0c;OS X 和 Linux上使用。同时支持多种数据库&#xff0c;包含了SQL Server&#xff0c;Oracle&#xff0c;PostgreSQL&#xff0c;MySQL&#xff0c;DB2&#xff0c;Sybase&#xff0c;SQLite&#xff0c;Derby&#xf…

DQL学习

一、基础查询 1.查询多个字段 select 字段列表 from 表名; select * from 表名;-- 查询所有数据 但不建议使用&#xff01;&#xff01;&#xff01;&#xff01; 2.去除重复记录 select DISTINCT 字段列表 from 表名; 3.起别名 as&#xff1b;as也可以省略但中间要加空…

导入时,文档模板不被下载

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 这是个SSM项目&#xff0c;以前经常遇到这个问题&#xff0c;今天有幸记录下来 [ERROR][o.a.s.r.StreamResult] Can not find a java.io.InputStream with the name [downLoadFile] in the invocation stack…

目标检测系列(一)什么是目标检测

目录 一、相关名词解释 二、目标检测算法 三、目标检测模型 四、目标检测应用 五、目标检测数据集 六、目标检测常用标注工具 一、相关名词解释 关于图像识别的计算机视觉四大类任务&#xff1a; 分类&#xff08;Classification&#xff09;&#xff1a;解决“是什么&…

【Linux 报错】“userdel: user xxxx is currently used by process xxx”

问题产生的原因&#xff1a; 多个用户后嵌套登陆导致删除某用户时&#xff0c;这个用户还没退出导致无法删除的问题。 例如&#xff1a;你在普通用户 A 的账户下&#xff0c;切换超级用户 root 执行删除普通用户 A 的账户&#xff0c;此时普通用户 A还在当前进程中运行&#…

管理员工绩效的 7 个最佳策略

管理员工绩效的 7 个最佳策略 您可以为您的公司做很多事情——伟大的想法、创新的产品和尖端技术。但归根结底&#xff0c;如果你想让你的组织取得成功&#xff0c;你需要一个高绩效的文化&#xff0c;拥有高绩效的员工。 赋予员工高水平绩效的最佳方式之一是通过员工绩效管理…

计算机的错误计算(一百零二)

摘要 探讨 的计算精度问题。 从计算机的错误计算&#xff08;九十九&#xff09;可知&#xff0c; 在IEEE 754-2019的列表中。因此&#xff0c;有必要分析其计算准确度。 例1. 已知 计算 若利用 Python的SciPy库中函数计算&#xff0c;则有&#xff1a; 若用Java的pow函…

Java设计模式全面解析

23大设计模式&#xff08;即软件设计中的24种常用设计模式&#xff09;源自《设计模式&#xff1a;可复用面向对象软件的基础》一书&#xff0c;由四位作者&#xff08;Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides&#xff09;提出&#xff0c;通常也被称为“Go…

Java — LeetCode 面试经典150题(一)

双指针 125.验证回文串 题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回…

代码随想录算法day39 | 动态规划算法part12 | 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离

115.不同的子序列 相对于 392.判断子序列&#xff0c;本题有难度了&#xff0c;感受一下本题和 392.判断子序列 的区别。 力扣题目链接(opens new window) 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff…

企业如何选择合适的可观测产品

数字化进程的推进&#xff0c;使得不同企业对于数字化可观测产品提出了各种差异化的需求。本文先是具体分析了不同类型的企业对于可观测产品的直接需求和痛点&#xff0c;描述了可观测产品的所能提供的更丰富的实际应用场景。紧接着从开源产品&#xff0c;国外商业产品&#xf…

E33.【C语言】数据在内存中的存储练习集(未完)

1. 求下列代码的打印结果 #include <stdio.h> int main() {char a -1;signed char b -1;unsigned char c -1;printf("a%d,b%d,c%d", a, b, c);return 0; } 答案速查 分析 之前讲过,char在VS中默认为signed char,则a和b的打印结果应该是一样的 存储范围…