void controller_init(void)
{
inss_start_read();
gps_start_read();
NRF24L01P_init();
LED_OFF();
memset(ind.velocity, 0, 12);
memset(ind.position, 0, 12);
memset(esd.dh, 0, 8);
tx_packet[0] = 0xFF;
tx_packet[1] = 0x00;
NRF24L01P_send();
HAL_Delay(200);
}
void controller_selftest(void)
{
uint8_t test_state;
tx_packet[0] = 0xFF;
tx_packet[1] = 0x01;
while(1)
{
test_state = 0;
//检查惯性导航及环境数据
if(ins.dt_us > 6000)test_state = 1;
if(fabs(modulus(ins.acc) - g) > DELTA_a)test_state = 1;
if(modulus(ins.gyro) > DELTA_g)test_state = 1;
if(fabs(modulus(esd.mag) - GEOMAG) > DELTA_m)test_state = 1;
if(esd.t_p_h[2] <= 0)test_state = 1;//这个是防止没刷新到的,只需要再海平面以上工作
//检查GPS数据
if(gps.gps_position_state == '0')test_state = 1;
if(gps.gps_velocity_state == 'N')test_state = 1;
if(gps.dimension != '3')test_state = 1;
if(gps.HDOP > 3)test_state = 1;
if(gps.VDOP > 3)test_state = 1;
//暂时只需要在北半球,东半球使用
if(gps.N_S != 'N')test_state = 1;
if(gps.E_W != 'E')test_state = 1;
if(test_state == 0 && NRF24L01P_send() == 0)break;
}
printf("SELFTEST_PASS\n");
LED_ON();
}
void controller_record_initial_data(void)
{
esd.h_0 = esd.t_p_h[2];
memcpy(gnss.latitude_0, gps.latitude, 12);
memcpy(gnss.longtitude_0, gps.longitude, 12);
gnss.altitude_0 = gps.altitude;
}飞控主板初始化、自检部分,来自Flight_Controler0的controller.c各位可以看看大致的逻辑,以及什么时候发送状态。那些结构体的定义不用管,内容就是字面的,然后想看的翻工程即可。