当前位置:
文档之家› STM32F103ZET6驱动NRF24L01
STM32F103ZET6驱动NRF24L01
/**************************************************** 函数名:SPI 初始化 形参: 返回值: 函数功能:写使能 ****************************************************/ void SPI2_Config(void) {
描述:这个函数设置 nRF24L01 为接收模式,等待接收发送设备的数据包
u8 status; CS_LOW(); // CSN 置低,开始传输数据 SPI2_ReadWriteByte(reg); // 选择寄存器 status=SPI2_ReadWriteByte(0); // 然后从该寄存器读数 CS_HIGH(); // CSN 拉高,结束数据传输
return (status); // 返回寄存器数据 } /****************************************************************************** **
timeout=0;
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE) == RESET);
{
timeout++;
if(timeout>500)return 0;
}
return SPI_I2S_ReceiveData(SPI2);
}
/************************************************** 函数:SPI_RW_REG()
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //MOSI -- PB15 SCK -- PB13
//PB13 -- SPI2_CK PB14 -- SPI2_MOSI PB15 -- SPI2_MISO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; 分频值为 4
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; MSB 位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); SPI_Cmd(SPI2,ENABLE);
u8 status,i; CS_LOW(); // CSN 置低,开始传输数据 status = SPI2_ReadWriteByte(reg); // 选择寄存器,同时返回状态字 for(i=0; i<bytes; i++) {
pBuf[i]=SPI2_ReadWriteByte(0); // 逐个字节从 nRF24L01 读出 }
u8 SPI2_ReadWriteByte(u8 data)
{
u32 timeout=0;
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE) == RESET);
{
timeout++;
if(timeout>500)return 0;
}
SPI_I2S_SendData(SPI2,data);
STM32 驱动无线模块,已调好可用
#include "bsp.h"
u8 TX_ADDRESS[TX_ADR_WIDTH]={0x02,0x02,0x02,0x02,[RX_ADR_WIDTH]={0x02,0x02,0x02,0x02,0x02}; //发送地址
//PG6 -- CE PG7 -- CS GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //PG6 7 推挽 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定 IO //IRQ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_Init(GPIOG, &GPIO_InitStructure);
SPI2_ReadWriteByte(*pBuf++); // 逐个字节写入 nRF24L01
} CS_HIGH(); // CSN 拉高,结束数据传输 return(status); // 返回状态寄存器
} /****************************************************************************** *
//SPI 主机模
//数据 8 位 //CPOL -
//CPHA - 0 //NSS 信号软
// 波 特 率 预
// 数 据 传 输 从
//CRC 值
CE_LOW();//待机 CS_HIGH(); } /**************************************************** 函数名:NRF24L01 初始化 形参: 返回值: 函数功能:写使能 ****************************************************/
CS_HIGH(); // CSN 拉高,结束数据传输 return(status); // 返回状态寄存器 } /****************************************************************************** **
函数:RX_Mode()
函数:NRF24L01_Read_Reg(BYTE reg)
描述:从 reg 寄存器读一字节
******************************************************************************* */
u8 NRF24L01_Read_Reg(u8 reg) {
函数:SPI_Read_Buf()
描述:从 reg 寄存器读出 bytes 个字节,通常用来读取接收通道数据或接收/发送地址
******************************************************************************* */
u8 NRF24L01_Read_Buf(u8 reg, u8 *pBuf, u8 bytes) {
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_Init(GPIOB, &GPIO_InitStructure);
//SPI 协议的初始化
/****************************************************
函数名:NRF24L01_Check
形参:无
返回值:0 -- 成功 1 -- 失败
函数功能:检测 24L01 是否存在
****************************************************/
描述: 根据 SPI 协议,写一字节数据到 nRF24L01,同时从 nRF24L01 读出一字节
**************************************************/ u8 NRF24L01_Write_Reg(u8 reg, u8 value) {
u8 status; CS_LOW(); // CSN 置低,开始传输数据 status = SPI2_ReadWriteByte(reg); // 选择寄存器,同时返回状态字 SPI2_ReadWriteByte(value); // 然后写数据到该寄存器
}
/****************************************************
函数名:SPI2_Send_Receive_Byte
形参: data -- 给 FLASH 发送的数据
返回值:flash 返回的数据
函数功能:给 FLASH 发送数据和读取数据
****************************************************/
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
//SPI2 设置为双线
全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; 0 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 件控制
CS_HIGH(); // CSN 拉高,结束数据传输 return(status); // 返回 }