24l01.c
24l01.c
如下:
#include "24l01.h"
#include "delay.h"
const u8 TX_ADDRESS[TX_ADR_WIDTH] = {
0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; /* 本地地址 */
const u8 RX_ADDRESS[RX_ADR_WIDTH] = {
0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; /* 接收地址 */
#define MOSI_H GPIO_SetBits(GPIOA, GPIO_Pin_0)
#define MOSI_L GPIO_ResetBits(GPIOA, GPIO_Pin_0)
#define SCLK_H GPIO_SetBits(GPIOA, GPIO_Pin_1)
#define SCLK_L GPIO_ResetBits(GPIOA, GPIO_Pin_1)
#define MISO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)
#define NRF24L01_IRQ (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3))
#define Set_NRF24L01_CE {
GPIO_SetBits(GPIOA, GPIO_Pin_4);}
#define Clr_NRF24L01_CE {
GPIO_ResetBits(GPIOA, GPIO_Pin_4);}
#define Set_NRF24L01_CSN {
GPIO_SetBits(GPIOA, GPIO_Pin_5);}
#define Clr_NRF24L01_CSN {
GPIO_ResetBits(GPIOA, GPIO_Pin_5);}
u8 SPI_ReadWriteByte ( u8 dt ) {
u8 i;
u8 temp = 0;
for ( i = 8; i > 0; i-- ) {
if ( dt & 0x80 ) {
MOSI_H;
} else {
MOSI_L;
}
dt <<= 1;
SCLK_H;
temp <<= 1;
if ( MISO ) {
temp++;
}
SCLK_L;
}
return temp;
}
void NRF24L01_Init ( void ) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStructure );
GPIO_SetBits ( GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStructure );
Clr_NRF24L01_CE;
Set_NRF24L01_CSN;
}
u8 NRF24L01_Check ( void ) {
u8 buf[5]