STM32+Zigbee模块实现串口通信获取传感器数据

2023-05-16

文章目录

  • 1.所用的资源
  • 2.Zigbee模块简介
  • 3. STM32板上用到的资源
  • 4.代码部分

1.所用的资源

1.两个Zigbee透传模块
2.两块32板(我手上的是VET6和RCT6的两块板子),其它的板子也可以,不过注意一下启动文件对应
3.颗粒物传感器

2.Zigbee模块简介

DL-22无线串口模块
在这里插入图片描述

1.工作模式分为点对点和广播模式
点对点模式,要设置一个发送端,一个接收端,根据它说明书进行设置就好,还需要设置相同的信道,信道就是与传输数据的通道,不同的信道不会相互干扰
2.广播模式,所有的Zigbee模块都在同一个信道,任何一个模块发出的数据都可以被其它模块接收
我这里采用的是点对点模式,根据说明书已设置好发送与接收

3. STM32板上用到的资源

1.发送端32板:用到三个USART串口,串口1用于检验单独节点传感器数据是否采集成功,与串口助手通信,在确保传感器数据采集ok的情况下也可以不用,串口2用于与采集传感器数据,串口3用来连接Zigbee模块。
2.接收端32板:用到两个USART串口,串口1用于与串口助手通信,串口2用于连接Zigbee模块。
3.我这里串口对应的板子引脚
串口1:PA9 PA10
串口2: PA2 PA3
串口3: PB10 PB11

4.代码部分

1.在之前记录的串口通信博客的基础上。
2.Zigbee模块其实就是透传作用,发送端通过串口2采集颗粒物传感器数据到单片机内,通过串口3传给Zigbee模块,两个Zigebee模块通信,接收端Zigbee模块通过串口2将接收的数据传到板内,再通过串口1与串口助手进行通信。所以关键的地方就在发送端的串口2接收传感器数据完成后,把数据通过串口3发送到Zigbee模块,所以需要在串口二的中断函数里面加入串口3发送数据的命令。
在这里插入图片描述
3.发送端串口2中断

//功能:串口2中断服务程序,接收到数据会进入这个函数
//参数:无
//返回:无
 
 u8 USART_RX_BUF[10];//定义接收数组,看传感器返回的有多少字节数据
 u8 USART_RX_STA=0;//数组标志位,如第0位、第一位
 static char  start=0;  //开始接收数据标志位

void USART2_IRQHandler(void)
{
  u8 Res=0;//定义一个数来接收每次读取的数据
   if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断,每一个字节都会中断一次
    {
        Res =USART_ReceiveData(USART2);	//读取接收到的字节数据
        //接收数据时不要随便加入占用时间的命令,如串口打印,会影响下面数据字节的接收
      
			if(Res == 0xFF) //如果接收的第一位数据是0XFF(这个是查看传感器的手册得知的,这里相当于进行校验)
            {
                 start=1;   //开始接收数据标志位,一旦第一个接收正确,就就继续向下接收
            }

            if(start== 1)
            {
                USART_RX_BUF[USART_RX_STA] = Res ; //把接收到的数据存到数组里面		
                USART_RX_STA++;//数组标志位加1
                if(USART_RX_STA >= 10 && (USART_RX_BUF[1]==0X01))//这里还校验了接收的第二个数据
                    {
                     printf("PM2.5:%d\n",USART_RX_BUF[3]);//通过                         串口1打印接收数组里的数据	
                        							  	USART_SendData(USART3,USART_RX_BUF[3]);	//将数据通过串口3发出							  uart3_send_buff(USART_RX_BUF,10);
                        USART_RX_STA=0;//重新开始接收   
                        USART_RX_BUF[0] = 0;
					              start=0;
                    }
            } 
        
		}
	}		

4.接收端的代码就和之前串口采集传感器数据主动上传的差不多了,只是把采集传感器的数据换成了采集Zigbee获得的数据。
发送端和接收端的完整代码:放评论区了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32+Zigbee模块实现串口通信获取传感器数据 的相关文章

  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 在没有 IDE 的情况下如何使用 CMSIS?

    我正在使用 STM32F103C8T6 并想使用 CMSIS 这本质上只是寄存器定义 没有代码 让我的生活更轻松 同时仍保持在较低水平 问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用 所有文档似乎都与特定于供应商的 I
  • 当数据大小较小时,内存到内存 DMA 传输是否需要权衡?

    我正在学习 STM32 F4 微控制器 我正在尝试找出使用 DMA 的限制 根据我的理解和研究 我知道如果数据量较小 即设备使用DMA生成或消耗少量数据 则开销会增加 因为DMA传输需要DMA控制器执行操作 从而不必要地增加系统成本 我做了
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • XBee3 协调器在网络发现期间找不到 End_Device

    目前 我正在运行 XBee3 International Mesh Kit 并尝试按照文档中给定的示例进行操作 我尝试使用 Micropython REPL 为三个设备实现网络发现 以下是我的 3 个 XBee 设备的配置 3 个 XBee
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加

随机推荐

  • qt-5串口与通讯

    文章目录 文章目录 一 串口通讯 二 实现串口通讯 1 在头文件中引入 QtSerialPort 类的两个头文件 xff08 必须引入 xff09 2 在工程文件中添加以下代码 3 在头文件中定义全局的串口对象 4 相关配置 5 通过一个按
  • qt-5数据库使用

    文章目录 目录 前言 一 所需要的头文件 二 数据库操作 1 addDatabase的函数原型如下 2 连接数据库 3 创建数据库表 4 插入数据到表中 5 更新表中的数据 总结 前言 例如 xff1a qt 5 创建数据库 xff0c 创
  • 利用MapReduce算法实现统计分析(单词统计,或者关键词统计)实验报告

    本文相关idea的代码出自 xff1a https blog csdn net weixin 38468167 article details 108658531 实验内容 xff1a 开发MapReduce算法 xff0c 实现统计分析
  • linux chomd 有何作用

    96 chmod 96 是 Linux 用来更改文件或目录权限的命令 它允许你控制文件和目录的访问权限 xff0c 决定文件 目录能否被用户读取 写入 执行的权限 具体说 xff0c chmod 可以更改 owner group 和 oth
  • 缓存同步-Canal

    目录 安装Canal 监听Canal 项目中对于canal的应用 应用场景 项目测试 场景 xff1a 缓存不是设置了有效期吗 xff0c 说明在有效期范围内数据是一直在的 xff0c 那么当数据库中的数据发送改变 xff0c 那么缓存还是
  • 对Redis布隆过滤器的实现

    目录 实现思路 首先最重要的自定义hash 然后就是将key放入bitSet 然后就是判断布隆过滤器bitSet数组中是否含有对应的key 代码 实现思路 39条消息 Redis布隆过滤器 Fairy要carry的博客 CSDN博客 首先最
  • fork()函数详解

    目录 1 基本了解 xff1a 2 fork函数的了解 xff1a 3 僵死进程 xff1a 4 fork和多线程 xff1a 1 多线程中某个线程调用 fork xff0c 子进程会有和父进程相同数量的线程吗 xff1f 2 父进程被加锁
  • 一阶线性自抗扰控制的整定

    摘要 线性自抗扰控制 linear active disturbance rejection control LADRC 是解决系统外部不可测扰动和内部未知不确定性的一种新型控制方法 其精髓是将系统的不确定性转化为一个可观测的状态 利用扩张
  • 单目视觉SLAM综述

    摘要 单目视觉SLAM因单目相机体积小 功耗低 信息获取丰富受到了广泛使用 为了深入分析单目视觉SLAM的优势 首先 简述单目视觉SLAM的基本原理 从特征点检测 相机姿态估计 选取关键帧 创建地图 地图及相机姿态优化 闭环检测等方面总结S
  • idea 修改 JDK 版本

    idea 修改 JDK 版本 第一步 xff1a 修改环境变量 xff08 修改成你需要的 JDK 版本 xff09 第二步 xff1a IDEA中的修改 导入Jdk进IDEA 第三步 xff1a 修改项目的sdk 第四步 xff1a 修改
  • Jmeter性能测试(13)--常见问题及解决方法

    jmeter作为一个开源的纯Java性能测试工具 xff0c 工作中极大的方便了我们进行接口 性能测试 xff0c 但使用过程中也遇到了很多的问题 xff0c 下面就记录一下自己遇到的问题 xff0c 后续会不断更新 1 获取日志 在使用j
  • C++的基础语法知识

    目录 一 认识C 43 43 1 如C语言 C 43 43 C Python等语言 xff0c 为什么会有这么多语言存在 xff1f 2 C 43 43 解决了什么问题 xff1f 3 什么是面向对象 xff1f 4 C 43 43 的特性
  • 基于遗传算法车辆路径问题(VRP)

    一 车辆路径问题简介与求解要求 交通运输是国民经济的动脉 xff0c 各种运输方式在日常运输营运管理工作中都要面对这样一个共同的问题 xff1a 如何为载运工具 汽车 xff0c 列车 xff0c 轮船和飞机 xff0c 统称为车辆 确定行
  • docker 安装(centos7虚拟机)

    Docker xff0c 翻译过来就是码头工人 Docker是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中 xff0c 然后发布到任何流行的Linux机器上 xff0c 也可以实现虚拟化 容器
  • java 死锁产生的四个必要条件

    1 互斥使用 xff0c 即当资源被一个线程使用 占有 时 xff0c 别的线程不能使用 2 不可抢占 xff0c 资源请求者不能强制从资源占有者手中夺取资源 xff0c 资源只能由资源占有者主动释放 3 请求和保持 xff0c 即当资源请
  • JS-数组和函数冒泡排序递归函数

    数组和函数 数组 计算数组中所有元素的和 span class token comment 定义数组 span span class token keyword var span nums span class token operator
  • Redis的Java客户端

    1 快速入门 Jedis使用的基本步骤 xff1a 1 引入依赖 2 创建Jedis对象 xff0c 建立连接 3 使用Jedis xff0c 方法名与Redis命令一致 4 释放资源 lt jedis依赖 gt lt dependency
  • Winform

    自适应窗口布局 OnLayout 窗口在尺寸变化时 会调用OnLayout方法 所以 在form1 cs文件里重写OnLayout方法即可实现自适应 在OnLayout方法中 我们获取一下窗口的宽度和高度 根据窗口的宽度和高度重新设定控件的
  • STM32读取串口传感器数据(颗粒物传感器,主动上传)

    文章目录 1 开发板选择 用到的资源 2 串口通信 xff08 个人理解 xff09 3 代码分析 xff08 注释比较详细 xff09 1 主函数2 串口1配置3 串口2配置以及中断函数 4 注意问题5 源码链接 1 开发板选择 我用的是
  • STM32+Zigbee模块实现串口通信获取传感器数据

    文章目录 1 所用的资源2 Zigbee模块简介3 STM32板上用到的资源4 代码部分 1 所用的资源 1 两个Zigbee透传模块 2 两块32板 xff08 我手上的是VET6和RCT6的两块板子 xff09 xff0c 其它的板子也