打开飞控的main.c文件
首先是HardWave_Init();//飞控板内部资源、相关外设初始化
打开
#include "Headfile.h"
Sensor_Okay_Flag Sensor_Init_Flag;
void HardWave_Init(void)
{
SystemInit();//时钟初始化
cycleCounterInit();//系统滴答时钟初始化,程序精准延时
SysTick_Config(SystemCoreClock / 1000);//SysTick开启系统tick定时器并初始化其中断,1ms
USART1_Init(115200);//主串口初始化
OLED_Init(); //显示屏初始化
Bling_Init(); //指示灯、测试IO初始化
Key_Init(); //按键初始化
PPM_Init(); //PPM遥控器接收初始化
HC_SR04_Init(); //超声波初始化
PWM_Init(); //PWM初始化—TIM4
/*
SPI2_Configuration();
NRF24L01_Init();//
while(NRF24L01_Check())
{
printf("24L01 Check Failed!\r\n");
printf("Please Check!\r\n");
delay_ms(100);
}
NRF24L01_RX_Mode();
*/
Sensor_Init_Flag.NRF24L01_Okay=1;
QuadInit();
/*******************IMU初始化开始*************************/
delay_ms(2000);
/***********MPU6050初始化***************/
IIC_GPIO_Config();
InitMPU6050_GY86();
delay_ms(500);
IMU_Calibration();
Sensor_Init_Flag.MPU6050_Okay=1;
/***********HMC5883初始化***************/
delay_ms(100);
QuadInit();
/***********磁力计+气压计初始化***************/
delay_ms(500);
#ifdef IMU_BOARD_GY86
HMC5883L_Initial();
Sensor_Init_Flag.Mag_Okay=1;
QuadInit();
Baro_init();
Read_MS5611_Offset();
Sensor_Init_Flag.Baro_Okay=1;
#elsedef IMU_BOARD_NC686
IST8310_Init();
Sensor_Init_Flag.Mag_Okay=1;
QuadInit();
spl0601_init();
Sensor_Init_Flag.Baro_Okay=1;
QuadInit();
#elsedef IMU_BOARD_NC683
IST8310_Init();
Sensor_Init_Flag.Mag_Okay=1;
QuadInit();
FBM320_Init();
Sensor_Init_Flag.Baro_Okay=1;
QuadInit();
#endif
/*******************IMU初始化结束*************************/
Quad_Start_Bling();//LED开机预显示
delay_ms(500);
Parameter_Init();//传感器参数初始化
LCD_CLS();//清屏
USART2_Init(19200);//串口2、备用
USART3_Init(115200);//串口3、解析GPS
Total_PID_Init();//PID控制器初始化
TIM2_Configuration_Cnt();//TIM2
Timer4_Configuration();//TIM3
NVIC_Configuration();//中断优先级设置
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure; //定义NVIC初始化结构体
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //优先级组别2,具体参见misc.h line80
/*
//-----NRF24L01数据中断-----//
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //IRQ中断通道-->NRF24L01,PB12
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢先式优先级别
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副优先级别
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道
NVIC_Init(&NVIC_InitStructure); //初始化NVIC
*/
//飞控系统定时器
NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn ;//计数定时器
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//超声波
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//PPM接收机
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//GPS数据接收中断
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//串口中断3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//串口2、光流模块
NVIC_InitStructure.NVIC_IRQC