标题:
STM32飞控源码基本版
[打印本页]
作者:
Noob_Ash
时间:
2018-6-26 23:44
标题:
STM32飞控源码基本版
单片机源程序如下:
#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
#include <math.h>
#include "mysystem.h"
#include "mpu6050.h"
#include "myiic.h"
#include "led.h"
#include "adc.h"
#include "spi.h"
#include "nrf24l01.h"
#include "time.h"
#include "motor.h"
#include "rc.h"
#include "pid_own.h"
#include "myimu.h"
#include "iwdg.h"
u8 count=0;
u8 Con_FLAG = 0;
Int16_xyz Accel,Gyro; //两次综合后的传感器数据
Int16_xyz Acc_Data_Con; //滤波后的加速度
Float_angle Att_Angle; //ATT函数计算出的姿态角
static u8 Count=0;
static Int16_xyz mpu6050_dataacc1,mpu6050_dataacc2,mpu6050_datagyr1,mpu6050_datagyr2;
int Arm_Count=0,Dis_Count=0;
int main(void)
{
armed=0;//锁四轴
delay_init();
LED_Init();
I2C_EE_Init();
delay_ms(20);
MPU6050_Init();
ADC1_Init();
Spi1_Init();
Nrf24l01_Init(MODEL_TX2,40);
delay_ms(10);
Tim3_Init(499);
TIM2_PWM_Init(999,72/24-1);
USART1_Init(115200);
Nvic_Init();
if(Nrf24l01_Check())
{
USART1_Put_String("NRF IS OK !!!");
}
LED_FLASH();
Tim3_Con(1);
IWDG_Init(0,625);//1/16 S
while(1)
{
RC_Rece();
if(Receive.AD_YM < 500 && Receive.AD_PZ < 1500) Arm_Count++;
else Arm_Count = 0;
if(Receive.AD_YM < 500 && Receive.AD_PZ > 2500) Dis_Count++;
else Dis_Count = 0;
if(Arm_Count > 20000) {Arm_Count=0; armed = 1; LEDY_ON delay_ms(300);LEDY_OFF delay_ms(300);LEDY_ON delay_ms(300);LEDY_OFF delay_ms(300);LEDY_ON delay_ms(300);LEDY_OFF delay_ms(300);}
if(Dis_Count > 20000) {Dis_Count=0; armed = 0; LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);}
if(Receive.Fun == 0) LEDY_ON
else LEDY_OFF
}
}
void TIM3_IRQHandler(void) //0.5ms中断一次
{
if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET )
{
TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update); //清除中断标志
count++;
IWDG_Feed();//防止卡死的关键
Nrf_Check_Event();
RC_Send();
NRF_TxPacket(NRF24L01_TXDATA,32);
if(count == 2)//1ms
{
count = 0;
MPU6050_GetDate();
Con_FLAG = 1;
}
if(Con_FLAG)//1ms
{
Con_FLAG = 0;
Count ++;
if(Count == 1)
MPU6050_DataCon(&mpu6050_dataacc1,&mpu6050_datagyr1); //2ms
else
{
Count = 0;
MPU6050_DataCon(&mpu6050_dataacc2,&mpu6050_datagyr2); //2ms
Accel.X = (mpu6050_dataacc1.X + mpu6050_dataacc2.X)/2;
Accel.Y = (mpu6050_dataacc1.Y + mpu6050_dataacc2.Y)/2;
Accel.Z = (mpu6050_dataacc1.Z + mpu6050_dataacc2.Z)/2;
Gyro.X = (mpu6050_datagyr1.X + mpu6050_datagyr2.X)/2;
Gyro.Y = (mpu6050_datagyr1.Y + mpu6050_datagyr2.Y)/2;
Gyro.Z = (mpu6050_datagyr1.Z + mpu6050_datagyr2.Z)/2;
Accel_Con(&Accel,&Acc_Data_Con);//加速度滤波
IMUupdate(&Gyro,&Acc_Data_Con,&Att_Angle); //IMU姿态解算
Pid_Con(Att_Angle.pit,Gyro.X,Att_Angle.rol,Gyro.Y,Att_Angle.yaw,Gyro.Z,Receive.AD_YM,armed);
}
}
}
}
// if(Att_Angle.pit >= 0)
// {
// USART_SendData(USART1, '+');delay_ms(1);
// USART_SendData(USART1, '0'+(int)Att_Angle.pit % 1000/100);delay_ms(1);
// USART_SendData(USART1, '0'+(int)Att_Angle.pit % 100/10);delay_ms(1);
// USART_SendData(USART1, '0'+(int)Att_Angle.pit % 10);delay_ms(1);
// USART_SendData(USART1, '\n');//Delay_ms_led(100);
// }
// else
// {
// USART_SendData(USART1, '-');delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Att_Angle.pit)/100);delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Att_Angle.pit)%100/10);delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Att_Angle.pit)%10);delay_ms(1);
// USART_SendData(USART1, '\n');//Delay_ms_led(100);
// }
// if(Att_Angle.rol >= 0)
// {
// USART_SendData(USART1, '+');delay_ms(1);
// USART_SendData(USART1, '0'+(int)Att_Angle.rol % 1000/100);delay_ms(1);
// USART_SendData(USART1, '0'+(int)Att_Angle.rol % 100/10);delay_ms(1);
// USART_SendData(USART1, '0'+(int)Att_Angle.rol % 10);delay_ms(1);
// USART_SendData(USART1, '\n');//Delay_ms_led(100);
// }
// else
// {
// USART_SendData(USART1, '-');delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Att_Angle.rol)/100);delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Att_Angle.rol)%100/10);delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Att_Angle.rol)%10);delay_ms(1);
// USART_SendData(USART1, '\n');//Delay_ms_led(100);
// }
// if(Gyro.X >= 0)
// {
// USART_SendData(USART1, '+');delay_ms(1);
// USART_SendData(USART1, '0'+(int)Gyro.X % 1000/100);delay_ms(1);
// USART_SendData(USART1, '0'+(int)Gyro.X % 100/10);delay_ms(1);
// USART_SendData(USART1, '0'+(int)Gyro.X % 10);delay_ms(1);
// USART_SendData(USART1, '\n');//Delay_ms_led(100);
// }
// else
// {
// USART_SendData(USART1, '-');delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Gyro.X)/100);delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Gyro.X)%100/10);delay_ms(1);
// USART_SendData(USART1, '0'+abs((int)Gyro.X)%10);delay_ms(1);
// USART_SendData(USART1, '\n');//Delay_ms_led(100);
// }
复制代码
所有资料51hei提供下载:
飞控基本版.rar
(316.8 KB, 下载次数: 34)
2018-6-27 02:52 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
long258963
时间:
2018-7-25 17:12
这个是stm32f10几的板子??
作者:
long258963
时间:
2018-7-25 17:13
这个代码写的是32哪个型号的板子
作者:
91532
时间:
2020-1-30 18:57
古德,感谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1