NXP JN5169 JN-AN-1189-ZigBee-HA-Demo 使用UART0打印调试信息,UART1和其他设备收发数据
NXP JN5169 JN-AN-1189-ZigBee-HA-Demo 使用UART0打印调试信息,UART1和其他设备收发数据
- 一、JN-AN-1189 介绍
- 二、导入工程
- 三、修改工程
- 1、典型系统启动流程
- 2、添加 Task
- 3、添加 Software Timer
- 4、添加 ISR
- 5、配置 ISR
- 6、配置 Task
- 7、初始化 UART1
- 8、禁用 RGB
- 9、启动 Task
- 10、编译工程
- 11、演示效果
一、JN-AN-1189 介绍
JN-AN-1189-ZigBee-HA-Demo 提供并描述了可以在JN516x-EK001评估套件上运行的示例家庭自动化应用程序。
ZigBee家庭自动化(HA)是一种全球标准,用于确保对电灯、加热器、窗帘、百叶窗和门锁等家用电器的灵活控制。家用电器可以通过各种器件进行无线控制,如开关、传感器、遥控单元、手机和计算机等。ZigBee HA所具有的创新功能可用于装配家庭,利用智能手机、平板电脑和笔记本电脑等现有消费电子技术可实现完全集成控制。采用ZigBee家庭自动化应用规范中的ZigBee PRO协议,可在家庭中实施ZigBee HA系统。
恩智浦为JN5169和JN5168微控制器提供了一套完整的ZigBee家庭自动化软件解决方案,其中包括ZigBee PRO协议、HA应用配置文件、ZigBee群组库(ZCL)和JenOS(Jennic操作系统)。ZigBee家庭自动化解决方案可以使用HA配置文件中的HA专用“集群”和ZCL中的通用集群。
JN-AN-1189-ZigBee-HA-Demo 使用 BeyondStudio for NXP 开发,SDK 为 JN-SW-4168,JN-AN-1189-ZigBee-HA-Demo 使用的是 JenOS 。
BeyondStudio for NXP 下载地址:JN-SW-4141
JN-SW-4168 下载地址:JN-SW-4168
安装 JN-SW-4168 方法与安装 JN-SW-4170 一样,安装教程:NXP JN5169 ZigBee 3.0开发环境搭建
二、导入工程
在 BeyondStudio for NXP 导入工程,导入教程:BeyondStudio for NXP导入工程
JN-AN-1189-ZigBee-HA-Demo 有个小 bug ,需要修改 Common/Source 文件夹下的 haEzJoin.c 文件
需要把 u8FilterMap 全部替换成 u16FilterMap,共有 5 处地方需要修改。
分别在 365、368、370、393、418 行。
三、修改工程
这里以 DimmableLight 1(DR1175)为例,修改完的效果为 UART0 打印调试信息,UART1 每隔一秒打印一次信息,同时可以接收数据,由 UART0 打印 UART1 接收到的数据。UART1 重定向到 DIO9、DIO11
1、典型系统启动流程
2、添加 Task
双击打开 Common_Light/Source 文件夹下的 App_ZHA_Light_JN516x_mono.oscfgdiag 文件
放置一个 Task 到 Cooperative Tasks 里,设置 Task 的名字(例如:APP_Uart1Send)、优先级(例如:90、210等)
3、添加 Software Timer
放置一个 Software Timer 到 Software Timers 里,设置软件定时器名字(例如:APP_Uart1SendTimer)
把 APP_Uart1Send 和 APP_Uart1SendTimer连接起来,由 APP_Uart1SendTimer 指向 APP_Uart1Send
4、添加 ISR
由于在 JenOS 不能直接注册回调函数,所以需要添加ISR。先添加一个 Interrupt Source,设置名字(例如:UART1),再添加一个 ISR ,设置名字(例如:APP_ISRUart1),设置 ISR 优先级(例如:5),再把 Interrupt Source 和 ISR 连接起来,由 Interrupt Source 指向 ISR。
5、配置 ISR
打开 Common_Light/Source 文件夹下的 app_zcl_light_task.c 文件
在 app_zcl_light_task.c 文件顶部包含该头文件:
#include <AppHardwareApi.h>
在 app_zcl_light_task.c 文件底部添加以下代码:
OS_ISR(APP_ISRUart1)//该处参数必须和上面添加的ISR名称一致
{uint8 sta;sta = u8AHI_UartReadInterruptStatus(E_AHI_UART_1);DBG_vPrintf(TRUE, "debug:Uart1 interrupt %x\n", sta);//接收数据可用中断if(sta & 0x04){DBG_vPrintf(TRUE, "debug:Receive data available interrupt (next highest priority) !\n");sta = u8AHI_UartReadData(E_AHI_UART_1);DBG_vPrintf(TRUE, "debug:Uart1 Recv: %c \n", sta);}
}
6、配置 Task
打开 Common_Light/Source 文件夹下的 app_zcl_light_task.c 文件(和ISR在同一文件),在 app_zcl_light_task.c 文件底部添加以下代码:
/*发送单个字符*/
PRIVATE void vPutChar(unsigned char c)
{while (!(u8AHI_UartReadLineStatus(E_AHI_UART_1) & E_AHI_UART_LS_THRE)); /*发送FIFO为空*/vAHI_UartWriteData(E_AHI_UART_1, c); /*写入要发送的字符*//*发送移位寄存器为空或者发送FIFO为空,即等待发送完毕E_AHI_UART_LS_THRE | E_AHI_UART_LS_TEMT = 0x20 | 0x40 = 0x60*/while ((u8AHI_UartReadLineStatus(E_AHI_UART_1) & (E_AHI_UART_LS_THRE | E_AHI_UART_LS_TEMT))!= (E_AHI_UART_LS_THRE | E_AHI_UART_LS_TEMT));
}
/*发送字符串*/
PRIVATE void vPutStrs(unsigned char *str)
{while(*str){vPutChar(*str++);}
}OS_TASK(APP_Uart1Send)
{uint8 sta;sta = u8AHI_UartReadLineStatus(E_AHI_UART_1);DBG_vPrintf(TRUE, "debug:u8AHI_UartReadLineStatus: %x\n", sta);//vAHI_UartWriteData(E_AHI_UART_1, 'A');vPutStrs((uint8*)"Uart1 Send!\n");if(OS_eGetSWTimerStatus(APP_Uart1SendTimer) != OS_E_SWTIMER_STOPPED){OS_eStopSWTimer(APP_Uart1SendTimer);}OS_eStartSWTimer(APP_Uart1SendTimer, APP_TIME_MS(1000), NULL );
}
7、初始化 UART1
打开 Common_Light/Source 文件夹下的 app_start_light.c 文件
因为在 DimmableLight1 MONO DR1175 中 UART1 的 DIO14、DIO15 被占用(如果禁用 RGB,则不需要重定向 UART1 的引脚),所以需要重定向 UART1 到 DIO9、DIO11。
输入以下代码:
/*初始化串口*/
PUBLIC void vUartInit(void)
{vAHI_UartSetLocation(E_AHI_UART_1, TRUE);//重定向uart1到DIO9、11,(如果禁用 RGB,则不需要重定向 UART1 的引脚)vAHI_UartEnable(E_AHI_UART_1);//复位指定UART的发送和接收FIFO,并将FIFO触发级别设置为单字节触发vAHI_UartReset(E_AHI_UART_1,TRUE, /* 复位收发FIFO*/TRUE);vAHI_UartReset(E_AHI_UART_1, FALSE, FALSE);vAHI_UartSetBaudRate(E_AHI_UART_1, E_AHI_UART_RATE_115200); /* 设置波特率*///设置Uart1 none校验,字长为8,停止位为1vAHI_UartSetControl(E_AHI_UART_1,E_AHI_UART_ODD_PARITY,E_AHI_UART_PARITY_DISABLE,E_AHI_UART_WORD_LEN_8,E_AHI_UART_1_STOP_BIT,E_AHI_UART_RTS_LOW);//设置Uart1 接收数据可用中断为1vAHI_UartSetInterrupt(E_AHI_UART_1, FALSE, FALSE, FALSE, TRUE, E_AHI_UART_FIFO_LEVEL_1);
}
在方法 PUBLIC void vAppMain(void) 中调用
8、禁用 RGB
打开 Common_Light/Source/DriverBulb 文件夹下的 DriverBulb_DR1175.c 文件(如果重定向 UART1 的引脚到DIO9、11,则不需要禁用 RGB)
加一个宏禁用 RGB,此处修改方法为网友:yilonglucky 提供。
此处大力感谢网友:yilonglucky 提供的资料。
9、启动 Task
打开 Common_Light/Source 文件夹下的 app_start_light.c 文件
在方法 PUBLIC void vAppMain(void) 中启动 RTOS 之后启动 Task
OS_eActivateTask(APP_Uart1Send);
10、编译工程
保存 所有修改过的文件,先 Clean Project 再 Build Project。
这里编译 DimmableLight 1(DR1175)
编译之后刷新一下工程,打开 DimmableLight/Source 文件夹下的 os_irq.S 文件,查看中断是否自动生成
uart 1 优先级
中断向量表
中断函数
打开 DimmableLight/Source 文件夹下的 os_gen.c 文件,查看软件定时器和 Task 是否自动生成
软件定时器
Task
打开 DimmableLight/Source 文件夹下的 os_gen.h 文件,查看软件定时器和 Task 是否自动生成
Task
软件定时器
整个编译流程大概需要 3-5 分钟,编译成功后控制台输出以下信息,为编译生成的 bin 文件:
烧录程序:
11、演示效果
打开两个串口助手:
NXP JN5169 JN-AN-1189-ZigBee-HA-Demo 使用UART0打印调试信息,UART1和其他设备收发数据相关推荐
- 小米(绿米联创)39元 无线开关破解(NXP JN5169 zigbee 3.0开发实战)
前言 话说小米的39元无线开关,买了两个回来,想着说zigbee alliance的规范规定各家的zigbee应该都是在协议栈ZCL层面兼容的,没想到必须配小米的网关才能使用,而且网关价格不菲,就心想 ...
- NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM
NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM JN5169 内存映射 一.EEPROM 1.EEPROM特性 2.实现代码 3.串口格式化输出 4.效果图 二.片上FLAS ...
- NXP JN5169使用代码模板新建外设工程
NXP JN5169使用代码模板新建外设工程 一.下载工程模板 二.导入工程 三.修改工程模板 四.根据工程模板新建一个DIO工程 一.下载工程模板 BeyondStudio for NXP不提供直接 ...
- NXP JN5169 读写片外 FLASH
NXP JN5169 读写片外 FLASH 一.原理图 二.读写兼容的片外 FLASH 设备 三.读写不兼容的片外 FLASH 设备 一.原理图 二.读写兼容的片外 FLASH 设备 JN5169 片 ...
- NXP JN5169使用定时器进行PWM输出和定时功能
NXP JN5169使用定时器进行PWM输出和定时功能 一.定时器介绍 1.定时器介绍 2.定时器可操作的模式 3.定时器DIO 4.定时器和PWM模式 5.定时器中断 二.实现代码 1.PWM输出 ...
- NXP JN5169 波特率配置方案
NXP JN5169 UART 波特率设置 一.系统时钟介绍 1.高速(32MHz)系统时钟 1.32MHz 晶体振荡器 2.高速RC振荡器 2.低速(32kHz)系统时钟 1.32 kHz RC 振 ...
- Zigbee HA 框架学习笔记
Zigbee HA 框架学习笔记之DeviceID Zigbee HA 框架中支持众多的设备类型,这些类型以DeviceID的形式存在,此处做一个摘要. HA 支持的 Device ID Device ...
- NXP JN5169 使用看门狗定时器
NXP JN5169 使用看门狗定时器 一.看门狗定时器介绍 二.示例代码 一.看门狗定时器介绍 JN5169 提供了看门狗定时器以防止软件锁定.它通过计算高速 RC 系统时钟(该振荡器运行在 27M ...
- NXP JN5169 UART 波特率设置
NXP JN5169 UART 波特率设置 一.系统时钟介绍 1.高速(32MHz)系统时钟 1.32MHz 晶体振荡器 2.高速RC振荡器 2.低速(32kHz)系统时钟 1.32 kHz RC 振 ...
最新文章
- Java高并发编程(四):并发编程基础
- STM32L0系列串口重定义的方法
- matlab p-tite分割图像,P'tite fourmi
- Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)
- pyminifier混淆代码的使用案例
- 六、“最是不招眼,凌波水上漂”
- 靶场练习第十二天~vulnhub靶场之dc-4
- 数据库系统实训——实验七——触发器
- linux : epoll详解
- matlab 工程文件下载,工程文件管理
- MATLAB Simulink
- MathWorks 中国
- java 里面怎么截取倒数第几个字_Java反射是什么
- 130242014057 周陈清 实验一
- 【机器学习算法实现】主成分分析(PCA)——基于python+numpy
- 很详细的解决Tomcat乱码问题
- MATLAB地图作为底图,Matlab中自带地图绘制WorldMap详解
- python实现·数据结构与算法之单向链表
- 埃特巴什码(Atbash Cipher)
- oppo实现appium 自动化测试
- 【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
- libreCAD源码阅读笔记4
热门文章
- linux下hp ssp在线更新固件,hpe ssp固件升级文档.docx
- 口袋进化服务器维护,《口袋进化》新手指引.新手指导
- MySQL 根据某一个或者多个字段查找重复数据
- Web实现:背景颜色渐变色
- python微信红包生成器_要抢红包?Python来帮你~
- ISO13485医疗器械体系认定意义
- 【秒懂】号称最为简明实用的Django上手教程(下)
- 电路邱关源学习笔记——2.4电阻的Y形连接和▲形连接的等效变换
- pmsm什么意思_关于BLDC和PMSM的定义
- python 使用you-get批量下载视频