高级会员

- 积分
- 554
- 金钱
- 554
- 注册时间
- 2016-7-29
- 在线时间
- 125 小时
|
本帖最后由 小迷哥 于 2026-9-30 15:34 编辑
最近在调NRF905, NRF24L01将遇到的一些问题总结一下
看了很多网友的资料,发现都写得不怎么清晰,将自己的测试过程梳理出来主控芯片使用:STM32F103ZET6
一:SPI功能
1)SPI有mode0, 1, 2, 3共4种模式,实测NRF905, NRF24L01只支持mode0, 其中NRF905手册明确要求用mode0;
2) 这个SPI是全双工模式,MISO和MOSI两条线上同时走数据,本质为主机的移位寄存器和从机的移位寄存器内数据单字节交换;
这里面包含以下几种情况,这个主要根据SPI从机支持的指令来:
- 主机只写,不处理返回值
- 主机只读,通常写入数据0xFF
- 主机又写又读
3)使用的硬件SPI2, 读写就靠1个函数"u8 SPI2_ReadWriteByte(u8 TxData)",实现全双工读写
如果使用软件SPI方式,那么也是一样的要实现这个全双工读写,"u8 spisoft_readwrite(u8 TxData)",并且支持4种mode, 以及宏延时设置
4)这种SPI从设备,驱动大多是"指令+数据方式", 比如下
比如我们想写某个配置寄存器,地址为add=0x00, 那么就要先写指令0x00, 在写数据1字节或多字节
如果读某个配置寄存器,地址为add=0x00, 那么就要先写指令0x20|add, 紧接着从机通过MISO就会输出数据;
5) 这个NRF905和NRF24L01和其他SPI从设备,有个最大的区别就是,只要启动了1次SPI读或写,在写入第一个指令字节时,会同时输出
状态字节,就下图中的S7:0;
二:收发功能
这里面如果要写配置寄存器或者,写发送地址,写发送数据,必须要在standby/掉电模式下
1)其中比较特别的一点是:发送模式下,需要将TRX_CE拉低,触发发送,同时可以清除DR脚信号为低电平
2)DR脚,在发送模式下,如果为1表示已发送完成, 在接收模式下为1表示已收到数据
这个DR清零是通过将TRX_CE拉低方式清除;
3)这个NRF905可以工作的频率是3个段, 433Mhz, 868Mhz, 915Mhz;
4)只支持1对1通信;
三:程序设计和调试
1.程序参考原子的stm32f1标准库方式, NRF24L01实验,
使用2块开发板,通过按键选择RX或TX模式后,就会间隔1.5s发送32字节可见ASCII数据;
2.新增加的功能
1) 在上面移植了usamrt,这样可以直接读取任意配置寄存器或者指令寄存器下所有数据;
可以将1个NRF905设置为RX模式,在电脑端通过"u8 NRF905_TxPacket(u8 *txbuf)",发送任意字符数据,这里只支持ASCII字符显示,
需要显示中的,需要自己去移植;
2)支持软件SPI模式,这个参考了电阻式XPT2046触摸屏程序的驱动部分;
3)使用的模块,在下面这家买的
这里面引脚使用情况如下
//CSN-----PC0, SPI使能
//TX_EN---PC1, 1发送,0接收
//TRX_CE--PC2, 使能发射或接收
//PWR_UP--PC3, 芯片上电
//CD------PC4, 载波检测,不用
//AM------PC5, 地址匹配,不用
//DR------PC6, 接收或发射数据完成
//SCK-----PB13
//MISO-----PB14
//MOSI-----PB15
总共需要:8个引脚, 其中SPI控制4个, 模块控制4个
通过DR电平为1时,判断发送/接收完成,
|
|