手把手学习Zigbee - 使用Z-Stack 3.0.2配置CC2530的两个串口

22 篇文章 8 订阅
21 篇文章 0 订阅


前言

EFR32那个平台好用是好用,但是网上能找的资料太少了,玩不明白,至今没有弄清楚那个平台的触发回调函数的流程
还是回头用CC2530吧,虽然没EFR32这么先进,但是更加符合我的开发习惯和逻辑,配合 Z-Stack 也比较方便。

设备介绍

在这里插入图片描述

CC2530 挺常见的zigbee 开发板,网上教程很多但 Z-Stack 的不是很全,而且开发板型号可能有细微差异,我这次就被坑了。

串口选择

因为串口0作为调试串口,和传感器通讯就必须要使用额外的串口1
网上找到的资料,都说CC2530有两个串口,每个串口有两个组引脚:
串口0:
位置一:RX - P02,TX - P03
位置二:RX - P14,TX - P15

串口1:
位置一:RX - P05,TX - P04
位置二:RX - P17,TX - P16

但是我手里的这块板子似乎的串口位置被引到了右上角红圈位置,而P04-05,P16-17,两组引脚似乎不能作为串口使用

解析和配置 Z-Stack

在左边工程文件中的HAL文件夹下可以找到 hal_uart.c 文件,里面有一一个 HalUARTInit() 函数,里面可以看到通过三个宏来控制初始化流程:
在这里插入图片描述
通过这三个宏可以找到在上面的 Config 目录下有一个 hal_board_cfg.h 文件, 在那儿我们可以看到 串口相关配置:

在这里插入图片描述
在这里可以看到默认情况下使用 DMA 后就不开启 ISR 串口了

然后知道默认的宏定义后,我们回到HalUARTInit() 函数继续往下追
既然默认走的 DMA 分支,那么我们就去 HalUARTInitDMA() 函数里看看
在这里插入图片描述
原来串口的两组引脚的选择是在初始化的时候 通过刚才我们看见那几组宏来控制引脚的使用
可以很清楚的发现,Z-Stack 使用串口的关节就在那几个宏上面了

那么我们搜索这几个宏,就可以追到HalUARTOpen()函数
在这里插入图片描述
可以看到在这里我们终于发现选择两个串口的地方
从这可以看出两个串口不能同时配置成 DMA 或者 SPI
串口0默认为 DMA 了我们也不去修改了,串口1选择SPI只需要回到 hal_board_cfg.h 文件中
将默认的 HAL_UART_ISR 0改成2即可
HalUARTInitISR()看了一下 和HalUARTInitDMA() 函数差不多
在这里插入图片描述

也是配置两组引脚的选择,默认走的P1引脚,到这看上去就结束了是吧????
当时我也是这么认为的!后面逻辑看上去都完整的对不对?都配置好的啊?

事实证明还是我太年轻,想太多。当我仿照MT库的样子初始化串口
在这里插入图片描述
然后写了两个输出函数后
在这里插入图片描述
串口0一切正常,串口1死活没动静,我人都傻了

反复检查代码发现都没问题
这时我注意到板子右上角有一个 RX1 和 TX1 的样子,马萨卡!

这个板子该不会把串口1 固定接到那儿了吧?

然后我把串口接到 RX1 和 TX1 上,还是没反应
我不确定这个 RX1 和 TX1 对应的是 P0 还是 P1 位置,
默认 P1 位置没反应那就有可能是 P0 了
于是我一通翻找
在 hal_uart_isr.c 函数中 发现如下定义
在这里插入图片描述
这些应该是配置相关寄存器的宏,HAL_UART_ISR == 2 的时候选择的是 P1 位置,然后将IO设置为输入输出
将 *HalUARTInitISR()*函数中 HAL_UART_ISR 的判断修改为 == 2 时进入
在这里插入图片描述
这样串口1就会 从 P0 位置输出了
接上串口线,果然有输出出来了


总结

这次最大的一个教训就是,有时候硬件,会被各厂商做出一些修改,并不一定完全按照手册来!得多试试,揣摩一下硬件厂商

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Zigbee协议栈是一种通信协议栈,用于在无线网络设备之间进行通信。它基于IEEE 802.15.4标准,并提供了一组高层协议,用于管理节点之间的通信和网络形成。Zigbee协议栈由物理层、MAC层、网络层和应用层组成,其中物理层和MAC层一起被称为Zigbee PRO层,网络层和应用层被称为Zigbee应用层。物理层使用ISM频段,支持多种无线信道,MAC层实现透明的数据传输和网络管理,网络层提供多种路由和协议选择,应用层包括多种应用程序和服务。Zigbee协议栈被广泛应用于智能家居、工业自动化、医疗健康和农业等领域。 使用Zigbee协议栈,需要先选择一个合适的芯片或模块,然后将其集成到应用中。通常,芯片或模块供应商提供了与Zigbee协议栈兼容的开发工具和API,开发人员可以利用这些工具和API进行开发。开发过程中,需要根据具体应用的需求进行协议栈的配置和调试,以保证其正常工作。 Z-Stack是一种基于Zigbee协议栈的开发框架,提供了一套完整的工具和API,用于开发Zigbee应用程序。Z-Stack工作流程通常包括以下几个步骤: 1. 硬件设计:选择合适的芯片或模块,并进行硬件设计。 2. 软件开发:使用Z-Stack提供的API进行软件开发,包括协议栈的配置和应用程序的开发。 3. 调试测试:通过Z-Stack提供的调试工具和测试工具,对应用程序进行调试和测试,确保其正常工作。 4. 部署运营:将应用程序部署到实际设备中,进行运营和维护。 总的来说,Zigbee协议栈和Z-Stack提供了一套完整的开发框架,用于开发Zigbee应用程序,可以大大简化开发过程,并提高应用程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值