基于SMT32U575RIT单片机-中断练习

练习要求:

1、通过扩展板按键key1,开/关元器件;

2、通过串口选择模式(通过中断实现):

        LED: 切换只控制LED;

        FAN: 切换只控制FAN;

        BEE: 切换只控制蜂蜜器;

3、通过底板的USER按键,切换工作模式,按一次切换一个模式,模式类型见2.

1、分析原理图得到以下结论

根据上表,通过CubeMax配置功能(略)

2、keil添加自定义my_prps.h和my_prps.c

封装以实现功能:

1)封装LED1、LED3、FAN和BEE的启动、关闭和切换

2)实现mode_set、mode_change(切换模式)

2.1 my_prps.h

#ifndef _MY_PRPS_H_
#define _MY_PRPS_H_void led_on(int ledno);
void led_off(int ledno);
void led_toggle(int ledno);void fan_on();
void fan_off();
void fan_toggle();void bee_on();
void bee_off();
void bee_toggle();void mode_set(int mm);
void mode_change();
void mode_toggle();#endif

2.2 my_prps.c

#include "my_prps.h"
#include "gpio.h"
#include <stdio.h>static int mode=1;//1-LED, 2-FAN, 3-BEEvoid led_on(int ledno){if(ledno == 1){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET);return;}if(ledno == 3){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);return;}
}void led_off(int ledno){if(ledno == 1){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET);return;}if(ledno == 3){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);return;}
}
void led_toggle(int ledno){if(ledno == 1){HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4);return;}if(ledno == 3){HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);return;}
}void fan_on(){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
}void fan_off(){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
}void fan_toggle(){HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
}void bee_on(){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
}void bee_off(){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
}void bee_toggle(){HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_15);
}void mode_set(int mm){printf("即将设置模式为[%d]\n\r", mm);mode = mm;led_off(1);led_off(3);fan_off();bee_off();
}void mode_change(){mode++;mode=(mode%3)+1;mode_set(mode);
}void mode_toggle(){switch(mode){case 1:led_toggle(1);led_toggle(3);break;case 2:fan_toggle();break;case 3:bee_toggle();break;}
}

3、在main.c中 重写uart1、按键key1和按键User的中断回调函数

main.c

char buf[32]={0};
//int bufIndex=0;void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{printf("buf=[%s]\n\r", buf);HAL_UART_Receive_IT(&huart1, (uint8_t*)&buf, 3);if(strcmp(buf, "LED")==0){printf("即将切换至[LED]模式\n\r");mode_set(1);return;}if(strcmp(buf, "FAN")==0){printf("即将切换至[FAN]模式\n\r");mode_set(2);return;}if(strcmp(buf, "BEE")==0){printf("即将切换至[BEE]模式\n\r");mode_set(3);return;}
}int fputc(int ch, FILE * fp){HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);return ch;
}//KEY1和USER button interrupt
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin){printf("rising callback:[%d]\n\r", GPIO_Pin);if(GPIO_Pin == GPIO_PIN_9){//KEY1 Button pressedmode_toggle();return;}if(GPIO_Pin == GPIO_PIN_12){//User Button pressedmode_change();return;}
}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();/* Configure the System Power */SystemPower_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_ICACHE_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1, (uint8_t*)&buf, 3);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE *//*HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);HAL_Delay(2000);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);*/while (1){//printf("hello world\n\r");//HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

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

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

相关文章

人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程

文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…

w~自动驾驶~合集16

我自己的原文哦~ https://blog.51cto.com/whaosoft/12765612 #SIMPL 用于自动驾驶的简单高效的多智能体运动预测基准 原标题&#xff1a;SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving 论文链接&#xff1a;https://ar…

数据结构与算法之二叉树: LeetCode 107. 二叉树的层序遍历 II (Ts版)

二叉树的层序遍历 II https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/description/ 描述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&a…

NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化

这篇文章介绍了一种名为NOVA的新型自回归模型&#xff0c;用于高效的文本到图像和文本到视频生成。以下是文章的主要内容总结&#xff1a; 1. 研究背景与问题 自回归大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;中表现出色&#xff0c;但…

外驱功率管电流型PWM控制芯片CRE6281B1

CRE6281B1 是一款外驱功率管的高度集成的电流型PWM 控制 IC&#xff0c;为高性能、低待机功率、低成本、高效率的隔离型反激式开关电源控制器。在满载时&#xff0c;CRE6281B1工作在固定频率(65kHz)模式。在负载较低时&#xff0c;CRE6281B1采用节能模式&#xff0c;实现较高的…

C4D2025 win版本安装完无法打开,提示请将你的maxon App更新至最新版本,如何解决

最近安装C4D2025 win版本时&#xff0c;明明按步骤安装完成&#xff0c;结果打开提示提示请将你的maxon App更新至最新版本&#xff1f;遇到这种情况该如何解决呢。 一开始我的思路以为是旧版本没有删除干净&#xff0c;所以将电脑里有关maxon的软件插件都卸载了&#xff0c;重…

open61499符合新型工业控制测试要求吗

工业互联网产业联盟发起了一项新型工业控制产品测试活动&#xff0c;从官网上摘录了部分测试要求&#xff08;联盟动态-工业互联网产业联盟&#xff09;如下&#xff1a; 新型工业控制是通过有线无线混合组网、软硬件分层解耦和模块化功能调用、多层级算力通用底座&#xff0c…

119.使用AI Agent解决问题:Jenkins build Pipeline时,提示npm ERR! errno FETCH_ERROR

目录 1.Jenkins Build时的错误 2.百度文心快码AI智能体帮我解决 提问1&#xff1a;jenkins中如何配置npm的源 提问2&#xff1a;jenkins pipeline 类型为pipeline script from SCM时&#xff0c;如何配置npm源 3.最终解决方法-Jenkinsfile的修改 4.感触 1.Jenkins Build时…

Python学习笔记:显示进度条

文章目录 1. 安装progress包2. 编写程序,实现功能3. 运行程序,查看结果4. 实战小结1. 安装progress包 在Anaconda Prompt里执行命令:pip install progress -i https://pypi.tuna.tsinghua.edu.cn/simple 2. 编写程序,实现功能 创建显示进度条.py程序 """ 功…

搭建企业AI助理的创新应用与案例分析

在大健康零售行业&#xff0c;企业面临着日益增长的市场需求和复杂的供应链管理挑战。AI助理的应用不仅能够提升客户服务效率&#xff0c;还能优化供应链管理&#xff0c;降低运营成本。 一、AI助理在大健康零售行业的创新应用 个性化健康咨询 AI助理可以通过分析客户的健康…

poi-tl+kkviewfile实现生成pdf业务报告

需求背景&#xff0c;需要把ai生成的一些业务数据&#xff0c;生成一份pdf报告 需求分析 简单来说&#xff0c;就是json生成pdf的方案。 直接生成pdf。适合一些pdf样式简单的场景&#xff0c;一般就是纯文本按序渲染&#xff0c;或者是纯表格。如果需要一些复杂的排布&#x…

重温设计模式--13、策略模式

策略模式介绍 文章目录 策略模式介绍C 代码示例 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。该模式将算法的定义和使用分离开来&#xff0c;使得算法可以独立于使用它的客户端而变化&#xff0c;提高了代码的灵活性和可维护性。 其主要包含以下几个…

nginx http反向代理

系统&#xff1a;Ubuntu_24.0.4 1、安装nginx sudo apt-get update sudo apt-get install nginx sudo systemctl start nginx 2、配置nginx.conf文件 /etc/nginx/nginx.conf&#xff0c;但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件&#xff0c;并在…

Sam Altman发布博客,回顾OpenAI九年历程,直言目标已瞄准ASI超级人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

简单的jmeter数据请求学习

简单的jmeter数据请求学习 1.需求 我们的流程服务由原来的workflow-server调用wfms进行了优化&#xff0c;将wfms服务操作并入了workflow-server中&#xff0c;去除了原来的webservice服务调用形式&#xff0c;增加了并发处理&#xff0c;现在想测试模拟一下&#xff0c;在一…

C++编程基础之override关键字

在C中&#xff0c;override关键字用于显式地标识派生类中的成员函数是对基类中虚函数的重写&#xff0c;具有以下重要作用和使用说明&#xff1a; 作用 增强代码可读性&#xff1a;通过使用override关键字&#xff0c;能够清晰地向阅读代码的人表明该函数是有意重写基类中的虚…

Leecode刷题C语言之按键变更的次数

执行结果:通过 执行用时和内存消耗如下&#xff1a; int countKeyChanges(char* s) {int count0,i0;while(s[i]!\0){if((s[i]!s[i1])&&(s[i]!(s[i1]32))&&(s[i]!(s[i1]-32))&&s[i1]!0)count;i;}return count; }解题思路&#xff1a; 初始化变量&…

免费一键图片转3D模型,AI建模,一键把图片转三维模型,二维图片转3维模型,AI建模

免费一键图片转3D模型&#xff0c;AI建模&#xff0c;一键把图片转三维模型&#xff0c;二维图片转3维模型,AI建模&#xff0c;公测版&#xff0c;每天不定时免费开放&#xff0c;非常强大 1咱们先打开ai.glbxz.com http://ai.glbxz.com 22 2导入图片。支持单张和多张图片生成…

vue3中el-table实现多表头并表格合并行或列

1、el-table中添加事件 :span-method"genderSpanCity" <el-table :span-method"genderSpanCity":data"data.tableData":fit"true" table-layout"fixed" header-align"center" stripestyle"width:100%;he…

GOAT‘S AI早鸟报Part9

资讯 英伟达重磅发布5090&#xff0c;定价15000 老黄重磅发布5090&#xff0c;定价15000&#xff01;22000元的世界最小AI超级计算机也来了 英伟达在CES发布了最新的GPU——RTX 5090&#xff0c;采用Blackwell架构&#xff0c;具备920亿个晶体管&#xff0c;4000 AI TOPS的AI…