unsigned char nRF24L01_debug(void) { #ifdef nRF24L01_RX_Debug unsigned char RxBuf[RX_PLOAD_WIDTH]={0}; SetRX_Mode(); while(1){ SetRX_Mode(); if(nRF24L01_RxPacket(RxBuf)){ //add your code return 1; } } #endif #ifdef nRF24L01_TX_Debug unsigned char sta=0; unsigned char TxBuf[TX_PLOAD_WIDTH]={0}; nRF24L01_TxPacket(TxBuf); while(1){ nRF24L01_TxPacket(TxBuf); sta = SPI_Read(STATUS); if(sta == 0x2e){ //add your code return 1; } SPI_RW_Reg(WRITE_REG+STATUS, 0xff); xSysCtlDelay(10000); } #endif }
void main() { nRF24L01_Config(); SetRX_Mode(); if(MAX_RT) { SPI_RW_Reg(FLUSH_TX,0); } SPI_RW_Reg(WRITE_REG+STATUS,0xFF);// clear RX_DR or TX_DS or MAX_RT interrupt flag SPI_RW_Reg(FLUSH_RX,0); SCON =0x40; TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; EX1=1; IT1=0; EA=1; init_1602(); while(1) { Control(); display(); if(RxBuf[0]==0xAA) { RxBuf[0]=0; //PH_dat=RxBuf[1]; temp_dat=RxBuf[2]; temp_dot=RxBuf[3]; beep_flag=RxBuf[4]; } delay1ms(10); } }
/******************************************** 飞控主函数入口 功能: 1.初始化各个硬件 2.初始化系统参数 3.开定时器4等待数据中断到来 4.开定时器3串口广播实时姿态以及相关信息 ********************************************/ int main(void) { //int i; SystemClock_HSE(9); //系统时钟初始化,时钟源外部晶振HSE //SystemClock_HSI(4); //系统时钟初始化,时钟源内部HSI UART1_init(SysClock,115200); //串口1初始化 NVIC_INIT(); //中断初始化 STMFLASH_Unlock(); //内部flash解锁 LedInit(); //IO初始化 delay_init(SysClock); //滴答延时初始化 BT_PowerInit(); //蓝牙电源初始化完成,默认关闭 MotorInit(); //马达初始化 BatteryCheckInit(); //电池电压监测初始化 IIC_Init(); //IIC初始化 MPU6050_DMP_Initialize(); //初始化DMP引擎 //HMC5883L_SetUp(); //初始化磁力计HMC5883L PID_INIT(); //PID参数初始化 ParameterRead(); //Flash参数读取 NRF24L01_INIT(); //NRF24L01初始化 SetRX_Mode(); //设无线模块为接收模式 PowerOn(); //开机等待 BT_on(); //蓝牙开 TIM3_Init(SysClock,10); //定时器3初始化,调试串口输出 TIM4_Init(SysClock,50); //定时器4初始化,定时采样传感器数据,更新PID输出 while (1); //等待数据更新中断到来 }
void receive() { SetRX_Mode(); nRF24L01_RxPacket(RxBuf); IN1=RxBuf[1]; IN2=RxBuf[2]; IN3=RxBuf[3]; IN4=RxBuf[4]; Delay_a(10); }
void NRFmatching(void) { static uint32_t nTs,nT; static uint32_t writeOvertime = 2 * 1000000;// unit :us LedC_on; //led3 always on when 2.4G matching nTs = micros(); do { NRFMatched = 0; nT = micros() - nTs; if(nT >= writeOvertime){ RX_ADDRESS[4] = table.NRFaddr[4]; break; //exit when time out,and do not change original address } SetRX_Mode(); // reset RX mode write RX panel address delay_ms(4); // delay is needed after reset NRF sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS); if((sta & 0x0E )== 0x00){ NRFMatched = 1; }else{ RX_ADDRESS[4] ++; //search the next RX_ADDRESS if(RX_ADDRESS[4] == 0xff ){ RX_ADDRESS[4] = 0x00; } } }while((sta & 0x0E )== 0x0E); SetRX_Mode(); // reset RX mode if((NRFMatched == 1)&&(RX_ADDRESS[4]!= table.NRFaddr[4])){ SaveParamsToEEPROM(); //write eeprom when current addr != original addr } LedC_off; // matching end }
//int CheckAsk(){ // int Asking = 0; // TxBuf[1] = 0x00; // TxBuf[2] = 0x00; // nRF24L01_TxPacket(TxBuf); // TxBuf[1] = 0x00; // TxBuf[2] = 0x00; // Delay(1000); // SetRX_Mode(); // nRF24L01_RxPacket(RxBuf); // if(RxBuf[1]){ // if( RxBuf[1]==0x01){ // Asking = 1; // } // Delay(1000); // } // RxBuf[1] = 0x00; // RxBuf[2] = 0x00; // if(Asking) return 1; // else return 0; //} //void AskRec(){ // TxBuf[1] = 0x02 ; // nRF24L01_TxPacket(TxBuf); // TxBuf[1] = 0x00; // TxBuf[2] = 0x00; // Delay(1000); // SetRX_Mode(); // nRF24L01_RxPacket(RxBuf); // RxBuf[1] = 0x00; // RxBuf[2] = 0x00; //} //************************************主函数************************************************************ void main(void) { int Asking,Quizing,QzFn,i; unsigned char tf =0; char Ans[NUM]; Asking = Quizing = QzFn = 0; init_NRF24L01() ; led0=0;led1=0;led2=0;led3=0; P0 = seg[2]; while(1) { if (tf==1){ nRF24L01_TxPacket(TxBuf); TxBuf[1] = 0x00; tf = 0; Delay(1000); } SetRX_Mode(); nRF24L01_RxPacket(RxBuf); if(RxBuf[1]){ QzFn = 1; if(RxBuf[1]>=0x40 && RxBuf[1]<=0x6f){ Ans[RxBuf[1]-0x41] = 'a'; } else if(RxBuf[1]>=0x70 && RxBuf[1]<=0x9f){ Ans[RxBuf[1]-0x71] = 'b'; } else if(RxBuf[1]>=0xa0 && RxBuf[1]<=0xcf){ Ans[RxBuf[1]-0xa1] = 'c'; } else if(RxBuf[1]>=0xd0 && RxBuf[1]<=0xff){ Ans[RxBuf[1]-0xd1] = 'd'; } for(i = 0;i<NUM;i++){ if(Ans[i] == 0) QzFn = 0; } if(QzFn){ P0 = 0xBF; } Delay(1000); } RxBuf[1] = 0x00; } }
/******************************************** 飞控主函数入口 功能: 1.初始化各个硬件 2.初始化系统参数 3.开定时器4等待数据中断到来 4.开定时器3串口广播实时姿态以及相关信息 ********************************************/ int main(void) { SystemClock(9); //系统时钟初始化 UART1_init(SysClock,115200); //串口1初始化 NVIC_INIT(); //中断初始化 STMFLASH_Unlock(); //内部flash解锁 LedInit(); //IO初始化 delay_init(SysClock); //滴答延时初始化 BT_PowerInit(); //蓝牙电源初始化完成,默认关闭 MotorInit(); //马达初始化 BatteryCheckInit(); //电池电压监测初始化 IIC_Init(); //IIC初始化 MPU6050_DMP_Initialize(); //初始化DMP引擎 PID_INIT(); //PID参数初始化 ParameterRead(); //Flash参数读取 NRF24L01_INIT(); //NRF24L01初始化 SetRX_Mode(); //设无线模块为接收模式 PowerOn(); //开机等待 BT_on(); //蓝牙开 TIM3_Init(36,2000); //定时器3初始化,调试串口输出 TIM4_Init(36,1000); //定时器4初始化,定时采样传感器数据,更新PID输出 while (1) //等待数据更新中断到来 { // switch(UART1_Get_Char())//检测串口发送数据,做相应处理 // { // case 'w': // LedA_on;LedB_on;LedC_on;LedD_on; // //TxBuf[0]++; // //UART1_Put_Package(TxBuf); // LedA_on;LedB_on;LedC_on;LedD_on; // MotoPWM+=10; // UART1_Put_Char(0x5a); // break; // case 's': // LedA_off;LedB_off;LedC_off;LedD_off; // UART1_Put_Char(0xaa); // MotoPWM-=10; // break; // default :break; // } // MotorPwmFlash(MotoPWM,MotoPWM,MotoPWM,MotoPWM); // } }
//************************************主函式************************************************************ void main(void) { unsigned char tf =0; unsigned char TxBuf[20]={0}; unsigned char RxBuf[20]={0}; init_NRF24L01() ; TxBuf[1] = 1 ; TxBuf[2] = 1 ; nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data Delay(6000); while(1) { if(KEY1 ==0 ) { TxBuf[1] = 1 ; tf = 1 ; LED=0; } if (tf==1) { nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data TxBuf[1] = 0x00; TxBuf[2] = 0x00; tf=0; Delay(1000);LED=1; } //*********************************************************************************************** SetRX_Mode(); nRF24L01_RxPacket(RxBuf); if( RxBuf[1]==1) { LED=0; } Delay(1000);LED=1; RxBuf[1] = 0x00; RxBuf[2] = 0x00; } }
void My_System_Init(void) { uint8_t flag, i=0; NVIC_Configuration(); delay_init(72); //延时初始化 for(i=0;i<5;i++) delay_Ms_Loop(1000); //上电短延时 确保供电稳定 LED_Init(); LEDALL_ON; timer2_init(); //PWM输出定时器初始化 timer3_init(); //PWM输出定时器初始化 IIC_Init(); uart_init(38400); //调试用串口初始化 My_usart2_init(38400); //蓝牙用串口初始化 printf("欢迎使用启天科技BUTTERFLY四旋翼\r\n"); printf("QQ群:471023785\r\n"); LEDALL_OFF; MPU6050_Init(); //6050初始化 SPI1_INIT(); //SPI初始化,用于nRF模块 flag = NRF_CHECK(); //检查NRF模块是否正常工作 if(flag != 1) { while(1) { LEDALL_OFF; delay_Ms_Loop(200); LEDALL_ON; delay_Ms_Loop(200); } } NRF24L01_INIT(); //nRF初始化 SetRX_Mode(); //设置为接收模式 NRF24L01_INIT(); //nRF初始化 NRF_GPIO_Interrupt_Init(); //nRF使用的外部中断的引脚初始化 tim4_init(); //定时中断,作为系统的控制频率 adcInit(); //ADC初始化,测量电池电压 }