单片机STM32F103C8T6TR中的TR什么意思?

常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据传输.

nRF24L01是一个能兼顾距离和数据速率的无线模块, 在空旷环境下,2M速率15米, 1M速率30米, 250K速率能达到50米. 和蓝牙相比距离更远, 和ESP8266这类以太网WiFi相比环境适应力更强.

  • 空中传输速率为2Mbps时接收功耗为13.5mA
  • 支持6个接收通道(地址)


元件面朝自己,天线朝左(晶振在上), 右侧PIN脚的定义为:

从机数据输出, 有三种状态选项
可屏蔽中断脚, 低电平使能

正常状态为高电位, 只有当STATUS寄存器的以下三个位被置位(拉高)时会拉低电压输出, 要清除中断, 需要相应地往这三个位写入1.

可以通过寄存器地址0x00分别对这三种中断进行屏蔽

    在该模式下, nRF24L01+的功耗最小, 不能进行发送或者接收. 但是所有寄存器的值保持不变, SPI处于有效状态, 允许对寄存器, TX/RX FIFO进行操作, PWR_UP(此位在CONFIG寄存器中)清0即进入该状态.

  1. MCU通过SPI对NRF24L01进行基本配置, 配置自动应答通道使能, 设置自动重发次数不为0(在此设置可以重发数据包)设置为发送模式, 还有其他配置等等
  2. MCU把要发送的数据和接收数据设备的地址通过SPI写入NRF24L01
  3. CE引脚置高, 启动发送
    • 在有限时间内收到应答信号, 则TX_DS置高(发送数据成功标志位), 并引发IRQ中断(引脚IRQ置低), 并清除TX buff(发送缓冲寄存器, 自行写代码清除), IRQ中断需要写状态寄存器进行复位(因为此处IRQ由TX_DS引发, 将TX_DS复位即可使IRQ复位)
    • 重发数据次数超过设定值, 则 MAX_RT 置高(达到最多重发次数标志位), 并引发IRQ中断(引脚IRQ置低), 不清除TX buff, IRQ中断需要写状态寄存器进行复位(因为此处IRQ由MAX_RT引发,将MAX_RT复位即可使IRQ复位)
  4. 接收到应答信号产生中断或者达到最大重发次数产生中断后,NRF24L01继续发下一包数据
  5. 当TX buff为空时, 进入待机模式二(当CE为高, TX buff为空时进入待机模式二), NRF24L01的工作模式图表在后面. 只要在适当时候拉高CE进行发送即可, 配置NRF24L01时CE置低)

  1. 与发送模式一样, 一开始MCU通过SPI对NRF24L01进行基本配置, 设置数据通道自动应答使能(在EN_AA寄存器进行设置, 即收到数据后自动向主机发送应答信号), 还有进行接收数据通道使能(在EN_RXADDR寄存器配置), 即选择六个接收通道的某一通道来接收数据, 设置为接收模式, 以及其他配置.
  2. 拉高CE引脚(CE置高), 启动接收状态
  3. 接收到一个有效数据包后, 数据存储在RX buff, 并产生RX_DR中断(RX_DR为接收数据成功标志位, 接收成功置1), 中断和发送模式一样, 需要复位
  4. 接收设备自动向发送设备发送确认信号(这步是自动的)
  5. 设置CE引脚为低, NRF24L01进入待机模式一

经过各种环境的测试, 总结一下出现 1E 错误的原因

  1. 发送状态下, 发送的目标地址 TX_ADDR 必须与RX_ADDR_P0相同!! 这个地址将用于接受对方返回的ACK, 如果RX_ADDR_P0填的不对, 对方依然能收到数据, 但是本地会多次重试后产生MAX_RT中断
  2. 还有一种会出现MAX_RT中断的情况, 就是在处理发送的方法内使用了printf("%d, ...", u8_variable)这样的语句, 使用%x没问题, 但是如果使用%d就会出现, 具体原因未知.

    • MCU将要发送的数据与接收数据设备的地址写入NRF24L01
    • CE引脚置高,启动发送
    • CE引脚置高,启动接收

淘宝上有配套出售的一种USB转接卡, 用于将NRF24L01通过USB到电脑, 此时NRF24L01相对于电脑成为一个串口设备, 通过AT命令进行通信.

  • 标点符号必须英文状态下的半角标点
    • 数据长度必须是32个字节
  • 如果用上位机和这个USB转接卡进行调试的话, 要注意这里有个坑: 用户可用的字节为1-31个, 第0位不可用, 这个字节系统保留, 用于记录传输的数据包长度. 例如: 串口发送abc(ASCII码, 3 bytes), 实际传输3abc(第0个字节就为3), 接收端根据第0字节中的数来判断收到的数据包长度, 再通过串口TX输出给电脑的就是abc.
  • 发送消息 直接往串口输出, 且不符合上面命令格式的, 都会发送到目标地址

单次读写SPI(所有交互的基础操作)

如果需要使用中断读取, 读方法要改成非阻塞的方式, 就是上面的RX方法去掉了while IRQ的等待.

一个非常好用的配置打印函数

因此连接方式与STM32F103完全相同

  • 百度文库上一个比较全的资料(51 MCU的)


  • 1,电源必须在它的电压符合范围之内,不能接5V,会烧掉,某宝有1117稳压模块比较好。
    2,供电电源波纹必须在80mv以内,就是波动不能超过0.08V,某宝有1117稳压模块,并联一个100UF的点解电容和105的瓷片电容。
    3,NRF的IRQ脚会坏,表现为发送端正常发送,接受端无法接受到信号,接收端IRQ电平恒高。
    4,使用洞洞板时,切记杜邦线会影响NRF之间的通信,如果想要最佳的通信,用铜柱将模块放到高的位置,并且铜柱接地,用金属网包裹整个电路(除NRF外)并接地。
    5,旁边不能有强干扰,例如手钻,电钻,切割机之类的。

  • 这篇对24L01的工作机制有描述

内容来源于网络如有侵权请私信删除

我要回帖

更多关于 STM32F103RCT6 的文章

 

随机推荐