|
飞行控制算法还不是很好,今年有时间继续完善一下,先上视频看看,大家有兴趣的一起学习 好像不能直接放视频哦,那只能跳转到优酷了 . Q" _ u8 a6 a+ K; d& A* @ 一个是制作调试的视频 https://v.youku.com/v_show/id_XN ... 1-103.3.1-2.1-1-1-0- |0 F5 u$ {" @7 K 0 k* L/ N) u9 m, O- f 这个是飞机上FPV的视频 https://v.youku.com/v_show/id_XNzI0NDkxNTI4.html0 E7 C' _/ j7 b" g+ B |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版
当然可以,就是写的太乱了怕大家看不清楚
% l! N2 Z: W* j
#include "usart.h"
#include "delay.h"
#include "led.h" # V0 |5 b# u, w2 ^3 E, Z9 j* Z% L/ K
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h". h# S \; A4 B" k
#include "lcd.h" 5 g+ M1 d0 \& u$ i2 o! S
#include "rtc.h"
#include "wkup.h"8 j2 L+ ^( z I
#include "adc.h"/ R4 X: ]7 o1 l8 N5 K- X
#include "dma.h"
#include "24cxx.h"! |$ P" e; ~* N8 n: j' F6 m" K' P
#include "flash.h"
#include "24l01.h", d6 V3 B7 ?, N# ]( y c* N* [9 L
#include "mmc_sd.h"4 ~. x/ F9 d8 l1 f$ \
#include "remote.h"
#include "ds18b20.h"
#include "mouse.h"
#include "text.h"" Q- |: H9 ^% h5 I
#include "fat.h"6 U( e. U" U4 Q; p' _" |+ ?" d, V
#include "fontupd.h"
#include "IIC.h"$ i0 j: ~* c+ n# D
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "math.h"4 _. Q) T+ r7 {+ G- D0 {7 D, i
# A; K2 c0 K8 C( D- e9 o L
zhinengchuankou();
+ P0 { M) \% o. }, \& \( V" Y
#define duoji1 PAout(5)// PA8
#define duoji2 PAout(1)
#define duoji3 PAout(0)9 }( i1 f. f2 P( A# n: L) m' N4 s- @
#define duoji4 PAout(2)
/ p) @! z6 x3 t, U! Z) u
s16 duojipianyi[4];8 G) a& k( Y0 C- x
3 j; F" S2 Q$ ~) r6 M* N
//u16 jiaosuduchangshu=50,jieshoulingmin=4,shijijiaosuduchangshu=50,zuidaxiuzhengsudu=60,zuixiaotiaozhengshudu=10,weitiaoweizhi=10,jiaosuduqudiancishu=5,zuidatiaozhengsudu=40;//可用! `+ J; f! k' i0 b
. {% o# \$ s4 x; c+ ^+ w: X H( b
//jiaosuduchangshu计算出各轴需要的理论角速度用;jieshoulingmin由于接收机定时器有误差,消除误差用,会消除精度; shijijiaosuduchangshu用于取得角速度之后除数;zuidaxiuzhengsudu自稳系统的最大旋转速度8 [# ?; r, a8 n) a0 r- m# }# ^
//zuixiaotiaozhengshudu当调整速度小于此数值时,增加调整速度,weitiaoweizhi当调整速度小于此数值时 进行微调就可以,jiaosuduqudiancishu角速度的次数累加,越多越准确,但反应越慢,zuidatiaozhengsudu表示最大稳定时的速度
u16 jiaosuduchangshu=100,jieshoulingmin=4,shijijiaosuduchangshu2=50,zuidaxiuzhengsudu=250,zuixiaotiaozhengshudu=6,weitiaoweizhi=2,jiaosuduqudiancishu=2,zuidatiaozhengsudu=60;
//kongzhilingmin接收机的灵敏度用+ L. J" ?% B ?3 D- `* O% x
u32 kongzhilingmin=30000;; G7 {% X6 t4 J
8 e9 T% l* j, @* W5 _4 h
u16 jieshouji[6],wei=0,jiesuo=0,jiaosuducishu=0,shijijiaosuduchangshu=20;
s32 h,duojikongzhi[8],i,zhongduancishu,xlilunjiaosudu,ylilunjiaosudu,zlilunjiaosudu,xpianyijiaosudu,ypianyijiaosudu,zpianyijiaosudu,xjiaosudu,yjiaosudu,zjiaosudu,lingshijiaosudu,xjsd[100],yjsd[100],zjsd[100];
double shurufuyi,shurushengjiang,shurufangxiang,shuruyoumen,t,pi=3.14159,youmen[10];5 ~6 x8 [' l, j; Q8 N; d
double nifuyi=0,nishengjiang=0,nifangxiang=0,niyoumen=0;5 E. w1 _6 q2 I1 [# N( \7 V6 a
double lilunfuyi,lilunshengjiang,lilunfangxiang,lilunyoumen,chafuyi,chashengjiang,chafangxiang,chayoumen,shijiyoumen;3 Q: d0 w# x% I4 i/ {2 n* k' \
u8 shuruyinjiao=10,suo=0,SendBuff[256]={97};
' L d2 Z1 l: O6 ^$ U# K# ^# b
: ^. m; O" v8 b% r
int main(void)
{
// u16 i;
{
duojipianyi[0]=0;$ k' P8 V- [, R8 [
duojipianyi[1]=0;
duojipianyi[2]=0;5 _* w8 ]6 @& A7 f" S$ a
duojipianyi[3]=0;
duojikongzhi[0]=1100;6 j/ q9 V& ~" J) P4 m- R: C
duojikongzhi[1]=1100;) L3 I4 j9 w( {2 z
duojikongzhi[2]=1100;
duojikongzhi[3]=1100;
duojikongzhi[4]=2000;! u, M0 N5 E6 s: H/ Q
}9 r# w- t& T0 t# z& A8 {
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化" F1 N! R3 n/ S4 [+ Y! J- ]; U9 d/ T
uart_init(72,1600); //串口1初始化 / v" l" X( C; k
//USART1->DR=SendBuff[1];1 h* U& d+ d2 O5 k" A
gpioshezhi(); //引脚设置
led4=0;% J! G( x! i. j
// LED_Init(); //LED初始化
i2cInit(); //I2C接口设置
//Timer4_Init(7199,1000);6 q4 P. u2 ]" \) m9 q. B9 G
Timer3_Init(10000,72); //定时器3,中断开启,时间不定,输出PWM信号控制螺旋桨转速 抢断优先级" y# d/ g6 {" B
Timer2_Init(7199,70); //定时器2,有中断,70毫秒读取陀螺仪数据0 n8 O) g% G" p: C: L
Timer1_Init(60000,72);TIM1->CR1|=0x01;//定时器一,没有中断,用于计时接收机信号
EXTI15_10_Init(); //10-15中断 接收机信号中断 抢断优先级% P: _- i) X/ B2 {5 U+ D
delay_ms(100); //延时300MS. S; u, q3 n! I9 U) a% X: U$ X
chuankoufasong(36,1); //串口发送,检测芯片是否运行
result = mpu_init(); //dmp读出
delay_ms(100); //延时300MS! \( ?- ?( N( [0 Q# ~) S
{//去角速度偏移量,MPU6050制造误差
xpianyijiaosudu=dumpu6050jicunqi(0);
ypianyijiaosudu=dumpu6050jicunqi(1);& `; h4 D/ b) X; q
zpianyijiaosudu=dumpu6050jicunqi(2);8 R- r% Z3 l( v9 K+ i7 m- [5 @$ s
}! D3 c- A$ d& L8 h* Y- @9 y$ I
if(!result)7 m. E9 j3 ^2 M
{ S# M( @+ B Z p% n1 C
chuankoufasong(36,2);
mpufifo_init(); //dmp——fifo设置* P) O& C, K! [0 L! M/ w! M2 u8 _2 T
}# D: [! }/ R0 v4 X
1 o0 ^# G v* ?3 q( D) L" V$ B
MYDMA_Enable(DMA1_Channel4);; `" ~8 b! `1 y# r3 i1 G+ Q# A
chuankoufasong(37,4);
USART1->DR=SendBuff[chuankoufasongwei];
while(1) % j/ l- b( I3 j
{
{ //计算出理论飞行角度
/////************************************************************************//* M7 T- C* U" `. d
lilunyoumen=shuruyoumen;9 t( k6 `1 S; [0 v# Y: L- Z
lilunfuyi=0.4*(shurufuyi/300);; B7 I* b; o6 e4 H* g8 N
lilunshengjiang=0.4*(shurushengjiang/300);
lilunfangxiang=lilunfangxiang+nifangxiang*2 ;9 _- ?$ \; g& t; @, E
nifuyi=0;
nishengjiang=0;& v0 v. v* ^$ H5 C+ G2 u
nifangxiang=0;6 z5 R4 v& D" C& }
if(lilunshengjiang>3.14159/2){lilunfuyi=lilunfuyi+3.14159;lilunfangxiang=lilunfangxiang-3.14159;lilunshengjiang=3.1415/2;}: p( [6 ~. R" V0 D
if(lilunshengjiang<-3.14159/2){lilunfuyi=lilunfuyi+3.14159;lilunfangxiang=lilunfangxiang-3.14159;lilunshengjiang=-3.1415/2;}
if(lilunfangxiang>2*3.14159)lilunfangxiang=lilunfangxiang-2*3.14159;
if(lilunfangxiang<0)lilunfangxiang=lilunfangxiang+3.14159*2;
if(lilunfuyi>3.14159)lilunfuyi=lilunfuyi-3.14159*2;" p( S& v4 j( @ s( w
if(lilunfuyi<-3.14159)lilunfuyi=lilunfuyi+3.14159*2;" T: G9 S% q8 [8 `$ U4 ~6 Q
}; Q( P1 C6 H. S
{ //计算出实际坐标和理论坐标差
chafuyi=Roll-lilunfuyi;
if(chafuyi>pi)chafuyi-=2*pi;
if(chafuyi<-pi)chafuyi+=2*pi;. ?( E1 B+ ?5 i
//if(chafuyi>(pi/8))chafuyi=pi/8;9 E: `' C' a% K% I/ M! A
//if(chafuyi<(-pi)/8)chafuyi=-pi/8;
chashengjiang=-(Pitch-lilunshengjiang);# |- ^9 q- }: j7 Q# D
if(chashengjiang>(pi))chashengjiang-=2*pi;
if(chashengjiang<-(pi))chashengjiang+=2*pi;' J% |0 I0 i. Q; H& |8 [: P; S: f% R
//if(chashengjiang>(pi/8))chashengjiang=pi/8;, _0 n( V$ z4 x$ g
//if(chashengjiang<(-pi)/8)chashengjiang=-pi/8;
chafangxiang=-(Yaw-lilunfangxiang);
if(chafangxiang>pi)chafangxiang-=2*pi;- t9 N$ \. [- W
if(chafangxiang<-pi)chafangxiang+=2*pi;
//if(chafangxiang>(pi/8))chafangxiang=pi/8;
//if(chafangxiang<(-pi)/8)chafangxiang=-pi/8;) Y6 k1 Z$ K) U; o' F9 v
}
{ //计算出飞行器各个轴需要的理论角速度
xlilunjiaosudu=(chafuyi )*jiaosuduchangshu;
ylilunjiaosudu=(chashengjiang*cos(Roll)+chafangxiang*sin(Roll))*jiaosuduchangshu;
zlilunjiaosudu=(chafangxiang*cos(Roll)-chashengjiang*sin(Roll))*jiaosuduchangshu;; v5 N( Z' f" c. }, C
if(xlilunjiaosudu>zuidatiaozhengsudu)xlilunjiaosudu=zuidatiaozhengsudu;. O0 L# G* N, i1 t8 c# b" X1 M- C
if(xlilunjiaosudu<-zuidatiaozhengsudu)xlilunjiaosudu=-zuidatiaozhengsudu;3 X; F* }& R! g. u/ L
if(ylilunjiaosudu>zuidatiaozhengsudu)ylilunjiaosudu=zuidatiaozhengsudu;+ R3 V2 B0 I, X% A. C3 ?
if(ylilunjiaosudu<-zuidatiaozhengsudu)ylilunjiaosudu=-zuidatiaozhengsudu;, v% @$ ?0 N P1 \2 J% j
if(zlilunjiaosudu>zuidatiaozhengsudu)zlilunjiaosudu=zuidatiaozhengsudu;9 e* `4 I# P6 Q# ~, @
if(zlilunjiaosudu<-zuidatiaozhengsudu)zlilunjiaosudu=-zuidatiaozhengsudu;
if(xlilunjiaosudu<zuixiaotiaozhengshudu&&xlilunjiaosudu>weitiaoweizhi)xlilunjiaosudu=zuixiaotiaozhengshudu;3 x! u4 b# {, ]3 ?3 `+ B& {
if(ylilunjiaosudu<zuixiaotiaozhengshudu&&ylilunjiaosudu>weitiaoweizhi)ylilunjiaosudu=zuixiaotiaozhengshudu;
if(zlilunjiaosudu<zuixiaotiaozhengshudu&&zlilunjiaosudu>weitiaoweizhi)zlilunjiaosudu=zuixiaotiaozhengshudu;: J0 J9 h% m' Y2 Z/ f) H5 D
if(xlilunjiaosudu>-zuixiaotiaozhengshudu&&xlilunjiaosudu<-weitiaoweizhi)xlilunjiaosudu=-zuixiaotiaozhengshudu;
if(ylilunjiaosudu>-zuixiaotiaozhengshudu&&ylilunjiaosudu<-weitiaoweizhi)ylilunjiaosudu=-zuixiaotiaozhengshudu;
if(zlilunjiaosudu>-zuixiaotiaozhengshudu&&zlilunjiaosudu<-weitiaoweizhi)zlilunjiaosudu=-zuixiaotiaozhengshudu;
}
{ //计算角速度平均数$ k) `/ B- C; u5 I( e
xjiaosudu=0;
yjiaosudu=0;0 q* n9 f/ I# w6 u; Z2 Z+ H( _1 B
zjiaosudu=0;3 G% p0 f. \( H5 ?1 V# h
for(i=0;i<jiaosuduqudiancishu;i++)& n* n s7 k- s1 C* A$ O
{
xjiaosudu+=xjsd[i];
yjiaosudu+=yjsd[i];
zjiaosudu+=zjsd[i];# E& g' U1 i( R- }* X
}; k+ S/ f- b6 \& {) Z7 o
xjiaosudu/=jiaosuduqudiancishu;
yjiaosudu/=-jiaosuduqudiancishu;7 J3 G: O+ ]' t% K' U5 A; [& z
zjiaosudu=zjiaosudu/jiaosuduqudiancishu;
}/ t5 P/ R; `9 e9 ^5 z' {
if(shuruyoumen>1200) //如果油门处于激活状态
{ //从理论角速度计算功电机运行的信号强度
shijijiaosuduchangshu=shijijiaosuduchangshu2*(lilunyoumen-800)/1000*(lilunyoumen-600)/1000;( M& U' h% N) p
lingshijiaosudu=(-xjiaosudu)/shijijiaosuduchangshu;6 S" c2 d( q$ \" N) Y, [8 X
if(lingshijiaosudu>zuidaxiuzhengsudu)lingshijiaosudu=zuidaxiuzhengsudu;
if(lingshijiaosudu<-zuidaxiuzhengsudu)lingshijiaosudu=-zuidaxiuzhengsudu;
//xjiaosudu=-shurufuyi/jiaosuduchangshu-lingshijiaosudu;//角速度调整模式时 jiaosuduchangshu=15# x+ I3 B' {! r3 w z: l7 D
//xlilunjiaosudu=-shurufuyi/jiaosuduchangshu;
xjiaosudu=xlilunjiaosudu-lingshijiaosudu;+ O& t5 U( G9 V% q* k: v
lingshijiaosudu=(yjiaosudu)/shijijiaosuduchangshu;
if(lingshijiaosudu>zuidaxiuzhengsudu)lingshijiaosudu=zuidaxiuzhengsudu;0 s- c& _5 s- k& C( B1 _( E9 ^# S" y
if(lingshijiaosudu<-zuidaxiuzhengsudu)lingshijiaosudu=-zuidaxiuzhengsudu;" F5 p1 P' o# z- `/ @/ r( O
//yjiaosudu=shurushengjiang/jiaosuduchangshu-lingshijiaosudu;
//ylilunjiaosudu=shurushengjiang/jiaosuduchangshu;! ?$ u- {; Q1 ], [/ a6 r1 ]& ~
yjiaosudu=ylilunjiaosudu-lingshijiaosudu;
lingshijiaosudu=(zjiaosudu)/shijijiaosuduchangshu;
if(lingshijiaosudu>zuidaxiuzhengsudu)lingshijiaosudu=zuidaxiuzhengsudu;$ i4 e% ?: `7 a! w
if(lingshijiaosudu<-zuidaxiuzhengsudu)lingshijiaosudu=-zuidaxiuzhengsudu;4 h: Q8 t) G) N
//zjiaosudu=shurufangxiang/jiaosuduchangshu-lingshijiaosudu;
//zlilunjiaosudu=shurufangxiang/jiaosuduchangshu;
zjiaosudu=zlilunjiaosudu-lingshijiaosudu;! o' T7 @' p6 m; u" T
if(lilunyoumen>1700)lilunyoumen=1700;/ `( r) e/ d( D- Q1 L. X
duojikongzhi[0]=lilunyoumen+xjiaosudu+yjiaosudu+zjiaosudu*3+duojipianyi[0];$ }% _) S" S* O8 C3 `) _8 Q- ~! {
duojikongzhi[1]=lilunyoumen-xjiaosudu+yjiaosudu-zjiaosudu*3+duojipianyi[1];
duojikongzhi[2]=lilunyoumen-xjiaosudu-yjiaosudu+zjiaosudu*3+duojipianyi[2];, J& o; h- r" C* N
duojikongzhi[3]=lilunyoumen+xjiaosudu-yjiaosudu-zjiaosudu*3+duojipianyi[3];
for(i=0;i<4;i++)) N o! p9 v a/ }
{& k! _; X3 [8 U
if(duojikongzhi[i]<1200)duojikongzhi[i]=1200;! v4 _2 }4 [1 P/ f; Y0 C. l* b
}
}
else { //如果油门为0! {/ o) T0 Z2 i8 i N+ a5 W
duojikongzhi[0]=duojikongzhi[1]=duojikongzhi[2]=duojikongzhi[3]=1100;
lilunfuyi=Roll;: `$ c0 h H/ x
lilunshengjiang=Pitch;. {& Z9 x1 K8 L. V
lilunfangxiang=Yaw;
}/ e* S4 L i8 D8 G- t& W
//t=double(jieshouji[0])/100;4 u$ ?" r6 T7 C9 U( E5 y1 [7 S
/*1 F: x; |( }/ Z
for(i=0;i<6;i++){
} ?: E( c" y# v, c2 e m: a+ _3 [9 E+ L
chuankoufasong(36,shurufuyi);
chuankoufasong(37,shurushengjiang);
chuankoufasong(38,shuruyoumen);1 v% B# A" |" E3 n
chuankoufasong(39,shurufangxiang);delay_ms(30);2 a- a: m' |" N& |* T
{ //发送串口数据,功电脑读取.
h=shurufangxiang;( K& a) N9 o5 c/ h
chuankoufasong(36,xjiaosudu); delay_ms(10);- I% x/ t( U" ] ]/ J1 @: g' b
h=shuruyoumen;
chuankoufasong(37,yjiaosudu); delay_ms(10);) O, D9 F4 L2 I' L
h=chafangxiang*57;( b2 M8 F6 ?$ `. g
chuankoufasong(38,zjiaosudu);$ v8 r5 o+ d! i3 ^ H
delay_ms(10);. f7 y! ]2 Z+ M' H l
chuankoufasong(39,duojikongzhi[3]);
delay_ms(10);5 W0 H( y9 g. U( F
//duojikongzhi[0]=duojikongzhi[1]=duojikongzhi[2]=duojikongzhi[3]=shuruyoumen+1100;+ p7 l! n- t B$ d: [/ c
}, E% {& D0 d5 m. r; R- a8 |2 b
h=xjiaosudu;
chuankoufasong(36,h);9 k( m2 O+ A5 j4 N7 C
h=yjiaosudu;! k/ T ?0 s8 d7 ]
chuankoufasong(37,h); delay_ms(10);
h=zjiaosudu;
chuankoufasong(38,h);+ T& M# \! h C! E4 s
h=shurufangxiang;
chuankoufasong(39,h);
h=shuruyoumen;
chuankoufasong(39,jieshouji[4]);
h= dumpu6050jicunqi(0);
chuankoufasong(37,h);
h= dumpu6050jicunqi(1);1 X' j: E0 ^2 A. Q9 C2 Y9 K
chuankoufasong(38,h);! v$ H E5 J& @% d
h= dumpu6050jicunqi(2);
chuankoufasong(39,h);
chuankoufasong(36,jieshouji[3]);! }0 ^' |. y! q- }
chuankoufasong(37,jieshouji[2]);+ G- F& B/ s- m) c+ |' ?' w1 ~. I
chuankoufasong(38,jieshouji[4]);. \2 C }" H0 K; n3 T( ~7 b; G
*/
{
if((USART1->SR&0X40)!=0)
{7 R9 O) q& x% ~4 n% E4 Y% g
zhinengchuankou();
}9 Q& |1 p3 o6 u) V6 ]
}! T$ s7 f4 U+ Z8 B6 I% T
}+ Q* l' ~- C+ U( ^
( c8 w" F$ N" y4 t7 X3 v1 l
}
void TIM2_IRQHandler(void) //定时器2 ,用于读取DMP数据& G6 H8 }" b. q% f- v# W
{
TIM2->SR&=~(1<<0);//清除中断标志位
8 ^3 o# q, m' n
dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more); 9 }+ Y! K4 d% V( h
if (sensors & INV_WXYZ_QUAT )$ z2 Y, C6 q U
{
q0=quat[0] / q30;/ J% o# C! ^7 L) u
q1=quat[1] / q30;! _! U; _& v4 J$ l/ Y$ W
q2=quat[2] / q30;
q3=quat[3] / q30;) E: Y6 Y3 K6 E$ y" X
Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1); // roll副翼5 N$ \- x! ~% a% w& S
Pitch = asin(-2 * q1 * q3 + 2 * q0* q2); // pitch升降: C+ f, a2 {- A8 t
Yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) ;//方向
//h=Roll*57295;
//chuankoufasong(36,h);
//h=Pitch*57295;
//chuankoufasong(37,h);- D) p( ?0 p4 b' e" D! m
//h=Yaw*57295;! |, j4 A) t _6 @
// chuankoufasong(38,h);
// PrintChar("nihao\n");+ y2 ~) i; C& T- b/ H5 J2 `" P0 C0 S
}$ ]# k/ P5 ]6 S9 w7 x( {1 S7 i8 m
xjsd[jiaosuducishu]=(gyro[0]-0);
yjsd[jiaosuducishu]=-(gyro[1]-0);+ ~# \+ t& z# d" ?7 }& o2 M& v
zjsd[jiaosuducishu]=(gyro[2]-0);! E# L( K/ ]; q3 }6 s: G: s
jiaosuducishu++;
if(jiaosuducishu>=jiaosuduqudiancishu)jiaosuducishu=0;( k' c8 I+ g( I, x
3 j, v% W, Y$ K- Z$ r' P- ~
}1 N7 X7 j8 L+ U
5 }8 d# G# i& X1 H! j
! c0 R& z J% z/ \4 P
, n. S8 \- m+ k$ a/ m
2 {+ |( c4 s5 g6 S! J- X7 E
. V/ k6 U. f% {! @! m" Y
void EXTI15_10_IRQHandler(void) //接收机信号接收中断 耗时2微秒 以内: U$ t' `6 G% G' x ~
{
u8 jicixunhuan;+ Y1 ~: W/ j. O
for(jicixunhuan=12;jicixunhuan<16;jicixunhuan++)
{' b& L5 Y3 ^$ @" o; y& N! t! l
if(((GPIOB->IDR>>jicixunhuan)&1)){7 N# `! L9 d, r% X
shuruyinjiao=jicixunhuan;# z/ J$ Q7 z5 P- A. J. ]
TIM1->CNT=0;% C& i! E; o4 y* e
}
}9 V& P% Q- G6 {3 Q! ?; F
if(!(GPIOB->IDR>>12&0xf)){ //如果接收机发送结束/ E" r( p G& B$ ]
if(TIM1->CNT>1000&&TIM1->CNT<2000)
{9 x; R8 W! ?6 j7 t% g% L& y
jieshouji[shuruyinjiao-10]=TIM1->CNT; //将接收机变量保存到变量
jieshouji[shuruyinjiao-10]/=jieshoulingmin;; g: u% f; \+ k) ?) y( O& c' N7 }
jieshouji[shuruyinjiao-10]*=jieshoulingmin;3 N3 [9 I9 c( r2 @! X
}1 c P, _: O8 @7 d8 o$ {& Z# ~
if(shuruyinjiao==15)1 [, a% u$ I- C: V- X! ~
{
/////************************************************************************//1 f6 {$ r7 ^) \+ i2 H
//计算得到每个摇杆的行程: w( ?& S) V* ^/ K/ r; z* D
if((youmen[0]-jieshouji[3])<100&&(shuruyoumen-jieshouji[3])<100)
{
shurufuyi=1492-jieshouji[3];7 }8 m, ?4 B1 a- y; T' c( x F6 V
}6 x1 A7 _* n* V5 P" q7 s6 |6 e# Y/ p
youmen[0]=jieshouji[3];9 }1 e' i! F: ]" I6 Y
shurushengjiang=1492-jieshouji[2];
shurufangxiang=1492-jieshouji[5];) i( f' ?7 j& o
shuruyoumen=jieshouji[4];% c! `2 x) N; j) c, q6 S
/////************************************************************************//5 i* y' ?6 e0 b' P2 K1 {6 |
//每个遥感的行程转化成每次的偏移量
nifuyi=nifuyi+shurufuyi/kongzhilingmin;
nishengjiang=nishengjiang+shurushengjiang/kongzhilingmin;( X* o2 p- u( d# t
nifangxiang=nifangxiang+shurufangxiang/kongzhilingmin;2 {9 o: E+ a0 _' @! S
}
}4 o$ \5 y' D" K
if(shuruyoumen<1190){jiesuo++;/ ^6 t9 W2 h( d5 m
if(shurufangxiang>200){
if(jiesuo>700) {
jiesuo=0;+ Y1 s# c9 g. N$ r" N* {/ O* Z
suo=0;
}
}
if(shurufangxiang<-200){
if(jiesuo>700){" [8 ^/ k' J; {; i' \/ V: w2 A. U4 C
jiesuo=0;
suo=1;
}* c, O- V9 ?- j* D" W e* m
}4 F4 |$ q) o; X8 \: L8 V
}& b0 _. v% u/ F8 y( m8 j _
else jiesuo=0;
zhongduancishu++;
EXTI->PR=1<<10;
EXTI->PR=1<<11;
EXTI->PR=1<<12;' t. v g& b# q) k! k. }' I" ^
EXTI->PR=1<<13;
EXTI->PR=1<<14;
EXTI->PR=1<<15;1 B/ k4 y4 ]3 p: G! m+ v% z
}
void TIM3_IRQHandler(void) //定时器3,用于输出PWM信号 耗时1微秒 以内. u$ m" D& r4 o
{
if(suo==1){
if(shuruyoumen<1200)duojikongzhi[0]=duojikongzhi[1]=duojikongzhi[2]=duojikongzhi[3]=1100;
TIM3->CNT=duojikongzhi[wei];# x+ Q& @5 _8 R% ^. ~
if(wei==0){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji1=1;}0 }. O# Y8 p; @
if(wei==1){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji2=1;}4 {: `( a4 {% r& P5 A, M
if(wei==2){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji3=1;}
if(wei==3){duoji1=0;duoji2=0;duoji3=0;duoji4=0;duoji4=1;led4=!led4;}
if(wei==4){duoji1=0;duoji2=0;duoji3=0;duoji4=0; }
% v7 z5 A/ p2 K$ M
wei++;, z; w1 S7 B9 x4 y
if(wei>4)wei=0;
}) q/ a* M% @4 B o# S
if(suo==0)led4=0;
TIM3->SR&=~(1<<0);//清除中断标志位 , B. D0 W+ y& T# q& c u) U, Z; Q
}% }4 _/ B, ~8 t9 U( R1 F
% _! A, Z* ^/ ?
void TIM4_IRQHandler(void)
{* j' n" Q; ]/ P7 x; Y; q
TIM4->SR&=~(1<<0);//清除中断标志?1 y' V3 O) {' u9 q; t5 }
/*?
*/, P6 Q0 E: B# k& g7 K0 v3 }. E
}
1 T6 }' o9 K+ j* w. F
, [3 R6 T2 j, `
zhinengchuankou()4 s" E8 c3 E) y6 O0 O, N0 G- I. L
{. S, z& O" l8 B) d4 \, {, }
USART1->SR&=~(1<<6);
chuankoufasongwei++;
if(chuankoufasongwei>=20){chuankoufasongge=1;
if(chuankoufasongcishu==36){
SendBuff[0]=36;/ U2 b9 _, t m p9 q& E+ m0 G( o
chuankoufasongshuju=Roll*572957; n6 y. c, G# H& }8 F
chuankoufasongcishu=37;
}else
if(chuankoufasongcishu==37){" R1 ^) j7 [( m& M! @8 [ A, L
SendBuff[0]=37;
chuankoufasongshuju=Pitch*572957;
chuankoufasongcishu=38;
}else8 E0 o. }9 q$ D) a5 x
if(chuankoufasongcishu==38){
SendBuff[0]=38;
chuankoufasongshuju=Yaw*572957;
chuankoufasongcishu=36;$ U( i" J4 ]- R% Q D0 y* B# l0 r. ~3 @7 ^
}
if(chuankoufasongshuju<0){, C! W8 P2 z Q2 y9 b2 u# Q- O" Q
SendBuff[chuankoufasongge]=45; // 给SBUFA数据
chuankoufasongge++;
}
% V* c w, I7 \0 C0 t8 P. J
if(chuankoufasongshuju>=100000000){
SendBuff[chuankoufasongge]=(chuankoufasongshuju/100000000)%10+48; // 给SBUFA数据
chuankoufasongge++;/ g0 z, j; r) F& L+ m# e
}3 r; ], J6 f, F& w$ F7 a* K
if(chuankoufasongshuju>=10000000){
SendBuff[chuankoufasongge]=(chuankoufasongshuju/10000000)%10+48; // 给SBUFA数据2 ?/ U3 J& G7 }6 ~+ J( R9 s$ A
chuankoufasongge++; n- W( e7 g, ^8 Y" q& F' p* l5 S) k( S
}
if(chuankoufasongshuju>=1000000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/1000000)%10+48; // 给SBUFA数据- r# @$ g. d/ V! G) m
chuankoufasongge++;9 U$ V& ]' Q' w
}
if(chuankoufasongshuju>=100000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/100000)%10+48; // 给SBUFA数据+ M7 @, |1 }. q
chuankoufasongge++;
}
if(chuankoufasongshuju>=10000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/10000)%10+48; // 给SBUFA数据/ b7 p& [* W* M+ M( e
chuankoufasongge++;
}
if(chuankoufasongshuju>=1000) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/1000)%10+48; // 给SBUFA数据
chuankoufasongge++;) r3 m( h' |" e( k/ _& |8 B
}3 Y* z9 O; R0 t
if(chuankoufasongshuju>=100) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/100)%10+48; // 给SBUFA数据
chuankoufasongge++;5 a/ t% z! Z4 g
}1 Z' k$ n' f5 y* O
if(chuankoufasongshuju>=10) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/10)%10+48; // 给SBUFA数据3 p; R. G: s5 u+ l7 Z
chuankoufasongge++;/ O+ D/ }( F/ y, r, o a
}/ s/ Y( \, e0 M; s0 ?
if(1) {SendBuff[chuankoufasongge]=(chuankoufasongshuju/1)%10+48; // 给SBUFA数据
chuankoufasongge++;
}8 J' P8 q) J2 ]' H# M
for(;chuankoufasongge<20;chuankoufasongge++)6 W. p. V) }" H- E
SendBuff[chuankoufasongge]=10;6 k' j1 |/ D$ i& H5 K
chuankoufasongwei=0;
}
USART1->DR=SendBuff[chuankoufasongwei];$ ]9 j+ l, d4 r/ g4 Q8 x
}0 `# y; `$ `/ m/ T
我写的乱七八糟的,很长时间没看,自己都看的累