本文所列代码支持STM32所有系列,实现的功能有:OLED显示、PID算法、姿态解算、卡尔曼滤波算法对数据整合、MPU6050、HMC磁力计、MS5611气压计、NRF24L01、GPS定位、超声波定高,亲测可以用,喜欢研究无人机的朋友可以参考一下此代码使用keli5编程。
希望参考学习的同学能够学到内容和代码风格,本代码支持STM32所有系列。
功能:OLED显示、PID算法、姿态解算、卡尔曼滤波算法对数据整合、MPU6050、HMC磁力计、MS5611气压计、NRF24L01、GPS定位、超声波定高等。
单片机源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "mpu6050.h"
#include "hmc5883l.h"
#include "timer.h"
#include "led.h"
#include "i2c.h"
#include "Moto.h"
#include "Control.h"
#include "PWM_Capture.h"
#include "ms5611.h"
#include "nrf24l01.h"
#include "hcsr04.h"
#include "beep.h"
#include "GPS.h"
#include "oled.h"
extern uint32_t time3_cnt;
extern u8 FlyMode;
extern uint8_t Attitude;
int main(void)
{
u8 i;
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组3:3位抢占优先级,3位响应优先级
Control_Init();
IIC_Init();
LED_Init();
PWM_Capture_Init(0xFFFF,71); //1MHZ计数
delay_ms(100); //上电延时
MPU6050_Init();
HMC5883L_Init();
HCSR04_Init();
// GPS_Init();
//UART3_Init(9600);
//OLED_Init();
TIM2_PWM_Init(1999,71); //周期2MS频率500HZ 计数频率1MHZ 计数到20000为20MS
TIM5_Int_Init(499,71);//1Mhz的计数频率,计数到500为0.5ms
TIM7_Int_Init(0xFFFF,71);//1Mhz的计数频率,1us时间度量
TIM3_Int_Init(499,71);
for(i=0;i<6;i++) delay_ms(1000); //等待姿态稳定
Moto_Init();
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
while(1)
{
if(time3_cnt<=2000)//10sec
{ HCSR04_Run(); //更新频率30HZ
Get_Attitude(); //姿态计算
FlyMode=1;
Fly_Control();//阻尼爬升
}
if(2000<time3_cnt&&time3_cnt<=6000)//10sec-30sec
{ HCSR04_Run(); //更新频率30HZ
Get_Attitude(); //姿态计算
FlyMode=2;//飞行
Fly_Control();
}
if(6000<time3_cnt&&time3_cnt<=8000)//30sec-40sec
{ HCSR04_Run(); //更新频率30HZ
Get_Attitude(); //姿态计算
FlyMode=3;//飞行
Fly_Control();
}
break;
}
}
为了帮助大家进一步学习,小编为大家准备了丰富的无人机资料,希望能帮助大家进行更好地学习~
海量无人机资料,限时免费等你拿!
1. 四轴飞控代码
2. STA3X无人机飞行控制系统(资料包)
3. 无人机MUC控制系统设计宝典TOP6
4. 无人机开发方案要领与电路图集锦
5. 无人机无线通信电路设计精华
6. 无人机系统解决方案集锦
扫码进群,领取以上无上人机资料↓↓↓
如扫码入群失败,请添加管理员微信:18123773580↓↓↓