ZigBee学习——在官方例程基础实现点灯

IAR版本 :10.10.1
Z-stack版本 :3.0.2

文章目录

  • 一、买的板子原理图
  • 二、实现过程
    • 2.1 重定义LED的物理映射(HAL层)
    • 2.2 创建LED事件(应用层)
      • 2.2.1 定义用户事件
      • 2.2.2 修改zclGenericApp_event_loop()
    • 2.3 触发事件

一、买的板子原理图

在这里插入图片描述

二、实现过程

2.1 重定义LED的物理映射(HAL层)

在这里插入图片描述

#define LED1_BV           BV(0)  
#define LED1_SBIT         P1_0
#define LED1_DDR          P1DIR
#define LED1_POLARITY     ACTIVE_LOW  

(1)其中的BV(N)表示数值1向左移动N位,等价于(1 << N),因此BV(0)的值为1<<0,也就是等于1。
(2)#define LED1_SBIT P1_0表示LED1与CC2530的P1_0连接。
(3)#define LED1_DDR P1DIR表示LED1对应的方向寄存器为P1DIR。P1DIR在前面的章节已经讲解过,这里不再讲解了。
(4)#define LED1_POLARITY ACTIVE_LOW表示LED1是低电平驱动的,也就是给P1_0输入低电平,LED1就会被点亮,源代码是HIGH,这里根据板子LED的接法设置为低电平驱动

2.2 创建LED事件(应用层)

2.2.1 定义用户事件

App->zcl_genericapp.h->宏定义事件(独热编码)
在这里插入图片描述

#define TEST_LED_EVT                        0x0010 

2.2.2 修改zclGenericApp_event_loop()

App->zcl_genericapp.c->zclGenericApp_event_loop()
在这里插入图片描述

// 处理自定义的用户事件:TEST_LED_EVT 
if ( events & TEST_LED_EVT )
{
    printf("Blink LED!\r\n");

    HalLedBlink(
        HAL_LED_1,//指定第1盏LED
        10,//指定闪烁次数是10次
        50,//指定50%的时间LED是处于开启状态
        1000);//指定1次闪烁的时间周期是1000ms
        
    //消除已经处理的事件,然后返回未处理的事件
    return ( events ^ TEST_LED_EVT );
}

2.3 触发事件

App->zcl_genericapp.c->zclGenericApp_Init()

将下面这行代码添加到这个函数的末尾

在这里插入图片描述

// 触发事件
osal_start_timerEx( zclGenericApp_TaskID, TEST_LED_EVT, 5000 );

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows10忘记密码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

处理SERVLET中的错误

处理SERVLET中的错误 问题陈述 一位用户在使用在线计算机应用程序时输入一个非数字字符做数字加法。servlet试图将用户输入的值转换成整数型时,引发了NumberFormException类型的异常。要创建一个Web应用程序来使用自定义错误页面处理该异常。该自定义错误页面需要向用户提供关…

uniapp android和微信小程序实现PDF在线预览

在使用uniapp开发移动端时&#xff0c;微信开发者工具里webview能正常打开后端接口返回的pdf文件流。正式发布后&#xff0c;在配置了业务域名和服务器域名的前提下&#xff0c;预览pdf文件却只能看到白屏&#xff0c;因此我猜测微信小程序不能通过webview读取文件流。这个想法…

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…

Unix五种I/O模型(阻塞、非阻塞、多路复用、信号驱动、异步)

文章目录 概要一、I/O基础二、阻塞式I/O三、非阻塞式I/O三、I/O多路复用四、信号驱动I/O五、异步I/O六、小结 概要 在工作中&#xff0c;经常使用Nginx、Redis等开源组件&#xff0c;常提到其高性能的原因是网络I/O的实现是基于epoll&#xff08;多路复用&#xff09;。这次呢…

复制命令COPY

copy在英文中是复制的意思&#xff0c;所谓复制就是原来的文件并没有任何改变&#xff0c;重新产生了一个内容和原来文件没有任何差别的文件。复制&#xff08;copy&#xff09;命令主要用于复制一个或更多个文件到指定的位置&#xff0c;该命令可以被用于合并文件&#xff0c;…

ES6-数组的解构赋值

一、数组的解构赋值的规律 - 只要等号两边的模式相同&#xff0c;左边的变量就会被赋予对应的值二、数组的解构赋值的例子讲解 1&#xff09;简单的示例&#xff08;完整的解构赋值&#xff09; 示例 //基本的模式匹配 // a&#xff0c;b,c依次和1&#xff0c;2&#xff0c…

Element UI+Spring Boot进行CRUD的实例

ElementUI安装与使用指南 前端代码&#xff1a;点击查看learnelementuispringboot项目源码 后端代码&#xff1a;点击查看 LearnElementUiAndSpringBoot 一、前端配置 安装axios Gitee的axios介绍与使用 GitHub的axios介绍与使用 方式一&#xff1a;使用npm安装 $ npm in…

深度学习(生成式模型)—— Consistency Models

文章目录 前言预备知识&#xff1a;SDE与ODEMethod实验结果 前言 Diffusion model需要多次推断才能生成最终的图像&#xff0c;这将耗费大量的计算资源。前几篇博客我们已经介绍了加速Diffusion model生成图像速率的DDIM和Stable Diffusion&#xff0c;本节将介绍最近大火的Co…

力扣热门100题刷题笔记 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串 题目链接&#xff1a;5. 最长回文子串 题目描述&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。示例&#xff1a; 输入&#xff1a;s "…

【DDD】学习笔记-数据设计模型

通过分析活动获得的数据项模型&#xff0c;可以认为是数据分析模型&#xff0c;它确定了系统的主要数据表、关系及表的主要属性。到了建模的设计活动&#xff0c;就可以继续细化数据项模型这个分析模型&#xff0c;例如丰富每个表的列属性&#xff0c;或者确定数据表的主键与外…

从零开始手写mmo游戏从框架到爆炸(二)— 核心组件抽离与工厂模式创建

上一章我们已经完成了一个基本netty的通信&#xff0c;但是netty的启动很多代码都是重复的&#xff0c;所以我们使用工厂模式来生成不同的ServerBootstrap。 首先创建一个新的组件core组件&#xff0c;和common组件&#xff0c;主要用于netty通信和工具类&#xff0c;从server…

[Android] 240204批量生成联系人,短信,通话记录的APK

平常在做测试的时候&#xff0c;需要批量生成很多测试数据&#xff1b; 陌生人 联系人名字的生成支持随机生成&#xff0c;也可以自定义生成&#xff0c;自定义生成陌生人的数据&#xff0c;联系人的名字是否带索引&#xff1b; 通话记录 随机生成通话记录&#xff0c;在生…

在vscode上传项目到gitee

一、在Gitee上新建一个仓库 Tip&#xff1a;若已经创建过了&#xff0c;直接跳到第二部分看VsCode如何上传代码到Gitee 创建仓库比较简单&#xff0c;下面两张图就是整个过程&#xff0c;这里不在赘述&#xff0c;具体如下&#xff1a; 二、VsCode连接Gitee上创建的仓…

AtCoder Regular Contest 171(A~B)

A - No Attacking N*N棋盘上&#xff0c;放A个rook棋和B个pawn棋。 条件1&#xff1a;假设&#xff08;i&#xff0c;j&#xff09;上有一个rook&#xff0c;那么这 i 行和这 j 列&#xff0c;都不能再有其他棋子。 条件2&#xff1a;假设&#xff08;i&#xff0c;j&#x…

Cadence——输出文件部分

本文章基于凡亿教育基础入门66讲 &#xff08;一&#xff09;MARK点&#xff0c;工艺边&#xff0c;阻抗说明相关准备文件 &#xff08;1&#xff09;MARK点 a,点击设置&#xff0c;用户偏好设置 b,指定MARK焊盘路径和封装路径 c,点击放置&#xff0c;手动 d,点击高级设置,将…

什么是TCP三次握手、四次挥手?

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是小徐&#x1f947;☁️博客首页&#xff1a;CSDN主页小徐的博客&#x1f304;每日一句&#xff1a;好学而不勤非真好学者 &#x1f4dc; 欢迎大家关注&#xff01; ❤️ 1、三次握手 你(客户端)给一个朋友(服务器)打电…

文心一言 VS 讯飞星火 VS chatgpt (194)-- 算法导论14.3 2题

二、用go语言&#xff0c;改写 INTERVAL-SEARCH 的代码&#xff0c;使得当所有区间都是开区间时&#xff0c;它也能正确地工作。 文心一言&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;处理开区间&#xff08;open intervals&#xff09;时&#xff0c;我们需…

034 多维数组

二维数组理解图例 示例 int[][][] nums new int[2][2][2]; Random random new Random(); for (int[][] num : nums) {for (int[] ints : num) {for (int i 0; i < ints.length; i) {// 生成100以内的随机数ints[i] random.nextInt(100);}} } for (int[][] num : nums)…

Bard 最新更新:全球开放访问Gemini Pro并生成图片

深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领域的领跑者。点击订阅&#xff0c;与未来同行&#xff01; 订阅&#xff1a;https://rengongzhineng.io/ 。 今…