stm32-NRF24L01通信
来源:互联网 发布:tensorflow restore 编辑:程序博客网 时间:2024/04/26 22:26
//////////////////////////////////////////引脚分布,IRQ PA2CE PA4CS PA3SPI1 (记住是SPI1的接口)SCK PA5MISO PA6MOSI PA7////////////////////////////////////////接好引脚,初始化好就可以使用了。记住,里面的文件配置都不用改,改引脚是ok 的http://download.csdn.net/download/hes_c/10140988
这是RX初始化
NRF24L01_Init();while(NRF24L01_Check()){led_on();printf("NRF NO\r\n");delay_ms(100);}printf("NRF OK\r\n");NRF24L01_RX_Mode();
这是TX初始化
NRF24L01_Init();while(NRF24L01_Check()){led_on();printf("NRF NO\r\n");delay_ms(100);}printf("NRF OK\r\n");NRF24L01_TX_Mode();
因为NRF通信会比较容易掉包
所有下面写了一个通信校验和加密(就不给全部代码了)
这是发送,添加校验和加密
//发送信息int send_mes(u32 ID,u32 t_TX_voltage,u32 t_TX_electricity,u32 t_RX_voltage,u32 t_RX_electricity){int n=0;u32 temp=0;temp=t_TX_voltage+t_TX_electricity+t_RX_voltage+t_RX_electricity+BCD+ID;//IDbuf_mes[n++]=(ID>>24)&0x000000ff;buf_mes[n++]=(ID>>16)&0x000000ff;buf_mes[n++]=(ID>>8)&0x000000ff;buf_mes[n++]=(ID>>0)&0x000000ff;//TX电压buf_mes[n++]=(t_TX_voltage>>24)&0x000000ff;buf_mes[n++]=(t_TX_voltage>>16)&0x000000ff;buf_mes[n++]=(t_TX_voltage>>8)&0x000000ff;buf_mes[n++]=(t_TX_voltage>>0)&0x000000ff;//TX电流buf_mes[n++]=(t_TX_electricity>>24)&0x000000ff;buf_mes[n++]=(t_TX_electricity>>16)&0x000000ff;buf_mes[n++]=(t_TX_electricity>>8)&0x000000ff;buf_mes[n++]=(t_TX_electricity>>0)&0x000000ff;//RX电压buf_mes[n++]=(t_RX_voltage>>24)&0x000000ff;buf_mes[n++]=(t_RX_voltage>>16)&0x000000ff;buf_mes[n++]=(t_RX_voltage>>8)&0x000000ff;buf_mes[n++]=(t_RX_voltage>>0)&0x000000ff;//RX电流buf_mes[n++]=(t_RX_electricity>>24)&0x000000ff;buf_mes[n++]=(t_RX_electricity>>16)&0x000000ff;buf_mes[n++]=(t_RX_electricity>>8)&0x000000ff;buf_mes[n++]=(t_RX_electricity>>0)&0x000000ff;//校验码buf_mes[n++]=(temp>>24)&0x000000ff;buf_mes[n++]=(temp>>16)&0x000000ff;buf_mes[n++]=(temp>>8)&0x000000ff;buf_mes[n++]=(temp>>0)&0x000000ff;buf_mes[32]='\0';if(NRF24L01_TxPacket(buf_mes)==TX_OK){return 1;//printf("NRF24L01 Send Success\r\n");}else{return 0;//printf("NRF24L01 Send Fail\r\n");}}
下面是接收解密和校验
//接收信息int recv_mes(){u32 temp=0,temp1=1;u32 n=0;if(NRF24L01_RxPacket(R_buf_mes)==0)//一旦接收到信息,{//数据合成RX_ID=R_buf_mes[n++]<<24|R_buf_mes[n++]<<16|R_buf_mes[n++]<<8|R_buf_mes[n++];r_TX_voltage=R_buf_mes[n++]<<24|R_buf_mes[n++]<<16|R_buf_mes[n++]<<8|R_buf_mes[n++];r_TX_electricity=R_buf_mes[n++]<<24|R_buf_mes[n++]<<16|R_buf_mes[n++]<<8|R_buf_mes[n++];r_RX_voltage=R_buf_mes[n++]<<24|R_buf_mes[n++]<<16|R_buf_mes[n++]<<8|R_buf_mes[n++];r_RX_electricity=R_buf_mes[n++]<<24|R_buf_mes[n++]<<16|R_buf_mes[n++]<<8|R_buf_mes[n++];temp=R_buf_mes[n++]<<24|R_buf_mes[n++]<<16|R_buf_mes[n++]<<8|R_buf_mes[n++];data_flag=1;}temp1=r_TX_voltage+r_TX_electricity+r_RX_voltage+r_RX_electricity+BCD+RX_ID;if(temp==temp1)//验证成功return 1;return 0;}
关于变量就不上了,其中接收缓存和发送缓存 是R_buf_mes[33], buf_mes[33]
阅读全文
0 0
- stm32-NRF24L01通信
- stm32 NRF24L01互相通信成功
- stm32上NRF24L01无法通信的问题。。
- STM32控制NRF24L01无线模块进行通信
- stm32 NRF24L01
- STM32驱动NRF24L01一对多的通信---可变数据包宽度
- STM32关于NRF24L01
- STM32+NRF24L01收发程序
- STM32 NRF24L01学习笔记
- STM32模块之NRF24L01
- NRF24L01的通信距离
- NRF24L01的通信距离
- stm32对nrf24l01无法操作
- STM32中nRF24L01的使用
- nRF24L01单片机通信的总结
- STM32系列第32篇--NRF24L01无线通信
- 使用NRF24L01控制STM32平衡车
- STM32 软件模拟SPI时序驱动NRF24L01
- HTML Web存储
- MPU6050开发 -- 卡尔曼滤波
- phpstudy搭建Linux的php环境
- Vocablex64.Incl.Keygen-AiR\ Vo
- XP画板总结
- stm32-NRF24L01通信
- java基础讲解
- Eclipse启动报 JVM terminated.Exit code=2
- Linux常用--Vi
- Centos7 crontab启动等的变化,以及Ubuntu crontab的日志开启
- CSS样式(二)
- Spring Security3.1配置实例(转)
- 【开源访谈】黄东旭:“无人区”的探索者,TiDB 的前行之路
- PL/SQL9的安装