pixhawk px4 飞行模式切换器
mission planner所有飞行模式 中文参数 调参必备

0.2
0
弧度
0
弧度
0
弧度
常数. 时间常数是 0.1/beta.较大的时间常数将会使用较少的 GPS 数据而较小 的时间常数将会使用较少的空速数据.
0.0 1.0
这个参数控制 GPS 数据用于估计姿态时的参与度. 固定翼飞机请勿设置为 0,否 则将导致失控. 固定翼飞机请使用默认参数 1.0.
0 10
16:Roll90
17:Roll90Yaw45
18:Roll90Yaw90
19:Roll90Yaw135 20:Roll270 21:Roll270Yaw45 22:Roll270Yaw90
相对于标准朝向的主板安装朝向,与板型有关. 这个参数将 IMU 和罗盘的读数 进行旋转变换以使得安装角度和板子默认角度可以相差 45 度或者 90 度. 这个 参数将在下一次重启时生效,重启前必须将设备放置水平.
这个参数选择使用何种高度控制算法. 默认为 0, 自动设置最适应你的机架的 算法. 当前的默认值是使用 TECS (总能量控制系统). 未来我们会加入其它高 度控制算法,可以通过这个参数修改.
电传操控 B 模式(FBWB:Fly-by-Wire B)和巡航(CRUISE)模式允许的最小高度. 如果你试图降低至低于这个高度飞机将会拉平. 零值意味着没有此限制.
AFS_AMSL_ERR_GPS -1 米
AFS_AMSL_LIMIT
0
米
AFS_DUAL_LOSS
1
AFS_ENABLE
0
AFS_GEOFENCE
1
AFS_HB_PIN
-1
AFS_MAN_PIN
-1
AFS_MAX_COM_LOSS 0
PIXHAWK飞控概览

PIXHAWK飞控概览Pixhawk飞控的技术规格、接口分配、PWM,PPM-SUM和SBUS模式下的舵机与电调的连接方法、接口图,和与其他常见飞控的区别与选择。
技术规格•处理器32位 STM32F427 ARM Cortex M4 核心外加 FPU(浮点运算单元)168 Mhz/256 KB RAM/2 MB 闪存32位 STM32F103 故障保护协处理器•传感器Invensense MPU6000 三轴加速度计/陀螺仪ST Micro L3GD20 16位陀螺仪ST Micro LSM303D 14位加速度计/磁力计MS5611 MEAS 气压计•电源良好的二极管控制器,带有自动故障切换舵机端口7V高压与高电流输出所有的外围设备输出都有过流保护,所有的输入都有防静电保护•接口5个UART串口,1个支持大功率,两个有硬件流量控制Spektrum DSM/DSM2/DSM-X 卫星输入Futaba SBUS输入(输出正在完善中)PPM sum 信号RSSI(PWM或者电压)输入I2C, SPI, 2个CAN, USB3.3 与 6.6 ADC 输入•尺寸重量 38g宽 50 mm高 15.5 mm长 81.5 mmPixhawk 的接口分配PWM,PPM-SUM和SBUS模式下的舵机与电调的连接方法Pixhawk 接口图上图中针脚1在右边串口 1 (Telem 1),串口 2 (Telem 2) ,串口 (GPS) 针脚: 6 = GND, 5 = RTS, 4 = CTS, 3 = RX, 2 = TX, 1 = 5V.选择哪款飞控? APM 、PX4,还是 PIXHAWK•APM2.5与2.6是传统ardupilot飞控的最新(也是最终)版本:APM25 与 26 概览•PX4FMU与PX4IO 是这个新飞控家族的最初两个版本:Px4FMU 概览与 Px4IO 概览•Pixhawk是根据我们的需要,结合PX4FMU / PX4IO改进而开发出的PX4飞控的单块电路板版本。
PIXHAWk飞控介绍

论坛/forum.php版本时间说明修订者0.12014-8-10起草目录wikiuavPIXHAWk简介参考网址/目录一、PIXHAWK飞控简介及使用说明 (2)二、PIXHAWK插脚引线介绍 (14)三、PIXHAWK飞控板原理图 (15)四、PIXHAWK与电机、电调的连接图 (28)论坛/forum.php采用PIXHAWK2.4.5作为飞行控制器,它是世界上最出名的开源飞控的硬件厂商3DR最新推出了最新一代飞控系统,其前身是APM,由于APM的处理器已经接近满负荷,没有办法满足更复杂的运算处理,所以硬件厂商采用了目前最新标准的32位ARM处理器,第一代产品是PX4系列,他分为飞控处理器PX4FMU和输入输出接口板PX4IO。
PX4系列可以单独使用PX4FMU,但是接线很复杂,也可以配合输入输出接口板PX4IO来使用,但是因为没有统一的外壳,不好固定,再加上使用复杂,所以基本上属于一代实验版本。
通过PX4系列的经验,厂商终于简化了结构,把PX4FMU和PX4IO整合到一块板子上,并加上了骨头形状的外壳,优化了硬件和走线,也就是这款第二代产品PIXHAWK。
一、PIXHAWK飞控简介及使用说明PIXHAWK的所有硬件都是透明的,它用的是什么芯片和传感器一目了然,所有的总线和外设都进行引出,不但以后可以兼容一些其他外设,而且对于有开发能力的用户提供了方便。
PIXHAWK是一个双处理器的飞行控制器,一个擅长于强大运算的32bit STM32F427 Cortex M4核心168MHz/256KB RAM/2MB Flash处理器,还有一个主要定位于工业用途的协处理器32bit STM32F103,它的特点就是安全稳定。
所以就算主处理器死机了,还有一个协处理器来保障安全。
1)特性●核心MCU性能:168MHz/252MIPS Cortex-M4F;●输出能力:14PWM/舵机输出(其中8个带有失效保护功能,可人工设定。
qgroundcontrol中文手册

Qgroundconttol/PX4 fly stack中文使用手册编辑:@薛定谔的猫翻译:@斑斑点点校对:@薛定谔的猫原文地址:https://donlakeflyer.gitbooks.io/qgroundcontrol-user-guide/content/ 翻译修订针对开发者内容略有删减。
目录概述 1.1 快速入门 1.2 下载和安装 1.3 飞行 1.4 任务计划 1.5 配置调试 1.6 固件 1.6.1 机架类型 1.6.2 遥控器 1.6.3 传感器 1.6.4 飞行模式 1.6.5 电源 1.6.6 电机 1.6.7 安全设置 1.6.8 调试 1.6.9 相机 1.6.10 参数 1.6.11 设置 1.7 支持 1.8QGroundControlQGroundControl为加载了了ArduPilot 或 PX4 的载具提供全面的飞行控制和载具设置。
QGroundControl 的目标是简化新用户的使用,同时为有经验的用户提供高端功能支持。
QGroundControl 功能:●为安装了ArduPilo或PX4 Pro的载具提供完善的配置支持●无人飞行任务规划●在飞行地图上显示载具位置、飞行轨迹、航点和仪表盘●叠加仪表视图的视频流显示●为任何MAVLink的载具提供飞行支持●IMAV和EMAV比赛的比赛验证QGroundControl 可以在Window、OS X以及Linux 平台,比如iOS或Android 设备上运行This is QGroundControl第一步是下载和安装。
在主界面上可以访问QGC的主要功能,:例如配置无人机,计划并监视飞行任务。
应用设置配置QGroundControl功能安装配置与调试载具任务规划创建无人任务飞行在飞行时监视载具状态和视频流Quick start连接载具如果你通过USB线缆、数传电台,或者WIFI连接你的载具,在大多数情况下都并不需要做更多的操作,QGC会自动识别你的载具并连接。
mission planner所有飞行模式 中文参数 调参必备

0.2
0.1 0.4
这个参数控制罗盘和GPS在偏航上的参与度. 较大的数值会使得飞控在航向控制上更频繁地获取罗盘和GPS数据.
ALT_CTRL_ALG
0
0:自动
这个参数选择使用何种高度控制算法. 默认为0, 自动设置最适应你的机架的算法. 当前的默认值是使用TECS (总能量控制系统). 未来我们会加入其它高度控制算法,可以通过这个参数修改.
BATT_CAPACITY
3300
毫安时
满电电池的容量,以mAh计
BATT_CURR_PIN
3
-1:禁用 1:A1 2:A2 3:Pixhawk 12:A12 101:PX4
设置这个参数为0至13将指定电池电流传感器的管脚对应于A0至A13. 对于APM2.5的电源模块,这个值必须为12. 在PX4上这个值必须为101. 对于使用电源模块的Pixhawk这个值必须为3.
ARSPD_OFFSET
2.333235
空速计校准后的偏移
ARSPD_PIN
15
空速计连接到的模拟IO口. 设置这个参数为0-9来对应APM2的模拟引脚. 使用APM1时设置为64,对应于板子末端的空速计接口. 使用PX4时设为11,对应于模拟空速计接口. 使用Pixhawk时设为15,对应于模拟空速计接口. 使用EagleTree或MEAS I2C空速计的PX4或者Pixhawk,设置为65.
AFS_MAN_PIN
-1
这个参数指定一个在手动模式(Manual)下输出高电平的数字IO口
AFS_MAX_COM_LOSS
0
如果通讯失联事件累计超过这个值,则飞机将停止在通讯恢复后再度回到任务. 设为零来允许任意数目的通讯失联事件.
Pixhawk飞控设置飞行模式教程及LED灯意义

飞行模式中文意思:0:Stabilize自稳,1:Acro特技,2:AltHold定高,3:Auto自动,4:Guided引导,5:Loiter留待(常叫悬停),6:RTL返航,7:Circle绕圈,9:Land降落,11:Drift飘移,13:Sport运动,14:Flip翻转,15:AutoTune自动调参,16:PosHold定点,17:Brake暂停M:Copter中有14种飞行模式可供选择,有10种是常用的。
你可以按照下列流程进行设定:1.打开你的遥控发射机2·连接APM/PX4至Mission Planner3·进入Initial Setup(初始设置)> Mandatory Hardware(必备硬件)> Flight Modes(飞行模式)界面·注意下,切换发射机的飞行模式开关(通道5),绿色高光就会移动到不同的位置。
·使用每行的下拉菜单选择飞行模式应用到这个开关位置上,确保至少有一个开关位置是给自稳的。
·而且可以为这个开关位置选中简单模式复选框。
如果使用的是AC3.1或更新版本,你也可以设为超简单模式。
如果简单模式和超简单模式同时被选中,那么会使用超简单模式。
建议第一次使用不要打开简单模式或者超简单模式,设置不好飞机会自旋!·当完成时点击“保存模式”按钮。
飞行模式注解1、稳定模式Stabilize稳定模式是使用得最多的飞行模式,也是最基本的飞行模式,起飞和降落都应该使用此模式。
此模式下,飞控会让飞行器保持稳定,是初学者进行一般飞行的首选,也是FPV第一视角飞行的最佳模式。
一定要确保遥控器上的开关能很方便无误地拨到该模式,应急时会非常重要。
2、比率控制模式Acro这个是非稳定模式,这时apm将完全依托遥控器遥控的控制,新手慎用。
3、定高模式ALT_HOLD定高模式(AltHold)是使用自动油门,试图保持目前的高度的稳定模式。
APM-Pixhawk飞行模式

特技模式Acro Mode特技模式•特技模式是仅基于速率控制的模式。
•特技模式提供了遥控器摇杆到飞行器电机之间的最直接的控制关系。
•在特技模式下飞行,就像是不装飞控的遥控直升机一样,需要持续不断的手工摇杆操作。
细节特技模式有两种类型:默认的模式是基于地面坐标系的比率控制(AXIS_ENABLE = 1)。
第二是基于飞行器本体三个轴的转速比率控制(AXIS_ENABLE = 0)。
由于自我平衡能力不好,不建议用这种高难度模式飞行。
•特技模式下飞行器的滚转、俯仰、偏航三个轴的角速率由摇杆偏移角度来控制。
•摇杆居中意味着保持当前角度的姿态。
缺省模式也可以设置成为在摇杆居中的时候把飞行器控制到水平姿态。
•纵倾和侧倾的控制杆会使飞行器在相应的方向产生相应的倾斜角。
•为了使飞行器重新恢复水平,各轴摇杆需要向相反方向推。
•为了维持飞行水平,各轴控制摇杆需要不停地调整。
•缺省模式有两个参数。
以百分比的形式表示,各自乘以当前的滚转角和俯仰角,然后得到回到水平位置所需要的角速度。
•偏航控制杆的操纵方式,同稳定状态下的操纵方式相同。
•油门杆也是直接按照杆量加速或者减速控制控制四个电机。
•油门也需要不停地修正以维持飞行高度。
调试:•AXIS_ENABLE = 1 时的控制器基本上是转速比率控制稳定模式,有一些有用的功能。
有两个参数控制•ACRO_BAL_ROLL配置:•Beginner 200•Intermediate 100•Expert 0.•ACRO_BAL_PITCH配置:•Beginner 200•Intermediate 0•Expert 0.•参数ACRO_P:映射控制杆到所需的速度旋转。
•例如:ACRO_P等于4 就每秒转180°即4乘45°等于180°(4是最大值)。
•降低ACRO_P值,旋转速度变慢。
•稳定速率控制PID是•PID用在稳定模式作为主要角度控制参数。
•Rate_P是用于控制飞机振动程度。
pixhawk飞行及混控操作

一、固定翼起飞:
1.Mp内设置好飞行任务
2.数传连接电脑、飞机
3.Mp检查飞机数据是否正常
4.遥控器混控拨到增稳模式
5.油门最大,抛飞固定翼
6.手动油门、方向飞行至120米高度,然后遥控器混控拨到返航模式,此后飞机绕圈飞行
至设定高度210米,继续水平绕圈飞行。
7.等机头朝向测区方向后,遥控器拨至AUTO模式,飞机执行任务,自动飞向测区。
8.关闭遥控器,混控模式调整到返航模式。
二、固定翼降落:
1.飞机返航至HOME点,210高度绕圈飞行,通过地面站调整飞机高度90、70、50、40等。
2.最终通过地面站飞机时速调整到20公里,然后遥控器混控调整到增稳模式。
3.当飞机机头即将朝向降落跑道,然后混控拨至增稳模式,人工接受飞机,控制油门和方向,降落飞机。
注意:混控只设置三个模式:增稳、返航、AUTO自动。
1.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stm32f10x.h"#include "delay.h"#include "key.h"#include "dac.h"voidRCC_Configuration(void);voidGPIO_Configuration(void); voidNVIC_Configuration(void);voidDAC_Configuration(void);int main(void){u8 t;RCC_Configuration();NVIC_Configuration();GPIO_Configuration();DAC_Configuration();GPIO_SetBits(GPIOA, GPIO_Pin_4);DAC_OutVoltage(3);/* check all LED */GPIO_ResetBits(GPIOA, GPIO_Pin_0);GPIO_ResetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOA, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_13);GPIO_ResetBits(GPIOC, GPIO_Pin_14);GPIO_ResetBits(GPIOC, GPIO_Pin_15);Delayms(300);GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);Delayms(300);GPIO_ResetBits(GPIOA, GPIO_Pin_0);GPIO_ResetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOA, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_13);GPIO_ResetBits(GPIOC, GPIO_Pin_14);GPIO_ResetBits(GPIOC, GPIO_Pin_15);Delayms(300);GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);Delayms(300);GPIO_ResetBits(GPIOA, GPIO_Pin_0);GPIO_ResetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOA, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_13);GPIO_ResetBits(GPIOC, GPIO_Pin_14);GPIO_ResetBits(GPIOC, GPIO_Pin_15);Delayms(300);GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);Delayms(300);while (1){t = KEY_Scan(0); //????switch(t) {case KEY0: //?????GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);DAC_OutVoltage(0.5);break;case KEY1: //?? LED0 ??GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_ResetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);DAC_OutVoltage(1.0);break;case KEY2: //?? LED1 ??GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_ResetBits(GPIOC, GPIO_Pin_15);DAC_OutVoltage(1.5);break;case KEY3: //???? LED0,LED1 ??GPIO_ResetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);DAC_OutVoltage(2.0);break;case KEY4: //???? LED0,LED1 ??GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_ResetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);DAC_OutVoltage(2.5);break;case KEY5: //???? LED0,LED1 ??GPIO_SetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_13);GPIO_SetBits(GPIOC, GPIO_Pin_14);GPIO_SetBits(GPIOC, GPIO_Pin_15);DAC_OutVoltage(3.0);break;default:Delayms(10);}}}voidRCC_Configuration(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);}voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;/* PC13/14/15 - LED */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);/* PA0/1/2 - LED */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);/* PB0/1/2/3/4/5 - KEY */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;GPIO_Init(GPIOB, &GPIO_InitStructure);/* PA4 - DAC1 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);}voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;}voidDAC_Configuration(void){DAC_InitTypeDefDAC_InitStructure;DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;DAC_Init(DAC_Channel_1, &DAC_InitStructure);DAC_Cmd(DAC_Channel_1, ENABLE);}#include "dac.h"voidDAC_OutVoltage(float voltage){uint16_t data;data = (uint16_t)((voltage/3.3)*4096);DAC_SetChannel1Data(DAC_Align_12b_R, data);//DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);}#include "key.h"#include "delay.h"u8 KEY_Scan(u8 mode){static u8 key_up = 1; //???????if (mode)key_up = 1; //????if(key_up&&(READ_KEY0==0||READ_KEY1==0||READ_KEY2==0||READ_KEY3==0||READ_KEY4== 0||READ_KEY5==0)){Delayms(10); //???key_up = 0;if(READ_KEY0 == 0)return KEY0;if(READ_KEY1 == 0)return KEY1;if(READ_KEY2 == 0)return KEY2;if(READ_KEY3 == 0)return KEY3;if(READ_KEY4 == 0)return KEY4;if(READ_KEY5 == 0)return KEY5;}else if(READ_KEY0==1 && READ_KEY1==1 && READ_KEY2==1 && READ_KEY3==1 && READ_KEY4==1 && READ_KEY5==1)key_up = 1;return 0; // ?????}#include "stm32f10x.h"#include "led.h"voidled_set (int id, int status){if (status == LED_ON){if (id == LED_GREEN)GPIO_ResetBits(GPIOB, GPIO_Pin_9);elseGPIO_ResetBits(GPIOB, GPIO_Pin_8);}else{if (id == LED_GREEN)GPIO_SetBits(GPIOB, GPIO_Pin_9);elseGPIO_SetBits(GPIOB, GPIO_Pin_8);} }。