STM32+NRF24L01无线通信使用教程单片机解密
单片机解密NRF24L01驱动程序
打开 nrf24l01.c 文件,代码如下:
- 单片机解密#include "nrf24l01.h"
- 单片机解密#include "spi.h"
- const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; // 发送地址
- const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};
- //初始化 24L01 的 IO 口
- void NRF24L01_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure;
- //使能 PB,F,D 端口时钟 //PF8-CE PF9-CSN PD3-IRQ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPI
- OF|RCC_APB2Periph_GPIOD, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PG13 上拉 防 止 EN25X 的干扰
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推
- 挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); //初始化指定 IO GPIO_SetBits(GPIOG,GPIO_Pin_13);//上拉
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12 上拉 防止 以太网 NSS 的干扰
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化指定 IO GPIO_SetBits(GPIOB,GPIO_Pin_12);//上拉
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8; //PF8 9 推 挽
- GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化指定 IO GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_8);//PF6,7,8 下拉
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PD3 输入
- GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD,GPIO_Pin_3);//PD3 下拉
- SPI2_Init(); //初始化 SPI SPI_Cmd(SPI2, DISABLE); // SPI 外设不使能
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI 设置为双线双向全双工
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI 主机 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //发送
- 接收 8 位帧结构
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟悬空低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //数据捕获于第 1
- 个时钟沿
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS 信号由 软件
- 控制
- SPI_InitStructure.SPI_BaudRatePrescaler =
- SPI_BaudRatePrescaler_16; //定义波特率预分频的值:波特率预分频值 为 16
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 数 据 传 输从 MSB 位开始
- SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC 值计算的多项式 SPI_Init(SPI2, &SPI_InitStructure); //根据 SPI_InitStruct 中指
- 定的参数初始化外设 SPIx 寄存器
- SPI_Cmd(SPI2, ENABLE); //使能 SPI 外设
- NRF24L01_CE=0; //使能 24L01
- NRF24L01_CSN=1; //SPI 片选取消
- }
- //检测 24L01 是否存在
- //返回值:0,成功;1,失败
- u8 NRF24L01_Check(void)
- {
- u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
- u8 i;
- SPI2_SetSpeed(SPI_BaudRatePrescaler_4); //spi 速度为 9Mhz(24L01 的最大 SPI 时钟为 10Mhz)
- NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//写入 5 个字节 的地址.
- NRF24L01_Read_Buf(TX_ADDR,buf,5); //读出写入的地址
- for(i=0;i<5;i++)if(buf[i]!=0XA5)break;
- if(i!=5)return 1;//检测 24L01 错误
- return 0; //检测到 24L01
- }

芯片解密