Nrf24l01. Some examples to get start.

Status
Not open for further replies.

Easyrider83

Advanced Member level 5
Joined
Oct 11, 2011
Messages
1,608
Helped
374
Reputation
748
Reaction score
364
Trophy points
1,363
Location
Tallinn, Estonia
Activity points
8,575
Here I'll share my codes for this nordic wireless solution.
First of all I should warn that I'm not answering a stupid questions.
So, lets get start.

Some of my projects with NRF24L01 use.
Radio Key based on STM8S microcontroller, powered by CR2032 battery. Working range 1-10m depends of output power.
View attachment Schematic2_STM8.rar
Software example for previos project for IAR.
View attachment IAR_STM8S_RadioKey.rar
Initialization example with my code library:
Code:
unsigned char Init_NRF24L01 (void)
{
    /*24L01 INIT*/
  RF_InitTypeDef RF_InitStruct;
  RF_InitStruct.RF_Power_State=RF_Power_On;
  RF_InitStruct.RF_Config=RF_Config_IRQ_RX_Off|RF_Config_IRQ_TX_On|RF_Confing_IRQ_Max_Rt_On;
  RF_InitStruct.RF_CRC_Mode=RF_CRC16_On;
  RF_InitStruct.RF_Mode=RF_Mode_TX;
  RF_InitStruct.RF_Pipe_Auto_Ack=RF_Pipe0_Ack_Enable;
  RF_InitStruct.RF_Enable_Pipe=RF_Pipe0_Enable;
  RF_InitStruct.RF_Setup=RF_Setup_5_Byte_Adress;
  RF_InitStruct.RF_TX_Power=RF_TX_Power_High;
  RF_InitStruct.RF_Data_Rate=RF_Data_Rate_1Mbs;
  RF_InitStruct.RF_Channel=0x35;
  RF_InitStruct.RF_RX_Adress_Pipe0[0]='B';
  RF_InitStruct.RF_RX_Adress_Pipe0[1]='A';
  RF_InitStruct.RF_RX_Adress_Pipe0[2]='T';
  RF_InitStruct.RF_RX_Adress_Pipe0[3]='O';
  RF_InitStruct.RF_RX_Adress_Pipe0[4]='N';
  RF_InitStruct.RF_TX_Adress[0]='B';
  RF_InitStruct.RF_TX_Adress[1]='A';
  RF_InitStruct.RF_TX_Adress[2]='T';
  RF_InitStruct.RF_TX_Adress[3]='O';
  RF_InitStruct.RF_TX_Adress[4]='N';
  RF_InitStruct.RF_Payload_Size_Pipe0=16;
  RF_InitStruct.RF_Auto_Retransmit_Count=1;
  RF_InitStruct.RF_Auto_Retransmit_Delay=1;
  return RF_Init(&RF_InitStruct);
}
This picture should explain how this library works. The NRF24L01.c and header file are common for all processors and architectures.

For example, GPIO library for Microchip controllers looks like this:
Code:
void PIN_ON (char * port, char pin)
{
 *port|=(1<<pin);
}

void PIN_OFF (char * port, char pin)
{
 *port&=~(1<<pin);
}
For STM8S:
Code:
void PIN_ON(GPIO_TypeDef * GPIOx,u8 PINx)
{
	GPIOx->ODR=GPIOx->IDR|PINx;
}

void PIN_OFF(GPIO_TypeDef * GPIOx,u8 PINx)								
{
	GPIOx->ODR=GPIOx->IDR&(~(PINx));
}

u8 PIN_SYG(GPIO_TypeDef * GPIOx, u8 PINx)
{
        return GPIOx->IDR&PINx;
}

void PIN_IN (GPIO_TypeDef * GPIOx,u8 PINx)
{
        GPIOx->DDR&=(~PINx);
}

void PIN_OUT_PP (GPIO_TypeDef * GPIOx,u8 PINx)
{
        GPIOx->DDR|=PINx;
}

void PIN_INV(GPIO_TypeDef * GPIOx, u8 PINx)
{
	GPIOx->ODR=GPIOx->IDR^PINx;
}
For STM32 (shorted)
Code:
void PIN_ON(GPIO_TypeDef * GPIOx,u16 PINx)
{
	#ifdef STM32_BitBang
		GPIOx->BSRR=PINx;
	#else
		GPIOx->ODR=GPIOx->IDR|(PINx);
	#endif
}
Support bitbang for faster response.
The same way we are using SPI peripheral (you'll find an examples inside attachments).

For Keil uVision I wrote an Wizard that perform all initiation procedures. Attaching them too:
View attachment NRF24L01_STM32_Keil.rar
And for bonus today I have finished the wizard configuration utility:
**broken link removed**

And some example how to use NRF24L01 with ARM based STM32F100 for Keil uVision 4.
View attachment TEST_MODULEv2.rar
Hope I will have some time to support this topic.
 

Attachments

  • NRF24L01_Wizard.rar
    30 KB · Views: 447
Last edited:

You kidding?
Sure it is working. A made a lot of wireless projects with this codes.
 
thnx easyrider83 for your help in nrf24l01!
note: a good help of atmeage is just search google mirf v2 arduino and enjoy and for pic dyembedded is best site according to my observation.
 
good job!, very thank you. Can you tell me life time battery (CR2032) of this radio key, I'm developing a product same idea with you an it's life time of battery very short. I try open your schematic but not possible. Thank again :wink:
 
Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…