ZigBee学习——在官方例程上实现串口通信

Z-Stack版本为3.0.2
IAR版本为10.10.1

文章目录

  • 一、添加头文件
  • 二、定义接收缓冲区
  • 三、编写Uart初始化函数
  • 四、编写串口回调函数
  • 五、函数声明
  • 六、函数调用
  • 七、可能遇到的问题(function “halUartInit“ has no prototype)

以下所有操作都是在APP层进行,也就是这个文件

在这里插入图片描述

一、添加头文件

因为要用到memset函数,所以需要添加头文件string.h

#include <string.h>

二、定义接收缓冲区

定义一个接收缓冲区,保存接收到的数据

unsigned char RxBuffer

三、编写Uart初始化函数

void halUartInit(void)
{halUARTCfg_t uartConfig;uartConfig.baudRate = HAL_UART_BR_115200;uartConfig.callBackFunc= UART_CBack;uartConfig.configured = TRUE;uartConfig.flowControl = FALSE;uartConfig.flowControlThreshold = 0;uartConfig.idleTimeout = 6;uartConfig.intEnable = TRUE;uartConfig.rx.maxBufSize = 128;uartConfig.tx.maxBufSize = 0;uartConfig.rx.pBuffer = RxBuffer;HalUARTOpen(HAL_UART_PORT_0,&uartConfig);
}

四、编写串口回调函数

接受完一次数据后,可以在这个函数里面做一些事,这里就是通过UART回传数据到串口助手

void UART_CBack(uint8 port,uint8 event)
{uint8 rxlen = Hal_UART_RxBufLen(HAL_UART_PORT_0);if(rxlen != 0){HalUARTRead(HAL_UART_PORT_0,RxBuffer,rxlen);HalUARTWrite(HAL_UART_PORT_0,RxBuffer,rxlen);memset(TxBuffer,'0',128);		// 用完一次接收到的数据后清空缓冲区的数据}
}

五、函数声明

这个不用说的,或者你把上面两个函数放在调用它们之前,我是放在最后,所以才需要函数声明。

六、函数调用

在这里插入图片描述

七、可能遇到的问题(function “halUartInit“ has no prototype)

解决方案:Error[Pa045]: function “halUartInit“ has no prototype

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPHP 中使用Redis

环境.env [app] app_debug "1" app_trace ""[database] database "" hostname "127.0.0.1" hostport "" password "" prefix "ls_" username ""[redis] hostname "127.0.0.1…

Java并发基础:BlockingQueue和BlockingDeque接口的区别?

核心概念 BlockingQueue 和 BlockingDeque 它们都支持在并发编程中的线程安全操作&#xff0c;但是&#xff0c;这两个接口之间存在一些关键的区别&#xff0c;主要在于它们所支持的操作和数据结构的特性&#xff0c;如下&#xff1a; 1、数据结构特性&#xff1a; Blocking…

npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并就行内容修改

前面 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们讲了将自己写的一个函数发送到npm上 那么 如果我们想到更好的方案 希望对这个方法进行修改呢&#xff1f; 比如 我们这里加一个方法 首先 我们还是要登录npm npm login然后 根据要求填写 Username 用…

HDFS 之 数据管理(namespace 和 slaves)

1、namespace Namespace在HDFS中是一个非常重要的概念,也是有效管理数据的方法。Namespace有很多优点:可伸缩性。使HDFS集群存储能力可以轻松进行水平拓展;系统性能。单点性能受限,影响系统吞吐;隔离性。不同业务类型访问集群有时容易互相干扰,使用多Namespace可以有效管…

面试复盘——8

前言 浙江一家小公司&#xff0c;300人左右。做技术为主的&#xff0c;还不错。 回家火车那天电话聊的&#xff0c;之后第二天就约面的&#xff0c;可惜结果不尽人意&#xff0c;当场挂了。 但可惜答的很菜了&#xff0c;遗憾。 一面 线上面的&#xff0c;一上来就要求摄像头…

BlueLotus 下载安装使用

说明 蓝莲花平台BlueLotus&#xff0c;是清华大学曾经的蓝莲花战队搭建的平台&#xff0c;该平台用于接收xss返回数据。 正常执行反射型xss和存储型xss&#xff1a; 反射型在执行poc时&#xff0c;会直接在页面弹出执行注入的poc代码&#xff1b;存储型则是在将poc代码注入用…

Leetcode 198 打家劫舍

题意理解&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代…

如何在 emacs 上开始使用 Tree-Sitter(windows)

文章目录 如何在emacs上开始使用Tree-Sitter&#xff08;windows&#xff09; 如何在emacs上开始使用Tree-Sitter&#xff08;windows&#xff09; 参考&#xff1a;“How to Get Started with Tree-Sitter”。 首先要有一个可运行的emacs&#xff0c;并且它支持Tree-Sitter&…

Docker配置Portainer容器管理界面

目录 一、Portainer 简介 优点&#xff1a; 缺点&#xff1a; 二、环境配置 1. 拉取镜像 2. 创建启动容器 三、操作测试 1. 进入容器 2. 拉取镜像并部署 3. 访问测试 一、Portainer 简介 Portainer 是一个开源的轻量级容器管理界面&#xff0c;用于管理 Docker 容器…

图数据库 之 Neo4j - 环境搭建(2)

运行环境&#xff1a; centos7 Docker version 18.09.6 下载镜像 docker search neo4j docker pull neo4j 创建 neo4j 用户 # 创建 neo4j 用户 # -M 不创建用户的主目录 sudo useradd -M neo4j # usermod 用于修改用户属性命令 # -L 锁定用户&#xff0c;用户无法登录系统 user…

【知识图谱--第二讲知识图谱的表示】

知识图谱的表示 知识表示Knowledge Representation 知识表示方法知识图谱的符号表示基于图的知识表示与建模简单图建模-最简单的无向图有向标记图OWL与Ontology 知识图谱的向量表示 知识表示 Knowledge Representation 知识表示&#xff08;KR&#xff09;就是用易于计算机处…

深度测评:ONLYOFFICE 桌面编辑器 v8.0新功能

目录 前言 一、PDF表单处理&#xff1a;提升办公效率 二、RTL&#xff08;从右到左&#xff09;支持&#xff1a;满足不同语言习惯 三、Moodle集成&#xff1a;教育行业的新助力 四、本地界面主题&#xff1a;个性化办公体验 五、性能优化与稳定性提升 六、性能与稳定性…

C++中用Boost::Python调用Python模块

这个过程有挺多坑&#xff0c;记录一下。我这里的环境&#xff1a; Windows 11 Qt 6.2 Boost 1.8.4 CMake 3.25.2 Visual Stutio 2019&#xff08;主要用于C编译&#xff09; 1、下载并将Boost编译为静态库 b2.exe toolsetmsvc-14.2 install --prefixboost安装路径 links…

数据链路层DoS

图9-14 集线器应用原理 数据链路层中拒绝服务攻击的方式一般很少为人所熟知。数据链路层拒绝服 务攻击的主要目标为二层交换机。在早期网络中&#xff0c;通常都会使用集线器作为中间 处理设备。集线器属于纯硬件网络底层设备&#xff0c;没有任何“ 智能记忆” 能力和“学 …

Python高级属性访问使用方法

Python中的高级属性访问是指通过特殊的方法来实现对属性的访问和操作。以下是几个常用的高级属性访问方法: getattr__和__setattr: __getattr__方法在访问不存在的属性时被调用,可以在方法中实现自定义的默认值或错误处理逻辑。__setattr__方法在给属性赋值时被调用,可以在…

云安全领域前瞻:2024年五大瞩目趋势解析

综述 随着2024年对生成型人工智能的炒作达到顶峰&#xff0c;这种类型的人工智能将对攻击者和安全团队的行动产生重大影响。尽管生成式人工智能不会是一些人期待的灵丹妙药&#xff0c;但它将提升我们执行任务的能力&#xff0c;例如检测异常、预测威胁和自动响应安全事件。 …

Airtest实现在手机界面快速批量采集数据

Airtest实现在手机界面快速批量采集数据 一、问题 Airtest使用的poco方法比较慢,寻找差不多一周,看完这篇文章能节省一周时间,希望帮到大家。二、解决思路 使用Airtest图像识别,这样就会速度上提升效率。 三、解决办法 使用页面规律,要找到每条数据的附近规律(一般是图…

发廊理发店微信小程序展示下单前端静态模板源码

模板描述&#xff1a;剪发小程序前端源码&#xff0c;一共五个页面&#xff0c;包括店铺、理发师、订单、我的等页面 注&#xff1a;该源码是前端静态模板源码&#xff0c;没有后台和API接口

代码随想录训练营第三十期|第二十九天|回溯算法part05|491.递增子序列* 46.全排列* 47.全排列 II

491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public List<List<Integer>> findSubsequences(int[] nums) {List<List<Integer>> res new ArrayList<>();List<Integer> list new ArrayList<>();df…

PCIE和USB 耦合电容放置位置记录- 一般放置在TX端

PCIE耦合电容位置 以下为引用内容&#xff0c;为记录而做的本篇文章&#xff1a; 1、PCIe标准里面明确规定&#xff1a;当两个设备通过连接器互联时&#xff0c;必须放置交流耦合电容到TX端&#xff1b; 2、放远放近最大的不同时高速信号传输中的介质损耗和趋肤效应不同&#…