پرش به


تصویر

راه اندازی ماژول NRF با STM32f103

nrf stm32 ماژول NRF Arm میکرو stm میکرو stm32

  • لطفا وارد حساب کاربری خود شوید تا بتوانید پاسخ دهید
5 پاسخ برای این موضوع

#1 hamidhafez

hamidhafez

    کاربر متخصص

  • Members
  • ستارهستارهستارهستاره
  • 95 ارسال

ارسالی 01 January 2017 - 03:33 PM

با سلام

 

کتابخانه راه اندازی ماژول NRF با STM32f103 بسیار پرکاربرد رو براتون می زارم.

 

من برای نوشتنش خیلی وقت گزاشتم امیدوارم بدردتون بخوره

 

 

نحوه استفادشم دقیقم مثل AVR هست که داخل تاپیک دیگه گزاشتم.

 

 

فایل پیوستی  NRF24L01-V2.zip   1.84K   134 تعداد دریافت ها


  • abdollahi و rezasede این پست را پسندیده است

#2 sadeghm70

sadeghm70

    مبتدی

  • Members
  • ستاره
  • 1 ارسال

ارسالی 01 April 2017 - 01:39 AM

با سلام

خسته نباشید مهندس

امکان شبکه کردن با nrf به چه صورته؟

حداکثر چه تعداد رو میشه با هم شبکه کرد؟ 



#3 hamidhafez

hamidhafez

    کاربر متخصص

  • Members
  • ستارهستارهستارهستاره
  • 95 ارسال

ارسالی 03 April 2017 - 05:48 PM

سلام

 

داخل این کتابخونه بعضی از توابع شو من نوشتم . خیلی پیچیده نیست داخل خود دیتاشیت خیلی خوب توضیح داده.

 

تا 32 تا ماژول رو میشه شبکه کرد.



#4 hamidhafez

hamidhafez

    کاربر متخصص

  • Members
  • ستارهستارهستارهستاره
  • 95 ارسال

ارسالی 08 April 2017 - 01:39 PM

نحوه استفاده در برنامه ی اصلی
 
ابتدا تعاریف اولیه

volatile unsigned char AddrRele[5]={0x72,0x72,0x72,0x72,0x0};
volatile unsigned char Payload[Module_PAYLOAD];

 
من به SPI2 وصل کردم . کانفیگ SPI

void SPI_Configuration(void){

SPI_InitTypeDef SPI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE);

//SPI
GPIO_PIN_Config(CS_Port, CS_PIN, CS_Mode, GPIO_Speed_50MHz);
GPIO_PIN_Config(SCK_Port, SCK_PIN, SCK_Mode, GPIO_Speed_50MHz);
GPIO_PIN_Config(MISO_Port, MISO_PIN, MISO_Mode, GPIO_Speed_50MHz);
GPIO_PIN_Config(MOSI_Port, MOSI_PIN, MOSI_Mode, GPIO_Speed_50MHz);
GPIO_PIN_Config(CE_Port, CE_PIN, CE_Mode, GPIO_Speed_50MHz);
GPIO_PIN_Config(GPIOA, GPIO_Pin_8, GPIO_Mode_IPU, GPIO_Speed_50MHz);

SPI_Cmd(SPI2,DISABLE);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);

SPI_Cmd(SPI2, ENABLE);// Enable SPI1
}

 
 
و کانفیگ پایه IRQ

void EXTI_Configuration(void){

EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);
EXTI_ClearITPendingBit(EXTI_Line8);

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_Line = EXTI_Line8;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

NVIC_Config(EXTI9_5_IRQn, 0, 0, ENABLE);
}

 
سپس ستاپ اولیه

//NRF
Nrf_Init();
Nrf_Setup(AddrRele,1);
Config_Register(RF_CH,125);
RX_POWERUP;
PTX=0;

 
نمونه کد ارسال

Payload[0]=2;
Payload[6]=10;
Send_Data(Payload,Payload[0]);
PTX=1;
while(PTX==1);

 

 
و درنهایت برای دریافت و تغییر وضعیت ها کد IRQ میکرو
 

void EXTI9_5_IRQHandler(void){
if ( EXTI_GetITStatus(EXTI_Line8) != RESET )
{
static unsigned char Status,count=0;

EXTI_ClearITPendingBit(EXTI_Line8);

CSN_low;
Status=Spi_Fast(NOP);
CSN_high;
if (Status & (1<<TX_DS)) // IRQ: Package has been sent
{
Config_Register(STATUS,0x70);
PTX=0;
count=0;
//resid=1;
}
else if (Status & (1<<MAX_RT)) // IRQ: Package has not been sent, send again
{
Config_Register(STATUS,0x70);
if(++count>=Retransmission)
{
count=0;
PTX=0;
RX_POWERUP;
}
else
{
CE_high; // Start transmission
delay_us(10);
CE_low;
}
}
else if (Status & (1<<TX_FULL)) //TX_FIFO Full <-- this is not an IRQ
{
CSN_low;
Spi_Fast(FLUSH_TX); // Flush TX-FIFO
CSN_high;
}
if(Status & (1<<RX_DR))
{
CSN_low;
Spi_Fast(R_RX_PL_WID);
Status=Spi_Fast(NOP);
CSN_high;
if(Status>32)
{
CSN_low;
Spi_Fast(FLUSH_RX);
CSN_high;
}
else
{
static unsigned char i=0;
//resid=1;
i=Status;
CSN_low;
Spi_Fast(R_RX_PAYLOAD);
while(Status!=0)
{
Payload[(i-Status)]=Spi_Fast(NOP);
Status--;
}
//دریافت کامل شده داخل متغییر Payload
CSN_high;
}
Config_Register(STATUS,0x70);
}
}

}


#5 Amin.eng

Amin.eng

    مبتدی

  • Members
  • ستاره
  • 1 ارسال

ارسالی 02 December 2017 - 10:41 PM

سلام قسمت گیزنده هم اگه ممکن توضیح بدید

#6 hamidhafez

hamidhafez

    کاربر متخصص

  • Members
  • ستارهستارهستارهستاره
  • 95 ارسال

ارسالی 19 December 2017 - 12:12 PM

سلام

 

دوست عزیز دریافت در قسمت تابع وقفه اجرا میشه و به صورت کامنت فارسی نوشته شده که دریافت تکمیل شد .

 

در اون خط تمام خطوط دریافتی داخل آرایه ی Payload قرار میگیره





همچنین به nrf, stm32, ماژول NRF, Arm, میکرو stm, میکرو stm32 نیز برچسب خورده است