标题:
恒拓飞控源码加详细注释 stm32+mpu6050
[打印本页]
作者:
1342853999
时间:
2017-2-28 12:01
标题:
恒拓飞控源码加详细注释 stm32+mpu6050
恒拓飞控源码 stm32+mpu6050
0.png
(63.55 KB, 下载次数: 117)
下载附件
2017-2-28 23:14 上传
完整的程序源码下载:
HT-Hawk飞控源代码.zip
(1.1 MB, 下载次数: 245)
2017-2-28 12:00 上传
点击文件名下载附件
下载积分: 黑币 -5
下面提供部分程序来预览:
飞控的主程序:
/*
******************* (C) COPYRIGHT 2015 Air Nano Team ***************************
* 模块名称 : 主程序模块
* 文件名 :main.c
* 描述 :系统初始化
* 实验平台 :HT_Hawk
* 库版本 :ST3.5.0
* 作者 :Air Nano Team
*********************************************************************************
*/
#include "board_config.h"
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: c程序入口
* 形 参:无
* 返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
// boot_loader 相关配置
Bootloader_Set(); //单片机引导程序
// 硬件初始化
InitBoard();
// 传感器初始化
Sensor_Init();
// 加载参数
paramLoad();
/* 开定时中断 */
EnTIMER;
while(1)
{
loop(); //主函数循环执行部分 与上位机通讯 刷新OLED屏 保存修改的PID数据
}
}
复制代码
MultiRotor_app.c
/******************** (C) COPYRIGHT 2014 Air Nano Team ***************************
* 文件名 :INIT.c
* 描述 :系统初始化
* 实验平台:HT_Hawk
* 库版本 :ST3.5.0
* 作者 :Air Nano Team
**********************************************************************************/
#include "include.h"
#include "MultiRotor_app.h"
fp32 Battery_Voltage;
Flag_t flag; //【标志的结构体定义】 此处可以分开定义
////*************************************************
////********* struct {
//// u8 MpuExist; // MPU存在
//// u8 MagExist; // MAG存在
//// u8 NrfExist; // NRF存在
//// u8 MagIssue; // MAG有问题
////
//// u8 ARMED; // 电机解锁
//// u8 LockYaw; // 航向锁定
//// u8 calibratingA; // 加速度采集
//// u8 calibratingM; // 磁力计采集
//// u8 calibratingM_pre; //磁力计预采集
////
//// u8 ParamSave; // 参数保存标志
////
//// u8 Loop_250Hz;
//// u8 Loop_100Hz;
//// u8 Loop_10Hz;
////********* }Flag_t;
////************************************************
/*====================================================================================================*/
/*====================================================================================================*
**函数 : Bootloader_Set
**功能 : BOOT相关设置
**输入 : None
**輸出 : None
**备注 : None
**====================================================================================================*/
/*====================================================================================================*/
void Bootloader_Set(void)
{
u16 i;
// 设置偏移量
SCB->VTOR = FLASH_BASE | FLASH_EXCURSION ;
i=0x0505;
STMFLASH_Write(pro_FALG_ADD,&i,1);
}
/*====================================================================================================*/
/*====================================================================================================*
**函数 : Sensor_Init
**功能 : ===============================【硬件初始化】===============================================//
**输入 : None
**輸出 : None
**备注 : None
**====================================================================================================*/
/*====================================================================================================*/
void InitBoard(void)
{
delay_init(72); //延时函数初始化 使用SYSCLK 分为 【ms级延时 us级延时 普通软件延时】
Nvic_Init(); //中断初始化 time.c中 配置 【TIM5-系统时基 TIM2 TIM3输入捕捉 提供八通道】
/* 初始化USB设备 */
bsp_InitUsb(); //与上位机通讯使用
ADC1_Init();
OLED_Init();
I2C_INIT();
LED_GPIO_Config();
USART1_Config();
TIM5_Config(); //TIM5 2ms中断一次 提供系统时基
PWM_OUT_Config(); //PWM输出控制无刷电机 【TIM1 TIM4 提供八路PWM输出】
PWM_IN_Config(); //PWM输入捕捉初始化 使用TIM2输入捕捉
NRF24L01_Init();
LED_SHOW();
FLASH_Unlock();
EE_Init(); //EEPROM掉电保存数据
}
/*====================================================================================================*/
/*====================================================================================================*
**函数 : Sensor_Init
**功能 : ================================【传感器初始化】============================================//
**输入 : None
**輸出 : None
**备注 : None
**====================================================================================================*/
/*====================================================================================================*/
void Sensor_Init(void)
{
flag.MpuExist = InitMPU6050(); //读取初始化成功标志
flag.MagExist = Init_HMC5883L(); //传感器初始化成功 传感器存在的标志
flag.NrfExist = NRF24L01_Check();
NRF24L01_Mode(1); //设置24l01为发送模式
OLED_P6x8Str(0,1,"ROLL:"); //OLED显示三个姿态欧拉角数值
OLED_P6x8Str(0,2,"PITCH:");
OLED_P6x8Str(0,3,"YAW:");
OLED_P6x8Str(0,5,"YAW:"); //四个遥控器通道数据
OLED_P6x8Str(0,6,"THR:");
OLED_P6x8Str(56,5,"ROLL:");
OLED_P6x8Str(56,6,"PITCH:");
}
/*====================================================================================================*/
/*====================================================================================================*
**函数 : Screen_Update
**功能 : 屏幕数据更新
**输入 : None
**輸出 : None
**备注 : None
**====================================================================================================*/
/*====================================================================================================*/
void Screen_Update(void)
{
Dis_Float(1,40,AngE.Roll,1);
Dis_Float(2,40,AngE.Pitch,1);
Dis_Float(3,40,AngE.Yaw,1);
OLED_4num(4,5,RC_Data.YAW);
OLED_4num(4,6,RC_Data.THROTTLE);
OLED_4num(57,5,RC_Data.ROLL);
OLED_4num(58,6,RC_Data.PITCH);
}
//***********************************【划分时间片,分配任务】******************************************//
//======================================【主循环执行函数】============================================//
void loop(void)
{ //姿态解算 串级PID控制 在中断函数中执行 每2ms执行一次
// 250HZ
if(flag.Loop_250Hz){
flag.Loop_250Hz=0;
UsbCmdPro(); //USB接收上位机数据 【4ms执行一次】
FailSafeLEDAlarm(); //闪烁灯
}
// 100HZ
if(flag.Loop_100Hz){
flag.Loop_100Hz=0;
mavlink(); //飞控板循环发送数据到上位机 【10ms执行一次】
Screen_Update(); //更新OLED三个欧拉角和四个通道遥控器数据
}
if(flag.Loop_10Hz){
flag.Loop_10Hz=0;
EE_SAVE_Attitude_PID(); //如果调节了PID参数则用EEPROM保存数据 【100ms执行一次】
}
}
/*====================================================================================================*/
/*====================================================================================================*
**函数 : Time_slice
**功能 :【时间片】
**输入 : None
**輸出 : None
**备注 : None
**====================================================================================================*/
/*====================================================================================================*/
void Time_slice(void) //每中断一次执行一次本函数
{
static u16 tick[3]={0,0,0};
tick[0]++;tick[1]++;tick[2]++;
if(tick[0]>=2){ //4ms 2次中断 一次2ms
tick[0] = 0;
flag.Loop_250Hz = 1;
}
if(tick[1]>=5){ //10ms 5次
tick[1] = 0;
flag.Loop_100Hz = 1;
}
if(tick[2] >= 50) { //100ms 50次
tick[2] = 0;
flag.Loop_10Hz = 1;
}
}
复制代码
作者:
wecilau
时间:
2017-3-8 10:13
哇哇哇,大爱楼主的分享
作者:
zhaoweias
时间:
2017-5-13 17:05
正在做这方面的东西看着还挺好的
作者:
阿斯顿马丁
时间:
2017-8-2 22:58
挺好,赞
作者:
anyegongjue2
时间:
2017-10-24 18:45
特别好,赞
作者:
mumu清
时间:
2017-11-24 15:25
有帮助
作者:
lzw1898
时间:
2017-12-12 11:58
感谢分享
作者:
家家家116127
时间:
2017-12-18 11:02
谢谢大佬
作者:
abcqq
时间:
2018-5-14 16:08
谢谢楼主的分享
作者:
plyl
时间:
2018-5-20 23:05
用stm32f4系列做的吗
作者:
dukecheng
时间:
2018-5-23 16:18
谢谢,真的不错
作者:
不多不少
时间:
2018-7-31 14:04
楼主大爱
作者:
2316
时间:
2018-7-31 20:25
是STM32F103的吗,我需要f103的代码
作者:
胡狼
时间:
2018-9-11 23:49
感谢楼主分享
作者:
a2569808500
时间:
2018-12-29 21:32
有原理图吗,真心求
作者:
zgf123456
时间:
2019-3-29 16:56
最近在找这方面的资料 下载看一下
作者:
韬略
时间:
2019-4-1 20:30
很需要刚刚好奈斯
作者:
luckylili
时间:
2019-4-23 10:46
太给力了!!
作者:
cduhuapu
时间:
2019-9-9 16:25
谢谢!非常好的代码,代码非常完整!!ok!待会再看代码
作者:
Flyyyy
时间:
2019-9-17 23:18
感谢楼主分享
作者:
xinfan
时间:
2019-9-23 12:03
感谢分享
作者:
baplin
时间:
2019-9-29 11:52
一直想找飞控系统,终于找到了,大爱
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1