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和其他设备收发数据相关推荐

  1. 小米(绿米联创)39元 无线开关破解(NXP JN5169 zigbee 3.0开发实战)

    前言 话说小米的39元无线开关,买了两个回来,想着说zigbee alliance的规范规定各家的zigbee应该都是在协议栈ZCL层面兼容的,没想到必须配小米的网关才能使用,而且网关价格不菲,就心想 ...

  2. NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM

    NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM JN5169 内存映射 一.EEPROM 1.EEPROM特性 2.实现代码 3.串口格式化输出 4.效果图 二.片上FLAS ...

  3. NXP JN5169使用代码模板新建外设工程

    NXP JN5169使用代码模板新建外设工程 一.下载工程模板 二.导入工程 三.修改工程模板 四.根据工程模板新建一个DIO工程 一.下载工程模板 BeyondStudio for NXP不提供直接 ...

  4. NXP JN5169 读写片外 FLASH

    NXP JN5169 读写片外 FLASH 一.原理图 二.读写兼容的片外 FLASH 设备 三.读写不兼容的片外 FLASH 设备 一.原理图 二.读写兼容的片外 FLASH 设备 JN5169 片 ...

  5. NXP JN5169使用定时器进行PWM输出和定时功能

    NXP JN5169使用定时器进行PWM输出和定时功能 一.定时器介绍 1.定时器介绍 2.定时器可操作的模式 3.定时器DIO 4.定时器和PWM模式 5.定时器中断 二.实现代码 1.PWM输出 ...

  6. NXP JN5169 波特率配置方案

    NXP JN5169 UART 波特率设置 一.系统时钟介绍 1.高速(32MHz)系统时钟 1.32MHz 晶体振荡器 2.高速RC振荡器 2.低速(32kHz)系统时钟 1.32 kHz RC 振 ...

  7. Zigbee HA 框架学习笔记

    Zigbee HA 框架学习笔记之DeviceID Zigbee HA 框架中支持众多的设备类型,这些类型以DeviceID的形式存在,此处做一个摘要. HA 支持的 Device ID Device ...

  8. NXP JN5169 使用看门狗定时器

    NXP JN5169 使用看门狗定时器 一.看门狗定时器介绍 二.示例代码 一.看门狗定时器介绍 JN5169 提供了看门狗定时器以防止软件锁定.它通过计算高速 RC 系统时钟(该振荡器运行在 27M ...

  9. NXP JN5169 UART 波特率设置

    NXP JN5169 UART 波特率设置 一.系统时钟介绍 1.高速(32MHz)系统时钟 1.32MHz 晶体振荡器 2.高速RC振荡器 2.低速(32kHz)系统时钟 1.32 kHz RC 振 ...

最新文章

  1. Java高并发编程(四):并发编程基础
  2. STM32L0系列串口重定义的方法
  3. matlab p-tite分割图像,P'tite fourmi
  4. Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)
  5. pyminifier混淆代码的使用案例
  6. 六、“最是不招眼,凌波水上漂”
  7. 靶场练习第十二天~vulnhub靶场之dc-4
  8. 数据库系统实训——实验七——触发器
  9. linux : epoll详解
  10. matlab 工程文件下载,工程文件管理 - MATLAB Simulink - MathWorks 中国
  11. java 里面怎么截取倒数第几个字_Java反射是什么
  12. 130242014057 周陈清 实验一
  13. 【机器学习算法实现】主成分分析(PCA)——基于python+numpy
  14. 很详细的解决Tomcat乱码问题
  15. MATLAB地图作为底图,Matlab中自带地图绘制WorldMap详解
  16. python实现·数据结构与算法之单向链表
  17. 埃特巴什码(Atbash Cipher)
  18. oppo实现appium 自动化测试
  19. 【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
  20. libreCAD源码阅读笔记4

热门文章

  1. linux下hp ssp在线更新固件,hpe ssp固件升级文档.docx
  2. 口袋进化服务器维护,《口袋进化》新手指引.新手指导
  3. MySQL 根据某一个或者多个字段查找重复数据
  4. Web实现:背景颜色渐变色
  5. python微信红包生成器_要抢红包?Python来帮你~
  6. ISO13485医疗器械体系认定意义
  7. 【秒懂】号称最为简明实用的Django上手教程(下)
  8. 电路邱关源学习笔记——2.4电阻的Y形连接和▲形连接的等效变换
  9. pmsm什么意思_关于BLDC和PMSM的定义
  10. python 使用you-get批量下载视频