匿名飞控设备初始化All_Init()函数代码整理

目录

 

初始化All_Init();

1.Para_Data_Init()参数初始化

2.Remote_Control_Init();遥控器输入类型

3.PWM_Out_Init ()电调输出的初始化

4.spi_2初始化,用于读取飞控板上所有传感器,都用SPI读取

5.传感器初始化

6.接口初始化


初始化All_Init();

函数在BSP_Init.c中

看下源程序
 

u8 All_Init()

{

         NVIC_PriorityGroupConfig(NVIC_GROUP);              //中断优先级组别设置


         SysTick_Configuration();                   //滴答时钟

        

         Delay_ms(100);                                             //延时

         Drv_LED_Init();                                              //LED功能初始化

        

         Flash_Init();                          //板载FLASH芯片驱动初始化

        

         Para_Data_Init();                                //参数数据初始化

        

         Remote_Control_Init();

        

         PWM_Out_Init();                                          //初始化电调输出功能

         Delay_ms(100);                                             //延时

        

         Drv_SPI2_init();                       //spi_2初始化,用于读取飞控板上所有传感器,都用SPI读取

         Drv_Icm20602CSPin_Init();             //spi片选初始化

         Drv_AK8975CSPin_Init();               //spi片选初始化


         Drv_SPL06CSPin_Init();                 //spi片选初始化

         sens_hd_check.gyro_ok = sens_hd_check.acc_ok =

         Drv_Icm20602Reg_Init();              //icm陀螺仪加速度计初始化,若初始化成功,则将陀螺仪和加速度的初始化成功标志位赋值

         sens_hd_check.mag_ok = 1;       //标记罗盘OK    

         sens_hd_check.baro_ok = Drv_Spl0601_Init();                          //气压计初始化


         Usb_Hid_Init();                                              //飞控usb接口的hid初始化

         Delay_ms(100);                                             //延时

        

         Usart2_Init(115200);                          //串口2初始化,函数参数为波特率

         Delay_ms(10);                                      //延时     

//      Uart4_Init(115200);                                     //首先判断是否连接的是激光模块

//      if(!Drv_Laser_Init())                            //激光没有有效连接,则配置为光流模式

//               Uart4_Init(500000);

//      Delay_ms(10);                                      //延时

//      Usart3_Init(500000);                          //连接UWB

//      Delay_ms(10);                                      //延时


         //     

         Uart4_Init(19200);  //接优像光流

         Uart5_Init(115200);//接大功率激光     

//      MyDelayMs(200);   

         //优像光流初始化

         of_init_type = (Drv_OFInit()==0)?0:2;

         if(of_init_type==2)//优像光流初始化成功

         {

                   //大功率激光初始化

                   Drv_Laser_Init();    

         }

         else if(of_init_type==0)//优像光流初始化失败

         {

                   Uart4_Init(500000);         //接匿名光流

         }

         //


         Drv_AdcInit();

         Delay_ms(100);                                             //延时


         All_PID_Init();                            //PID初始化



         Drv_GpsPin_Init();                               //GPS初始化 串口1

         Delay_ms(50);                                      //延时              

        

         Drv_HeatingInit();

//      Drv_HeatingSet(5);

         //

         Sensor_Basic_Init();

         //

         ANO_DT_SendString("SYS init OK!");

         return (1);

}

其中 中断优先级组别设置,滴答时钟,LED功能初始化,板载FLASH芯片驱动初始化是Stm32自带库函数,不需要细看

1.Para_Data_Init()参数初始化

函数在Ano_FcData.c文件中,

最终执行的是Ano_Parame_Read()函数

void Ano_Parame_Read(void)

{

         Flash_SectorsRead ( 0x000000, &Ano_Parame.byte[0], 1 );           //读取第一扇区内的参数

        

         if(Ano_Parame.set.frist_init != SOFT_VER)     //内容没有被初始化,则进行参数初始化工作

         {                

                   Parame_Reset();

                   PID_Rest();

                   Ano_Parame_Write();

         }

        

         Parame_Copy_Para2fc();        

}                 

Parame_Reset(), PID_Rest()参数初始化,重置成写死在程序里的默认参数,也就是地面站点击默认参数上看到那些参数

Ano_Parame_Write(void) 将参数写入第一扇区,这个函数作用是将寄存器中值的写进闪存

{

         All_PID_Init();  //存储PID参数后,重新初始化PID     

         Ano_Parame.set.frist_init = SOFT_VER;

         Parame_Copy_Fc2para();

         Flash_SectorErase ( 0x000000, 1 );                                                         //擦除第一扇区

         Flash_SectorsWrite ( 0x000000, &Ano_Parame.byte[0], 1 ); //将参数写入第一扇区

}

2.Remote_Control_Init();遥控器输入类型

函数在Ano_RC.c文件

void Remote_Control_Init()
{
    //
    RC_IN_MODE = Ano_Parame.set.pwmInMode;
    //
    if(RC_IN_MODE == SBUS)
    {
        Drv_SbusInit();
    }
    else
    {
        PWM_IN_Init(RC_IN_MODE);
    }
}

就是 根据参数RC_IN_MODE,地面站上可以设置,subs或ppm或pwm,判断是执行那种驱动,但是我用的版本sbus一直没有信号输入进来,用示波器监控硬件也是有观测到芯片管脚的输入,但是软件中断抓不到信号,最后也是懒得换就用pwm用了,但按匿名那边的说法他们这个sbus是可以是使用的,接着往下看

这个if和else程序读起来怪怪的,判断的是RC_IN_MODE在subs执行的Drv_SbusInit()函数在Drv_sbus.c文件中,执行的任务是SBUS驱动,else语句中PWM_IN_Init()函数又进行了一个if判断RC_IN_MODE,然后subs是前面执行过所以是空的,else if判断是pwm还是ppm,最后执行初始化驱动,底层能跑通的话就不用细究了。

3.PWM_Out_Init ()电调输出的初始化

在Drv_pwm_out.c文件中.这里注意文件的上方的宏定义

//21分频到 84000000/21 = 4M   0.25us

/*初始化高电平时间1000us(4000份)*/
//#define INIT_DUTY 4000 //u16(1000/0.25)
#define INIT_DUTY 4000 //u16(1000/0.25)
/*频率400hz*/
#define HZ        400
/*精度10000,每份0.25us*/
#define ACCURACY 10000 //u16(2500/0.25) //accuracy
/*设置飞控控制信号转换比例为4*/
#define PWM_RADIO 4//(8000 - 4000)/1000.0

这里的意思是输出的信号除以4才是实际的输出,比如实际中需要脉宽1500的信号,在这里必须是1500*4 = 6000才行

4.spi_2初始化,用于读取飞控板上所有传感器,都用SPI读取

底层无误,暂时忽略

5.传感器初始化

Drv_Icm20602Reg_Init();

 Drv_Spl0601_Init();

6.接口初始化

usb和串口,飞控板上这些接口的功能在程序中已经默认定义好了

Usb_Hid_Init();                    //飞控usb接口的hid初始化
    Delay_ms(100);                    //延时
    
    Usart2_Init(115200);            //串口2初始化,函数参数为波特率
    Delay_ms(10);                    //延时    
//    Uart4_Init(115200);                //首先判断是否连接的是激光模块
//    if(!Drv_Laser_Init())            //激光没有有效连接,则配置为光流模式
//        Uart4_Init(500000);
//    Delay_ms(10);                    //延时
//    Usart3_Init(500000);            //连接UWB
//    Delay_ms(10);                    //延时

    //    
    Uart4_Init(19200);    //接优像光流
    Uart5_Init(115200);//接大功率激光    
//    MyDelayMs(200);   

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值