阿里巴巴的电子商务网站建设/windows优化大师自动下载

阿里巴巴的电子商务网站建设,windows优化大师自动下载,网站建设计划书,走着瞧网站 设计00. 目录 文章目录 00. 目录01. 概述02. EXTI相关API03. 硬件设计04. 软件设计05. 实验现象06. 附录 01. 概述 我们在做按键控制实验时,虽然能实现 IO 口输入功能,但代码是一直在检测 IO 输入口的变化,因此效率不高,特别是在一些…

00. 目录

文章目录

    • 00. 目录
    • 01. 概述
    • 02. EXTI相关API
    • 03. 硬件设计
    • 04. 软件设计
    • 05. 实验现象
    • 06. 附录

01. 概述

我们在做按键控制实验时,虽然能实现 IO 口输入功能,但代码是一直在检测 IO 输入口的变化,因此效率不高,特别是在一些特定的场

合,比如某个按键,可能 1 天才按下一次去执行相关功能,这样我们就浪费大量时间来实时检测按键的情况。

为了解决这样的问题,我们引入外部中断概念,顾名思义,就是当按键被按下(产生中断)时,才去执行相关功能。这大大节省了 CPU 的资

源,因此中断在实际项目中应用非常普遍。

Hi3861 的外部中断有上升沿、下降沿、低电平、高电平触发模式。上升沿和下降沿触发如下:
在这里插入图片描述

若将按键对应 IO 配置为下降沿触发,当按键按下后即触发中断,然后在中断回调函数内执行对应功能。

Hi3861 每个 GPIO 都可以配置为外部中断使用。

在单片机中,中断是指当 CPU 在正常执行主程序时,突然发生了另一件事,该事件记为事件 A(中断请求),事件 A 的发生需要 CPU 暂

停执行主程序(中断响应)转而执行事件 A(中断处理)。当事件 A 被执行完,就会回到刚才产生的“断点”继续执行主函数(中断返

回)。整个流程便称之为中断,具体的过程如下图所示:
在这里插入图片描述

02. EXTI相关API

/**
* @ingroup  iot_gpio
* @brief  Enable GPIO interruption.CNcomment:使能某个GPIO的中断功能。CNend
*
* @par 描述:
*           Enable GPIO interruption.CNcomment:使能某个GPIO的中断功能。CNend
*
* @attention None
* @param  id            [IN] type #hi_gpio_idx,I/O index.CNcomment:GPIO索引。CNend
* @param  int_type      [IN] type #hi_gpio_int_type,Interruption type.CNcomment:中断类型。CNend
* @param  int_polarity  [IN] type #hi_gpio_int_polarity,Interruption polarity.CNcomment:中断极性。CNend
* @param  func          [IN] type #gpio_isr_callback_func,Callback function of interruption.
CNcomment:中断回调函数。CNend
* @param  arg           [IN] type #hi_void *,arg of interrupt callback function. CNcomment:中断回调函数入参。CNend
*
* @retval #0       Success.
* @retval #Other   Failure. For details, see hi_errno.h.
* @par 依赖:
*           @li hi_gpio.h:Describes GPIO APIs.CNcomment:文件用于描述GPIO相关接口。CNend
* @see  hi_gpio_unregister_isr_function。
*/
hi_u32 hi_gpio_register_isr_function(hi_gpio_idx id, hi_gpio_int_type int_type, hi_gpio_int_polarity int_polarity,gpio_isr_callback func, hi_void *arg);
功能:设置指定 GPIO 的中断功能
参数:id:指定的 IO 号intType:中断类型 intPolarity:中断极性 func:中断触发时的回调函数   arg:中断回调函数中使用的参数的指针
返回值:0 初始化成功,1 初始化失败       

03. 硬件设计

在这里插入图片描述

由图可知,P1 端子的 KEY1-KEY2 脚为按键控制端,要检测按键是否被按下,只需读取端子的 KEY1-KEY2 脚是否为低电平,因此可使用

导线将芯片的 IO 口与P1 端子的 KEY1-KEY2 脚连接。

04. 软件设计

bsp_exti.h

#ifndef BSP_EXTI_H
#define BSP_EXTI_H#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"//管脚定义
#define KEY1_PIN         HI_IO_NAME_GPIO_11
#define KEY1_GPIO_FUN    HI_IO_FUNC_GPIO_11_GPIO#define KEY2_PIN         HI_IO_NAME_GPIO_12
#define KEY2_GPIO_FUN    HI_IO_FUNC_GPIO_12_GPIO//函数声明
void exti_init(void);#endif

bsp_exti.c

#include "bsp_exti.h"
#include <unistd.h>
#include "bsp_led.h"//key1按键回调函数
hi_void key1_exti_callback(void)
{static uint8_t key1=0;usleep(10*1000);//消抖hi_gpio_get_input_val(KEY1_PIN,&key1);if(key1==0){LED(1);}
}//key2按键回调函数
hi_void key2_exti_callback(void)
{static uint8_t key2=0;usleep(10*1000);//消抖hi_gpio_get_input_val(KEY2_PIN,&key2);if(key2==0){LED(0);}
}//外部中断初始化
void exti_init(void)
{hi_gpio_init();                                            // GPIO初始化hi_io_set_pull(KEY1_PIN, HI_IO_PULL_UP);                   // 设置GPIO上拉hi_io_set_func(KEY1_PIN, KEY1_GPIO_FUN);                   // 设置IO为GPIO功能hi_gpio_set_dir(KEY1_PIN, HI_GPIO_DIR_IN);                // 设置GPIO为输入模式hi_gpio_register_isr_function(KEY1_PIN,                         // 按键引脚HI_INT_TYPE_EDGE,            // 下降沿检测HI_GPIO_EDGE_FALL_LEVEL_LOW, // 低电平时触发&key1_exti_callback,         // 触发后调用的回调函数NULL);                       // 回调函数的传参值hi_io_set_pull(KEY2_PIN, HI_IO_PULL_UP);                   // 设置GPIO上拉hi_io_set_func(KEY2_PIN, KEY2_GPIO_FUN);                   // 设置IO为GPIO功能hi_gpio_set_dir(KEY2_PIN, HI_GPIO_DIR_IN);                // 设置GPIO为输入模式hi_gpio_register_isr_function(KEY2_PIN,                         // 按键引脚HI_INT_TYPE_EDGE,            // 下降沿检测HI_GPIO_EDGE_FALL_LEVEL_LOW, // 低电平时触发&key2_exti_callback,         // 触发后调用的回调函数NULL);                       // 回调函数的传参值
}

template.c

/******************************************************************************************************* @file        template.c***************************************************************************************************** 实验现象:K1键控制LED亮,K2键控制LED灭******************************************************************************************************/#include <stdio.h>
#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"#include "bsp_exti.h"
#include "bsp_led.h"//控制任务
osThreadId_t EXTI_Task_ID; //任务IDvoid EXTI_Task(void)
{led_init();//LED初始化exti_init();//外部中断初始化while (1) {usleep(10*1000);}
}
//任务创建
void exti_task_create(void)
{osThreadAttr_t taskOptions;taskOptions.name = "extiTask";       // 任务的名字taskOptions.attr_bits = 0;               // 属性位taskOptions.cb_mem = NULL;               // 堆空间地址taskOptions.cb_size = 0;                 // 堆空间大小taskOptions.stack_mem = NULL;            // 栈空间地址taskOptions.stack_size = 1024;           // 栈空间大小 单位:字节taskOptions.priority = osPriorityNormal; // 任务的优先级EXTI_Task_ID = osThreadNew((osThreadFunc_t)EXTI_Task, NULL, &taskOptions); // 创建任务if (EXTI_Task_ID != NULL){printf("ID = %d, Task Create OK!\n", EXTI_Task_ID);}
}/*** @description: 初始化并创建任务* @param {*}* @return {*}*/
static void template_demo(void)
{printf("-Hi3861开发板--外部中断实验\r\n");exti_task_create();//任务创建
}
SYS_RUN(template_demo);

05. 实验现象

下载程序前,按照如下接线
在这里插入图片描述

实验现象:K1 键点亮 LED,K2 键熄灭 LED。

06. 附录

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

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

相关文章

Visual studio + Qt 项目配置管理

Visual studio Qt 项目配置管理 1.本机顺利安装 vs 和 Qt 软件 ​ 并且设置好Qt 的环境变量比如 E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\bin E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\lib E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\include //这里是你电脑上Qt的路径&#xff0c;每台电脑不一样…

SpringCloud带你走进微服务的世界

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个…

FastAPI复杂查询终极指南:告别if-else的现代化过滤架构

title: FastAPI复杂查询终极指南:告别if-else的现代化过滤架构 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系统讲解FastAPI中复杂查询条件的构建方法,涵盖参数验证、动态过滤、安全防护等18个核心技术点。通过引入策略模式、声明式编程等技术,彻…

Ubuntu 22.04使用pigz多线程快速解压/压缩文件

最近搞项目&#xff0c;资料太大&#xff0c;解压时间太久&#xff0c;于是想办法解决。 开贴记录。 1.安装pigz sudo apt install pigz 2.解压资料 解压命令为 tar --use-compress-programpigz -xvpf ***.tar.gz 将最后的部分***.tar.gz换成你自己的文件即可 例如 ti…

日本IT|AWS工作内容及未来性、以及转职的所需资质和技能

AWSとは AWSはAmazon Web Services&#xff08;アマゾンウェブサービス&#xff09;の略称です。 名称から分かるとおり、ネットを通じた通販などを事業として行っているAmazon.com社がクラウドサービスとして運営しています。 本来であれば自分たちでインフラ環境を構築する…

Conda+jupyterlab

文章目录 1、Conda1.1、基本介绍1.2、conda安装1.3、conda常用命令1.3.1、基本命令1.3.2、环境管理 2、Jupyterlab2.1、基本介绍2.2、安装使用 3、pycharm中使用conda 1、Conda 1.1、基本介绍 Conda 是一个开源的包管理和环境管理工具&#xff0c;适用于 Python 及其他编程语…

从零基础到能独立设计单片机产品,一般需要经历哪些学习阶段?

相信很多人&#xff0c;内心都有“钢铁侠”的幻想&#xff0c;成为能写程序&#xff0c;能设计硬件&#xff0c;能设计结构&#xff0c;能焊接的全能型人才。 上次徐工问我&#xff0c;如果你财富自由了&#xff0c;想去做啥&#xff1f; 我说出来&#xff0c;可能大家都不信&a…

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)

说明&#xff1a; 本案例采用的定时器3&#xff08;TIM3&#xff09;实现&#xff0c;使用其他定时器是一样配置。 如何新建一个工程以及如何配置LED的端口&#xff0c;请查看前面文章&#xff1a;使用STM32CubeMX实现LED灯每秒闪烁一次&#xff08;STM32G070CBT6单片机&…

暴力破解Excel受保护的单元格密码

暴力破解Excel受保护的单元格密码 分享一个暴力破解Excel受保护的单元格密码的方法 第一步 在Excel中按下Alt F11&#xff0c;打开Visual Basic for Applications&#xff08;VBA&#xff09;编辑器。 第二步 在VBA编辑器中&#xff0c;点击插入菜单&#xff0c;选择模块…

Git常用操作之GitLab

Git常用操作之GitLab 小薛博客官网&#xff1a;小薛博客Git常用操作之GitLab官方地址 1、GitLab安装 https://gitlab.cn/install/ 1、Docker安装GitLab https://docs.gitlab.cn/jh/install/docker.html 1、设置卷位置 在设置其他所有内容之前&#xff0c;请配置一个新的…

数据结构与算法——算法3 面试常用排序算法

首先了解排序算法性能和优缺点 然后了解快排 和堆排序的方法。 可以参考如下的博客 八大排序(超详解附动图源码)

linux root丢失修改密

在RHEL7下重置密码 第一种方式&#xff1a;光驱进入急救模式 //做之前最好 selinuxdisabled Conntinue 然后chroot /mnt/sysimag 然后编辑/etc/shadow文件 第二种方式&#xff1a; 1&#xff1a;编辑启动菜单按e,找到linux16行&#xff0c;在行尾加入 init/bin/sh,同时在…

数据类设计_图片类设计之3_半规则图类设计(前端架构基础)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇讨论半规则图类型的设计 半规则图的定义 什么是半规则图?笔者看见了一些似乎规则又不是太规则的图形,例如带圆角的矩阵,在页面上找一个圆角框 为了…

Qt 信号与槽机制

1. 信号 和 槽 Qt 信号与槽机制 是一种用于对象间通信的低耦合设计模式&#xff0c;核心思想是&#xff1a;当某个信号触发&#xff0c;自动调用预先关联的处理函数&#xff08;槽函数&#xff09;。 在 Qt 中&#xff0c;如果一个类需要使用信号与槽机制&#xff0c;则该类必…

实验8 搜索技术

实验8 搜索技术 一、实验目的 &#xff08;1&#xff09;掌握搜索技术的相关理论&#xff0c;能根据实际情况选取合适的搜索方法&#xff1b; &#xff08;2&#xff09;进一步熟悉盲目搜索技术&#xff0c;掌握其在搜索过程中的优缺点&#xff1b; &#xff08;3&#xff09;…

消费级显卡上ollama部署QwQ32B

ollama部署QwQ32B QwQ32B硬件要求 魔改2080ti 的 22G 显存差不多够用 ollama中的是Q4_K_M量化模型 硬件配置模型推理模型高效微调模型全量微调显存占用最低配置显存占用最低配置显存占用最低配置FP_1664GRTX3090&#xff0a;4&#xff08;94G&#xff09;92GRTX3090&#xff0a…

数字电路 | 触发器 / 单稳态触发器 / 双稳态触发器

注&#xff1a;本文为 “数字电路 | 触发器” 相关文章合辑。 如有内容异常&#xff0c;请看原文。 未整理。 数字电路基础 — 触发器 Oliver-H 已于 2024-04-07 15:06:25 修改 触发器&#xff08;Flip-Flop&#xff09; 也是数字电路中的一种具有记忆功能的逻辑元件。触发…

SSM基础专项复习5——Maven私服搭建(2)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架&#xff08;1&#xff09;-CSDN博客 3、SSM基础专项复习3——Spring框架&#xff08;2&#xff09;-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具&#xff08;1&#xff…

11.anaconda中的jupyter使用、及整合dataspell

目录 概述jupyterjupyter notebook1.生成配置文件修改notebook保存目录问题问题2&#xff0c;无法获取token 安装 DataSpell注意配置运行环境DataSpell 使用 概述 前置安装如有问题&#xff1a; 1.Python、anaconda介绍、安装及使用 jupyter jupyter notebook 1.生成配置文…

蓝桥杯 之 回溯之充分剪枝

文章目录 买瓜最大数字 在蓝桥杯当中&#xff0c;对于回溯是属于一个必考的问题&#xff0c;但是除了回溯的几个基本的问题&#xff0c;如果通过剪枝来提前删去无效的分支&#xff0c;以大大减少时间复杂度是需要我们进一步思考的问题&#xff01;回溯的基本问题&#xff1a; 回…