pilot_init.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "pilot_init.h"
  2. #include "auto_pilot.h"
  3. #include "bsp_V8M_YY_led.h"
  4. #include "bsp_V8M_adc.h"
  5. #include "bsp_V8M_flash.h"
  6. #include "data_save.h"
  7. #include "drv_usart.h"
  8. #include "flight_mode.h"
  9. #include "params.h"
  10. #include "soft_can.h"
  11. #include "soft_delay.h"
  12. #include "soft_flash.h"
  13. #include "soft_gps.h"
  14. #include "soft_gs.h"
  15. #include "soft_imu.h"
  16. #include "soft_motor_output.h"
  17. #include "soft_port_uart4.h"
  18. #include "soft_rc_input.h"
  19. #include "soft_sdcard.h"
  20. #include "soft_time.h"
  21. #include "soft_timer.h"
  22. #include "soft_voltage.h"
  23. #include "stdio.h"
  24. #include "stm32f4xx.h"
  25. #include "ver_config.h"
  26. #define GCS_UART_Baudrate 115200 // 与地面站通信波特率
  27. #define UART3_Baudrate 460800 // 与IMU通信波特率
  28. #define UART4_Baudrate 115200 // 外接设备通信波特率
  29. void auto_pilot_init(void)
  30. {
  31. /*****************************************************系统初始化**************************************************/
  32. // 配置系统时钟为168M 使用外部8M晶体+PLL
  33. SystemInit();
  34. // 中断向量表偏移
  35. SCB->VTOR = FLASH_BASE | 0x10000;
  36. // 设置中断向量组,1抢占优先级,3响应优先级
  37. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  38. // 延时初始化,并启动开机时间。
  39. system_delay_initial(168);
  40. // 启动系统主定时器 1us 总计数时间为0xffffffff * 0.000001
  41. system_time_initial();
  42. // 系统定时器中断初始化
  43. system_timer_initial();
  44. // 初始化 SPI总线
  45. flash_at45db_initial();
  46. // 检查flash是否在电路班上
  47. while (!flash_isexist())
  48. {
  49. // 查询AT45DB 是否在电路板上
  50. delay_ms(50);
  51. }
  52. // 初始化 四轴姿态PID,初始化参数放在前面,因为里面包含有遥控器的校准系数。
  53. // 不然一直到获取到校准系数之前,遥控器的输入都是停留在1500us,导致无法进入电调校准的识别
  54. initial_parameters();
  55. // SBUS输入
  56. rc_input_initial();
  57. // 初始化 can 总线接口
  58. CAN_BusInit();
  59. // 电压接口初始化
  60. Voltage_Init();
  61. // PWM输出
  62. motor_output_initial();
  63. // 等待接收机器件上电
  64. delay_ms(200);
  65. // 带油门 上电,说明用户希望初始化电调
  66. esc_calibrate_enable();
  67. if (ver_par.hardware_id == HW_V8M_YY)
  68. {
  69. v8m_yy_led_init();
  70. }
  71. // 串口3
  72. imu_uart3_initial(UART3_Baudrate);
  73. // 地面站初始化
  74. gcs_init(&gcs_link, GCS_UART_Baudrate);
  75. // 检查升级标志位
  76. switch (ver_par.hardware_id)
  77. {
  78. case HW_V8M_YY:
  79. V8M_check_iap_flag();
  80. break;
  81. default:
  82. break;
  83. }
  84. // 初始化SDCARD
  85. sdcard_inital(0);
  86. // 读取最后一条log信息,初始化log结构体
  87. sd_card_init_fly_log();
  88. // 串口4
  89. port_uart4_initial();
  90. }