【鸿蒙开发】Hi3861学习笔记- 定时器中断
00. 目录
文章目录
- 00. 目录
- 01. 概述
- 02. 定时器相关API
- 2.1 hi_timer_create
- 2.2 hi_timer_start
- 2.3 hi_timer_stop
- 2.4 hi_timer_delete
- 03. 硬件设计
- 04. 软件设计
- 05. 实验现象
- 06. 附录
01. 概述
定时器,顾名思义就是用来计时的,我们常常会设定计时或闹钟,然后时间到了就告诉我们要做什么。Hi3861 也是这样,通过定时器可
以完成各种预设好的任务。定时器到达指定时间后也会产生中断,然后在回调函数内执行所需功能,这个和外部中断类似。
02. 定时器相关API
2.1 hi_timer_create
/**
* @ingroup iot_systimer
* @brief Creates the system timer.CNcomment:获取定时器句柄。CNend
*
* @par 描述:
* Creates the system timer.CNcomment:获取高精定时器句柄。CNend
*
* @attention None
* @param timer_handle [OUT] type #hi_u32*,handle.CNcomment:获取到的句柄。CNend
*
* @retval #0 Success.
* @retval #Other Failure. For details, see hi_errno.h.
*
* @par 依赖:
* @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend
* @see hi_timer_delete。
*/
hi_u32 hi_timer_create(hi_u32 *timer_handle);
功能:创建系统定时器
参数:timer_handle:获取创建好的定时器句柄
返回值:0 成功,1 失败;
2.2 hi_timer_start
/**
* @ingroup iot_systimer
* @brief Starts the system timer.CNcomment:启动系统定时器。CNend
*
* @par 描述:
* This API is used in the following scenarios:CNcomment:本API接口使用分为以下几个场景:CNend
* @li If no timer is created, create and start a timer.
CNcomment:如果未启动定时器,则直接启动。CNend
* @li If the timer expires and is called again, start the timer directly.
CNcomment:如果该定时器到期后调用,则直接启动定时器。CNend
* @li If the timer does not expire, stop and restart the timer.
CNcomment:如果定时器没有到期,则停止该定时器,重新启动定时器。CNend
*
* @attention This timer callback function is executed in the interrupt context. Therefore, the callback function should
* be as simple as possible and the functions such as sleep and wait semaphores that trigger scheduling
* cannot be used.CNcomment:本定时器回调函数执行于中断上下文,回调函数尽量简单,不能使用睡眠、
等待信号量等引起调度的函数。CNend
*
* @param timer_handle [IN] type #hi_u32,handle.CNcomment:句柄。CNend
* @param type [IN] type #hi_timer_type,timer type.CNcomment:定时器类型。CNend
* @param expire [IN] type #hi_u32,timeout period of the timer (unit: ms). If this parameter is set to 0,
* the default value is 10 ms.CNcomment:定时器超时时间(单位:ms)。配置为0时,默认为10ms。CNend
* @param timer_func [IN] type #timer_proc_func,timer callback function.CNcomment:定时器回调函数。CNend
* @param data [IN] type #hi_u32,callback input parameter.CNcomment:回调函数传参。CNend
*
* @retval #0 Success.
* @retval #Other Failure. For details, see hi_errno.h.
*
* @par 依赖:
* @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend
* @see hi_timer_stop
*/
hi_u32 hi_timer_start(hi_u32 timer_handle, hi_timer_type type, hi_u32 expire,hi_timer_callback_f timer_func, hi_u32 data);
功能:启动系统定时器
参数:timer_handle:定时器句柄Type:用于设置所创建的定时器类型expire:定时时间,单位 ms。如果参数设置值为 0,则默认为 10ms。timer_func:定时器定时时间到达,回调函数。data:回调函数参数。不传递参数则为 NULL。
返回值:0 成功,1 失败;
2.3 hi_timer_stop
/**
* @ingroup iot_systimer
* @brief Stops the system timer.CNcomment:停止系统定时器。CNend
*
* @par 描述:
* Stops the system timer.CNcomment:停止系统定时器。CNend
*
* @attention This API only stops the timer and does not delete the timer.CNcomment:本接口仅停止定时器,
并不删除该定时器。CNend
* @param timer_handle [IN] type #hi_u32,handle.CNcomment:句柄。CNend
*
* @retval #0 Success.
* @retval #Other Failure. For details, see hi_errno.h.
*
* @par 依赖:
* @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend
* @see hi_timer_start | hi_timer_delete
*/
hi_u32 hi_timer_stop(hi_u32 timer_handle)
功能:停止系统定时器
参数:timer_handle:定时器句柄
返回值:0 成功 1 失败
2.4 hi_timer_delete
/**
* @ingroup iot_systimer
* @brief Deletes the timer.CNcomment:删除定时器。CNend
*
* @par 描述:
* Deletes the timer.CNcomment:删除定时器。CNend
*
* @attention
* @li If the timer does not expire, stop the timer before deleting it.
CNcomment:如果定时器未到期,则先停止该定时器再删除。CNend
*
* @param timer_handle [IN] type #hi_u32,handle.CNcomment:句柄。CNend
*
* @retval #0 Success.
* @retval #Other Failure. For details, see hi_errno.h.
*
* @par 依赖:
* @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend
* @see hi_timer_start | hi_timer_stop
*/
hi_u32 hi_timer_delete(hi_u32 timer_handle)
功能:删除系统定时器。如果定时器未到期,则先停止该定时器再删除
参数:timer_handle:定时器句柄
返回值:0 成功,1 失败
03. 硬件设计

从网络标号可知,LED 与芯片的 IO2 管脚连接,当该引脚输出高电平时,LED点亮,输出低电平时,LED 熄灭。
04. 软件设计
bsp_time.h
#ifndef BSP_TIME_H
#define BSP_TIME_H#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"//函数声明
void time_init(uint16_t times);
void time_onoff(uint8_t sta);#endif
bsp_time.c
#include "bsp_time.h"
#include <unistd.h>
#include "bsp_led.h"
#include "hi_timer.h"hi_u32 timer_handle;
uint16_t g_times=0;//定时器回调函数
void time_isr_fun(void)
{static uint8_t i=0;i=!i; LED(i);
}//定时器初始化
//times:定时时间,ms
void time_init(uint16_t times)
{hi_u32 ret;g_times=times; ret = hi_timer_create(&timer_handle);if(ret!=HI_ERR_SUCCESS){printf("Timer_Create failed\r\n");}hi_timer_start(timer_handle,HI_TIMER_TYPE_PERIOD,times,(hi_timer_callback_f)time_isr_fun,NULL);
}//定时器开关
void time_onoff(uint8_t sta)
{if(sta==0)hi_timer_stop(timer_handle);else hi_timer_start(timer_handle,HI_TIMER_TYPE_PERIOD,g_times,(hi_timer_callback_f)time_isr_fun,NULL);
}
template.c
/******************************************************************************************************* @file template.c***************************************************************************************************** 实验现象:间隔1S,LED指示灯亮灭******************************************************************************************************/#include <stdio.h>
#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"#include "bsp_time.h"
#include "bsp_led.h"//控制任务
osThreadId_t TIME_Task_ID; //任务IDvoid TIME_Task(void)
{led_init();//LED初始化time_init(500);//定时器初始化,定时时间500mswhile (1) {usleep(10*1000);}
}
//任务创建
void time_task_create(void)
{osThreadAttr_t taskOptions;taskOptions.name = "timeTask"; // 任务的名字taskOptions.attr_bits = 0; // 属性位taskOptions.cb_mem = NULL; // 堆空间地址taskOptions.cb_size = 0; // 堆空间大小taskOptions.stack_mem = NULL; // 栈空间地址taskOptions.stack_size = 1024; // 栈空间大小 单位:字节taskOptions.priority = osPriorityNormal; // 任务的优先级TIME_Task_ID = osThreadNew((osThreadFunc_t)TIME_Task, NULL, &taskOptions); // 创建任务if (TIME_Task_ID != NULL){printf("ID = %d, Task Create OK!\n", TIME_Task_ID);}
}/*** @description: 初始化并创建任务* @param {*}* @return {*}*/
static void template_demo(void)
{printf("-Hi3861开发板--定时器中断实验\r\n");time_task_create();//任务创建
}
SYS_RUN(template_demo);
05. 实验现象
实验现象: LED 周期性每秒闪烁 1 次。
06. 附录
相关文章:
【鸿蒙开发】Hi3861学习笔记- 定时器中断
00. 目录 文章目录 00. 目录01. 概述02. 定时器相关API2.1 hi_timer_create2.2 hi_timer_start2.3 hi_timer_stop2.4 hi_timer_delete 03. 硬件设计04. 软件设计05. 实验现象06. 附录 01. 概述 定时器,顾名思义就是用来计时的,我们常常会设定计时或闹钟…...
Spring Cloud Config 快速介绍与实例
Spring Cloud Config 是什么? Spring Cloud Config 是一个用于分布式系统的配置管理工具,提供集中化的外部配置支持。它适用于微服务架构,能够将各个服务的配置集中存储在服务端(如 Git 仓库),客户端按需动态获取配置,解决了配置分散、环境切换复杂等问题。 Spring Cl…...
Power Apps 技术分享:画布应用使用表单控件
前言 表单控件,是画布应用里一个非常好用的控件,我们今天简单介绍下,如何使用这个控件。 正文 1.首先,我们需要有一个数据源,我们这里用上一篇博客新建的数据源,如下图: 2.新建一个页面…...
【数据库】Data Model(数据模型)数据模型分析
理解图片中的 Data Model(数据模型)是学习数据库设计和应用程序开发的重要一步。作为初学者,你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析,以及如何理解它们之间的关系。 1. 数…...
【Unity】 HTFramework框架(六十二)Agent编辑器通用智能体(AI Agent)
更新日期:2025年3月14日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 编辑器通用智能体AIAgent类Friday(星期五)启用智能体设置智能体类型开放智能体权限智能体交互资源优化批处理运行代码联网搜索休闲…...
Elasticsearch 滚动索引(Rollover Index)详解
文章目录 1、滚动索引的作用2、滚动索引的用法2.1 核心概念2.2 实现步骤 3、适用场景4、与其他技术的结合使用5、案例:日志数据的滚动索引5.1 场景描述5.2 实现步骤 6、示例:结合索引生命周期管理(ILM)6.1 场景描述6.2 实现步骤 7…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.17)
11.5 案例-文件上传-阿里云OSS-入门 出现报错:Process exited with an error: 1 (Exit value: 1),点击exec那一行,出现错误原因:Command execution failed. 在CSDN上找到了解决方法: 之后出现新的报错&…...
python局部变量和全局变量
文章目录 1.局部变量和全局变量2.局部变量2.1 局部变量的作用2.2 局部变量的生命周期 3. 全局变量3.1 函数不能直接修改全局变量的引用3.2 在函数内部修改全局变量的值3.3 全局变量定义的位置3.4 全局变量命名的建议 1.局部变量和全局变量 (1)局部变量 …...
攻克 3D 模型网站建设难题,看迪威系统优势
在当今数字化时代,3D 模型广泛应用于建筑设计、游戏开发、工业制造、文化创意等诸多领域。拥有一个功能强大的 3D 模型网站,对于企业展示产品、设计师分享作品、教育机构开展教学等都具有重要意义。然而,构建这样一个网站却并非易事ÿ…...
仿最美博客POETIZE(简易版)
写在前面 本文章参考于两个开源项目分别为:POETIZE-最美博客,拾壹博客 如有侵权,请联系删除 正题 此页面为拾壹博客修改而成,采用了POETIZE的布局以及背景图片,技术栈:SpringbootVue,主要涉及页面为网站…...
vue/H5的日历组件可简单定制
在components创建riliZujian.vue <template><div class"max_box"><!-- 日历 文字 --><div class"month"><div click"lastMonth" class"monthText13">上月</div><div class"monthText2&q…...
STM32——独立看门狗(IWDG)
IWDG 简介 独立看门狗本质上是一个 定时器 ,这个定时器有一个输出端,可以输出复位信号。该定时器是一个 12 位的递减计数器 ,当计数器的值减到 0 的时候,就会产生一个复位信号。如果 在计 数没减到 0 之前,重置计…...
C++11智能指针简述
一、实现原理 在智能指针对象中有一个裸指针,此指针存储的是动态创建对象的地址,用于生存期控制,能够确保智能指针对象离开所在作用域时,自动正确地销毁动态创建的对象,防止内存泄漏。 使用裸指针存在的问题ÿ…...
fastpdf应用程序错误0xc0000142
原因:一般是部分DLL文件未能被系统注册或者丢失,导致动态库调用错误造成的。 解决方法:将DLL文件重新注册一遍。 手动复制:1.按下“winr”打开运行,在运行框中输入“cmd”,再点击确定; 2.在命…...
Linux操作系统实验报告单(3)文本编辑器vi/vim
一、实验目的 掌握vi/vim编辑器的进入和退出方式了解vi/vim的三种模式熟练vi/vim的操作命令 二、实验内容 1.在家目录下新建一个名为“vitest_name”(“name”为学生姓名拼音)的目录。 ●创建用户目录命令:sudo mkdir /home/vitest_lw3613 …...
linux(centos8)下编译ffmpeg
必要依赖 # centos8有些找不到依赖包,需要手动下载源码编译 sudo dnf install -y epel-release sudo dnf install -y git gcc gcc-c make nasm yasm \libtool autoconf automake cmake \bzip2 bzip2-devel zlib-devel \xz xz-devel x264-devel x265-devel \openssl…...
Centos固定IP配置
虚拟机安装 安装vmware 网盘链接 安装centos7.5 网盘链接 安装教程自行查找 固定IP配置 对安装好的VMware进行网络配置,方便虚拟机连接网络,本次设置建议选择NAT模式,需要宿主机的Windows和虚拟机的Linux能够进行网络连接,…...
AI自动获客系统源码
一、AI自动获客的显著优势 在当今商业环境中,AI自动获客技术正逐渐成为企业获客的新宠。相较于传统的获客方式,它展现出诸多显著优势。首先,AI技术能够通过智能分析和精准匹配,快速找到潜在客户,从而大大提高获客效率…...
3.17[Q]CV Bézier curve
我是计算机视觉学生,?详细解释,越细节越好 我是计算机视觉学生,如何使用de Casteljau 算法来绘制由 4 个控制点表示的 Bzier 曲线?原理是什么?工作流程是什么?详细解释,越细节越好…...
K8S学习之基础三十一:k8s中RBAC 的核心概念
Kubernetes (k8s) 中的 RBAC(Role-Based Access Control,基于角色的访问控制)是一种用于管理用户和服务账户对集群资源访问权限的机制。RBAC 允许管理员通过定义角色(Role)和角色绑定(RoleBindingÿ…...
二叉树算法题实战:从遍历到子树判断
目录 一、引言 二、判断两棵二叉树是否相同 思路 代码实现 注意点 三、二叉树的中序遍历 思路 代码实现 注意点 四、判断一棵树是否为另一棵树的子树 思路 代码实现 注意点 编辑 五、补充 一、引言 作者主页:共享家9527-CSDN博客 作者代码仓库&am…...
第8章 信息安全工程(一)
8.1 信息安全管理 8.1.1 保障要求 网络与信息安全保障体系中的安全管理建设,通常需要满足以下 5 项原则: (1)网络与信息安全管理要做到总体策划,确保安全的总体目标和所遵循的原则。 (2)建立相关组织机构,要明确责任部门&…...
学习threejs,使用MeshFaceMaterial面材质容器
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshFaceMaterial 二…...
Git 实战指南:本地客户端连接 Gitee 全流程
本文将以 Gitee(码云)、系统Windows 11 为例,详细介绍从本地仓库初始化到远程协作的全流程操作 目录 1. 前期准备1.1 注册与配置 Gitee1.2 下载、安装、配置客户端1.3 配置公钥到 Gitee2. 本地仓库操作(PowerShell/Git Bash)2.1 初始化本地仓库2.2 关联 Gitee 远程仓库3. …...
Spring Cloud 中的服务注册与发现: Eureka详解
1. 背景 1.1 问题描述 我们如果通过 RestTamplate 进行远程调用时,URL 是写死的,例如: String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 当机器更换或者新增机器时,这个 URL 就需要相应地变…...
通过 SVG 使用 AI 生成理想图片:技术实现与实践指南
文章目录 1. SVG 与 AI 的结合:技术价值2. 技术原理:AI 如何生成 SVG?3. 实现步骤:从需求到图形3.1 定义需求3.2 使用 AI 生成 SVG3.3 验证与调整 4. 代码解析:实现科技感的关键4.1 渐变背景4.2 网格线条4.3 发光六边形…...
【AI学习从零至壹】Pytorch神经⽹络
Pytorch神经⽹络 神经网络简介神经元激活函数 神经网络神经⽹络的⼯作过程前向传播(forward) 反向传播(backward)训练神经⽹络 Pytorch搭建并训练神经⽹络神经⽹络构建和训练过程数据预处理构建模型优化器&提取训练数据训练样本 神经网络简介 神经元 在深度学习中&#x…...
设计模式-对象创建
对象创建 前言1. Factory Method1.1 模式介绍1.2 模式代码1.2.1 问题代码1.2.2 重构代码 1.3 模式类图1.4 要点总结 2. Abstract Factory2.1 模式介绍2.2 模式代码2.2.1 问题代码2.2.2 重构代码 2.3 模式类图2.4 要点总结 3. Prototype3.1 模式介绍3.2 模式代码3.3 模式类图3.4…...
谈谈你对前端工程化的理解,它包含哪些方面
大白话谈谈你对前端工程化的理解,它包含哪些方面 前端工程化其实就是把前端开发变得更规范、更高效、更易于维护的一套方法和流程。就好比你盖房子,不能随便瞎盖,得有设计图纸、施工标准、分工合作,前端工程化也是类似的道理。 项…...
JSON数据格式介绍
2.5 JSON 2.5.1.JSON格式的用途 在开发中凡是涉及到『跨平台数据传输』,JSON格式一定是首选 2.5.2.JSON格式的说明 1.JSON数据两端要么是{},要么是[] {}定义JSON对象[]定义JSON数组 2.JSON对象的格式是:json {key:value,key:value,...,ke…...
