二、Crazepony1无人机源码分析-(2)初始化
程序源码
SystemClock_HSE(9); //系统时钟初始化,时钟源外部晶振HSEs 8*9=72MHz;
cycleCounterInit(); // Init cycle counter
SysTick_Config(SystemCoreClock / 1000); //SysTick开启系统tick定时器并初始化其中断,1ms
UART1_init(SysClock,BT_BAUD_Set); //串口1初始化 通过USB与电脑通讯 //接收缓冲区非空中断RXNEIE,奇偶检验错中断PEIE
NVIC_INIT(); //USART1_IRQn,TIM3_IRQn,TIM4_IRQn
STMFLASH_Unlock(); //内部flash解锁
LoadParamsFromEEPROM();
LedInit(); //LED:ABCD的IO初始化
BT_PowerInit(); //蓝牙电源使能:是否使能电源模块MIC5205,为蓝牙提供V33BT电源
MotorInit(); //马达初始化 : 配置PWMA,PWMB,PWMC,PWMD;TIM2频率:24M,PWM频率:24K,ARR=999;
BatteryCheckInit(); //电池电压监测初始化:检测电源VSYS的电压,PB0:ADC的初始化
IIC_Init(); //IIC初始化 软件模拟,与MPU6050通讯:I2C_SDA,I2C_SCL的IO口初始化
//使用软件解算
MPU6050_initialize();
//HMC5883L_SetUp(); //初始化磁力计HMC5883L
NRF24L01_INIT(); //NRF24L01初始化
PowerOn(); //开机等待:LED闪烁
#ifndef S02A
BT_ATcmdWrite(); //蓝牙写配置
#else
BT_init();
#endif
BatteryCheck();
MS5611_Init(); //气压计的初始化
IMU_Init(); //6个低通滤波器系数初始化 sample rate and cutoff freq. sample rate is too low now due to using dmp.
#ifdef UART_DEBUG
//定时器3初始化,串口调试信息输出
TIM3_Init(SysClock,2000);
#endif
//定时器4初始化,用于飞控主循环基准定时
TIM4_Init(SysClock,1000); //1ms进入中断,计数器最大值为1000
MotorPwmFlash(10,10,10,10); //更新TIM2的CCR值
altCtrlMode=MANUAL;
//初始化气压计
if(I2C_ReadOneByte(FMTISensorAdd_I2C, 0x6B) == 0x42)//软复位 FBM320_SOFTWARE_RESET
{
okFbm320 = 1;
Initial_FMTI_Sensor(); //读取校准系数
}
printf("who:%d\r\n",I2C_ReadOneByte(FMTISensorAdd_I2C, 0x6B));
注意开启的中断:
USART1_IRQn:串口数据发送或接受时,进入
TIM4_IRQn:1ms进入,用于计数值的累加
TIM3_IRQn:使能串口打印时,2ms进入,用于串口打印