STM32U575按键转换及设备驱动

要求通过单片机实现以下功能:

1.单片机有三种工作模式(定义全局变量MM表示模式,MM=1,2,3表示三种不同的模式)

  • LED控制模式
  • 风扇控制模式
  • 蜂鸣器控制模式

2.可以在某一个模式下通过拓展板KEY1按键控制设备

按键按下一次,设备打开,按键再按下一次,设备关闭(设备管脚输出反向电平)

3.关于模式的切换可以通过以下两种方式:

  • 通过串口通信,电脑端发送当前模式(设置串口接收中断,接收到的字符串进行比较)
    • 电脑发送BEE,进入蜂鸣器控制模式
    • 电脑发送FAN ,进行风扇控制模式
    • 电脑发送LED,进入LED模式
  • 通过底板用户自定义按键进行模式切换
    • 按键按下一次进入LE
      char buf[128];//用于接受数据
      int MM=0;
      uint32_t lastDebounceTime = 0; // 上次有效触发的时间
      const uint32_t debounceDelay = 10; // 消抖时间阈值(单位ms)int find_char(const char *str, char c)
      {int i = 0;while (str[i] != '\0'){if (str[i] == c){return i; // 找到字符,返回索引}i++;}return -1; // 未找到字符,返回 -1
      }// 手动实现字符串长度计算
      int string_length(const char *str)
      {int len = 0;while (str[len] != '\0'){len++;}return len;
      }int compare_strings(const char *str1, const char *str2)
      {while (*str1 && *str2){if (*str1 != *str2){return 0; // 不相等}str1++;str2++;}// 如果两个字符串都结束了,说明完全相等return (*str1 == '\0' && *str2 == '\0') ? 1 : 0;
      }void ToggleDevicePin(int mode)
      {switch (mode){case 0:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4);break;case 1:HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_15);break;case 2:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);break;default:break;}
      }	
      void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
      {if (GPIO_Pin == GPIO_PIN_9){ToggleDevicePin(MM); // 根据当前模式切换管脚状态}else if (GPIO_Pin == GPIO_PIN_12){uint32_t currentTime = HAL_GetTick(); // 获取当前时间(ms)// 消抖逻辑if ((currentTime - lastDebounceTime) > debounceDelay){lastDebounceTime = currentTime; // 更新上次触发时间MM = (MM + 1) % 3;             // 切换 MM 状态}}
      }void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
      {printf("uart1_recv intterrput OK:%s\n",buf);static int index = 0; // 当前接收缓冲区索引if (buf[index] == '\n' || index >= sizeof(buf) - 1) // 检测到换行符或缓冲区已满{buf[index] = '\0'; // 标记字符串结束//dataReady = 1; // 设置数据接收完成标志index = 0; // 重置缓冲区索引}else{index++; // 增加索引,准备接收下一个字符}HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf[index], 1); // 继续接收
      }
      D模式,再按一次,进入风扇模式,再按一下,进入蜂鸣器模式

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科普CMOS传感器的工作原理及特点

在当今数字化成像的时代,图像传感器无疑是幕后的关键 “功臣”,它宛如一位神奇的 “光影魔法师”,通过光电效应这一奇妙的物理现象,将光子巧妙地转换成电荷,为图像的诞生奠定基础。而在众多类型的图像传感器中&#xf…

IDEA中Maven依赖包导入失败报红的潜在原因

在上网试了别人的八个问题总结之后依然没有解决&#xff1a; IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因&#xff1a;<dep…

Java100道面试题

1.JVM内存结构 1. 方法区&#xff08;Method Area&#xff09; 方法区是JVM内存结构的一部分&#xff0c;用于存放类的相关信息&#xff0c;包括&#xff1a; 类的结构&#xff08;字段、方法、常量池等&#xff09;。字段和方法的描述&#xff0c;如名称、类型、访问修饰符…

虚表 —— 隐藏行(简单版)

因为隐藏行改变了listview内部行号处理机制&#xff0c;需要处理大量细节&#xff0c;如listview内部用于传递行号的各种消息、通知等、封装的各种读取行号的函数等。 所以在工作量很大&#xff0c;一处纰漏可能导致重大bug的情况下&#xff0c;仅对隐藏行功能进行了简单封装&…

UDP -- 简易聊天室

目录 gitee&#xff08;内有详细代码&#xff09; 图解 MessageRoute.hpp UdpClient.hpp UdpServer.hpp Main.hpp 运行结果&#xff08;本地通信&#xff09; 如何分开对话显示&#xff1f; gitee&#xff08;内有详细代码&#xff09; chat_room zihuixie/Linux_Lear…

python制作翻译软件

本文复刻此教程&#xff1a;制作属于自己的翻译软件-很简单【Python】_哔哩哔哩_bilibili 一、明确需求&#xff08;以搜狗翻译为例&#xff09; &#xff08;1&#xff09;网址&#xff1a;https://fanyi.sogou.com/text &#xff08;2&#xff09; 数据&#xff1a;翻译内容…

uni-app 资源引用(绝对路径和相对路径)方法汇总

文章目录 一、前言&#x1f343;二、绝对路径和相对路径2.1 绝对路径2.2 相对路径 三、引用组件四、引用js4.1 js 文件引入4.2 NPM支持 五、引用css六、引用json6.1 json文件引入 七、引用静态资源7.1 模板内引入静态资源7.2 css 引入静态资源7.3 js/uts 引入静态资源7.4 静态资…

在 ASP.NET CORE 中上传、下载文件

创建 Web API 来提供跨客户端和服务器的文件上传和下载是常有的事。本文将介绍如何通过 ASP.NET CORE 来实现。 首先在 Visual Studio 中创建空的 Web API 项目&#xff0c;然后选择目标框架 .Net Core 3.1。 创建名为 FileController 的控制器&#xff0c;提供操作文件的接口…

基于 GEE Sentinel-1 数据集提取水体

目录 1 水体提取原理 2 完整代码 3 运行结果 1 水体提取原理 水体提取是地理信息和遥感技术的关键应用之一&#xff0c;对于多个领域都具有重要的应用价值。它有助于更好地管理水资源&#xff0c;保护环境&#xff0c;减少灾害风险&#xff0c;促进可持续发展&#xff0c;以…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

新年感悟:2025年1月7日高铁随想

2025年1月7日&#xff0c;乘坐在从珠海去广州南的C7676高铁上&#xff0c;突然悟明白两个事情。 首先&#xff0c;不管学习任何东西&#xff0c;总结是一个非常关键的经验。以前&#xff0c;总是幻想着能找到一本书&#xff0c;或者一个特别优秀的老师&#xff0c;仅仅通过看看…

centOS7

特殊权限 set_uid 赋予所有者身份 chmod us 文件 set_gid 赋予所有组身份 chmod gs 文件/目录 sticky_bit 防火墙 firewall-cmd 开启端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent 重启防火墙 systemctl restart firewalld 查看开启的所有端口 fi…

Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录

1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件&#xff0c;此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…

HCIA-Access V2.5_8_2_EPON基本架构和关键参数

EPON数据利用方式 EPON和GPON同样只有一根光纤&#xff0c;所以为了避免双向发送数据出现冲突&#xff0c;我们同样采用WDM技术&#xff0c;那么主要利用两个波长&#xff0c;一个是1490纳米的波长&#xff0c;一个是1310纳米的波长&#xff0c;下行OLT给ONU发送数据的时候&…

新一代智能工控系统网络安全合规解决方案

01.新一代智能工控系统概述 新一代智能工控系统是工业自动化的核心&#xff0c;它通过集成人工智能、工业大模型、物联网、5G等技术&#xff0c;实现生产过程的智能化管理和控制。这些系统具备实时监控、自动化优化、灵活调整等特点&#xff0c;能够提升生产效率、保证产品质量…

前端使用Get传递数组形式的数据

前端使用Get传递数组形式的数据 前端后端接收 不能直接使用 JSON.stringify()传输参数&#xff0c;或者直接用json数据传输&#xff0c;后端均会应为包含了非法的符号 [与 ]而报错。 前端 主要在于对Array形式的数据进行转换&#xff0c;拼接成字符串&#xff0c;采用join方…

Centos 下安装 GitLab16.2.1

参考 https://blog.csdn.net/weixin_46059351/article/details/140649426 https://blog.csdn.net/qq_46028493/article/details/144993598 Centos 安装 GitLab 修改 yum 的配置 首先查看目前配置的 yum&#xff1a; cat /etc/yum.repos.d/CentOS-Base.repo应该是这个样子…

uniapp 微信小程序 自定义日历组件

效果图 功能&#xff1a;可以记录当天是否有某些任务或者某些记录 具体使用&#xff1a; 子组件代码 <template><view class"Accumulate"><view class"bx"><view class"bxx"><view class"plank"><…

刚体变换矩阵的逆

刚体运动中的变换矩阵为&#xff1a; 求得变换矩阵的逆矩阵为&#xff1a; opencv应用 cv::Mat R; cv::Mat t;R.t(), -R.t()*t

php反序列化 ctf例题演示 框架安全(TP,Yii,Laravel) phpggc生成框架利用pop

前言 php反序列化的框架的利用的pop是非常难写的 并且 我们不知道他的利用方法 所以PHPGGC是一个包含unserialize()有效载荷的库以及一个从命令行或以编程方式生成它们的工具。当在您没有代码的网站上遇到反序列化时&#xff0c;或者只是在尝试构建漏洞时&#xff0c;此工具…