NRF24L01无线模块在STM32和PC之间通讯问题

thzhr2013 2017-01-18 05:22:49
PC端通过USB接口连一个NRF24L01无线模块,设备管理器中是一个串口;另外一个NRF24L01通过SPI接口连STM32F107板。STM32发数据,PC端没有收到数据。
但是两个STM32板子通信正常,两个USB接口的NRF24L01无线模块分别连到两台PC上通信也是正常的。有没有做过的,请问这是什么原因,是否STM32侧发送数据有什么特别格式要求,现在是按照它的文档说的,即第一个数据是本次传输的字节数做的。
...全文
939 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
校园智能路灯设计方案 设计名称 基于NRF24L01的校园智能路灯初步粗略设计方案 摘要 近年来,低碳生活,节能减排越来越受到国家的大力支持,在校园生活中平均一盏路灯的功率在200W-300W之间,每晚大概需要点亮时长为18:00--5:00,粗略的计算会发现每盏路灯的功耗大概在2.2--3.3kW·h,学校大多用电平局一度电在0.55元左右,因此,每晚一盏路灯所产生的电费大概在1.2--1.8元左右,大学校园犹如一个小城市,每个学校的路灯至少上百盏,路灯的数量有的会达到上千盏甚至更多。这给学校每天的开销带来了一部分没必要的浪费。 节约校园照明用电消耗成为响应国家对于节能号召的重要措施之一。一般的校园照明系统只是运用普通的声控及光控传感器组成开环的控制系统,其灵活性差,功耗大,不可人为干预。而市场上闭环控制的照明系统投入资金大,稳定性差,无法在校园中得到推广。 校园智能路灯设计方案全文共33页,当前为第1页。设计目的 校园智能路灯设计方案全文共33页,当前为第1页。 了解NRF24L01的基本通信原理 掌握stm32f103芯片的AD转换原理 熟练掌握光敏电阻的应用 将本学年所学知识进行一次综合汇总 设计原理 系统的设计主要有以下四个模块部分:微控制器STM32,光敏电阻模块, LED照明电路.无线射频模块。 其中光敏电阻模块与LED照明电路组成检测照明部分,主要负责检测外界光的强度,人流高峰期会默认开启普通照明模式,夜间会默认开启节能模式。 微控制器STM32负责收集采集数据,以及AD转换,通过串口向PC机发送消息。 校园智能路灯设计方案全文共33页,当前为第2页。无线射频模块负责向主机传递信息,当从机照明电路出现错误时会触发射频模块发射数据,不同从机对应不同数据。发送完成结束传输。 校园智能路灯设计方案全文共33页,当前为第2页。 本设计的设计要求 (1).综合考虑选择是一主多从还是一从多主。 (2).硬件设计上应该考虑到滤波的重要性,结构尽量简单实用,易于实现,使系统电路尽量简单。 (3).软件设计必须要有完善的思路,要充分考虑到各种传感器和无线收发器的时序,做到程序简单,调试方便。 (4).通过软件设计尽量降低无线数据传输的误码率 2.主要硬件介绍 (1).NRF24L01无线模块简介 各管脚如下定义: 8.IRQ 7.MISO 6.MOSI 5.SCK 4.CSN 3.CE 2.VCC 1.GND 具体说明: 校园智能路灯设计方案全文共33页,当前为第3页。3.CE 芯片的模式控制线。在 CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)。 校园智能路灯设计方案全文共33页,当前为第3页。 4.CSN 为芯片的片选线 CSN 为低电平芯片工作 5.SCK 为芯片控制的时钟线(SPI时钟) 6.MOSI 为芯片控制数据线(Master output slave input) 主输出 从输入 7.MISO 芯片控制数据线 (Master input slave output)主输入 从输出 8.IRQ 中断信号引脚。中断时变为低电平,即NRF24L01内部发生中断时IRQ 引脚从高电平变为低电平。引脚会在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、Rx FIFO 收到数据、达到最大重发次数。 中断: nRF24L01 的中断引脚(IRQ)为低电平触发,当状态寄存器中TX_DS(数据发送完成中断位)、RX_DR(接收数据中断位) 或MAX_RT(达到最多次重发中断位)为高时触发中断。当MCU 给中断源写'1'时,中断引脚被禁止。可屏蔽中断可以被IRQ 中断屏蔽。通过设置可屏蔽中断位为高,则中断响应被禁止。默认状态下所有的中断源是被禁止的。 校园智能路灯设计方案全文共33页,当前为第4页。 校园智能路灯设计方案全文共33页,当前为第4页。 系统结构框图如下所示 检测照明部分检测照明部分检测照明部分 检测照明部分 检测照明部分 检测照明部分 STM32微控制器 STM32 微控制器 STM32微控制器STM32微控制器 STM32 微控制器 STM32 微控制器 ...... ...... NRF24L01发射或接收NRF24L01发射或接收NRF24L01发射或接收 NRF24L01发射或接收 NRF24L01发射或接收 NRF24L01发射或接收 校园智能路灯设计方案全文共33页,当前为第5页。 校园智能路灯设计方案全文共33页,当前为第5页。 NRF24L01通道 NRF24L01通道 五.设计原理 NRF24L01工作原理 发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_AD
概述:分布式温度监控系统基于 STM32 系类芯片开发,支持采集多达六个分节点的温度数据,网关节点收集分节点的数据并通过 WIFI 上传云端远程实时监视,也可本地连接串口与 PC通讯,上位机实时显示分节点数据。该系统适用于家庭、办公室、教室等小面积场所的多点温度监控,无线传输距离可达 100m ~ 500m,具有功耗低,丢包率低,传输距离远等特点,是一个相当实用的设计。 开发环境硬件:stm32f407-atk-explorer 扩展板:DS18B20数字温度传感器,NRF24L01无线射频模块,ESP8266 WIFI模块 RT-Thread版本:RT-Thread V 4.0.3 开发工具及版本:MDK 5.27 RT-Thread使用情况概述内核部分:调度器,信号量,消息队列。 调度器:创建多个线程来实现不同的工作。 信号量:用来同步线程。 消息队列:用来实现线程之间传递的数据。 组件部分:SPI框架, Sensor框架,SAL 套接字抽象层 SPI框架:使用 SPI 框架来驱动温度传感器,上层代码可以提高代码的可重用性。 Sensor框架:为上层提供统一的操作接口,提高上层代码的可重用性;简化底层驱动开发的难度,只要实现简单的 ops(operations: 操作命令) 就可以将传感器注册到系统上。 SAL套接字抽象层:组件完成对不同网络协议栈或网络实现接口的抽象并对上层提供一组标准的 BSD Socket API,这样开发者只需要关心和使用网络应用层提供的网络接口,而无需关心底层具体网络协议栈类型和实现,极大的提高了系统的兼容性,方便开发者完成协议栈的适配和网络相关的开发 软件包部分: Webclient:提供设备与 HTTP Server 的通讯的基本功能。 pahomqtt,:本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程序。 Onenet:是 RT-Thread 针对 OneNET 平台连接做的的适配,通过这个软件包,可以让设备在 RT-Thread 上非常方便的连接 OneNet 平台,完成数据的发送、接收、设备的注册和控制等功能。 cJSON:C语言实现的极简的解析 JSON 格式的软件包。 at_device:是由 RT-Thread AT 组件针对不同 AT 设备的移植文件和示例代码组成,目前支持的 AT 设备有:ESP8266、M26、MC20、RW007、MW31、SIM800C 以及 SIM76XX 系列设备等。 nRF24L01:是一个 RT-Thread 的软件包,该软件包提供了 nRF24L01 模块的驱动。 硬件框架MCU 定时读取 DS180B20 的温度数据,然后通过 NRF24L01 传输到接收节点,接收节点把数据分别传输到云端和PC上位机。 软件框架说明本项目使用分布节点的方式来实现温度的采集与上传,从而避免一个节点的系统崩溃并不影响到其余的节点,本项目软件分为两部分: 第一部分:采集节点 MCU 上电之后完成板级外设初始化,并初始化温度传感器DS18B20 准备采集温度数据,无线射频芯片NRF24L01,在一切准备妥当之后,就会定时向接收节点发送温度数据。 第二部分:接收节点 MCU 上电之后首先完成板级外设的初始化,并初始化 ESP8266 实现与 ONENET 的连接。初始化 NRF24L01 准备接收来自采集节点的温度信息,接收到节点发送过来的温度数据,分别发送到 ONENET 平台和PC 端上位机。 软件模块说明发送节点: 发送节点创建了3个线程,1个消息队列 read_temp_entry:周期性的读取温度传感器的值,并把读取到的值通过消息队列发送 nrf24l01_send_entry:使用消息队列来接收传感器检测到的温度值,并通过 BRF24L01 发送到接收节点 led_shine_entry:LED 在每次发送成之后,来改变当前的状态,来检测当前系统的运行状态 接收节点: 接收节点创建了6个线程,1个信号量,1个事件集,2个ringbuff,1个邮箱,1个消息内存池 nrf24l01_receive_entry:NRF24L01 数据接收线程,正确收到数据后会发送WRITE_EVENT_P0事件,然后把数据放到 ringbuff,申请一块内存池,然后把数据放入内存池,最后把内存池的首地址放到邮箱。 save_recv_p0_data_entry:保存数据线程,接收WRITE_EVENT_P0 事件后,读取ringbuff0的数据,保存 节点0 的温度与时间戳。 save_recv_p1_data_entry:保存数据线程,接收WRITE_EVENT_P1 事件后,读取ringbu

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧