TIM_SetCompare3 (TIM1, T0 + T1 + T2); // W+
break;
case 3:
// U - 导通,V - 导通,W + 导通
TIM_SetCompare1 (TIM1, T0); // U-
TIM_SetCompare2 (TIM1, T0); // V-
TIM_SetCompare3 (TIM1, T0 + T1 + T2); // W+
break;
case 4:
// U - 导通,V + 导通,W - 导通
TIM_SetCompare1 (TIM1, T0); // U-
TIM_SetCompare2 (TIM1, T0 + T1 + T2); // V+
TIM_SetCompare3 (TIM1, T0); // W-
break;
case 5:
// U + 导通,V - 导通,W - 导通
TIM_SetCompare1 (TIM1, T0 + T1 + T2); // U+
TIM_SetCompare2 (TIM1, T0); // V-
TIM_SetCompare3 (TIM1, T0); // W-
break;
case 6:
// U - 导通,V + 导通,W + 导通
TIM_SetCompare1 (TIM1, T0); // U-
TIM_SetCompare2 (TIM1, T0 + T1 + T2); // V+
TIM_SetCompare3 (TIM1, T0 + T1); // W+
break;
default:
// 异常情况:关闭所有 PWM 输出
TIM_SetCompare1 (TIM1, 0);
TIM_SetCompare2 (TIM1, 0);
TIM_SetCompare3 (TIM1, 0);
break;
}
// 配置互补通道(下桥臂 PWM,与上桥臂互补,避免上下桥臂直通)
TIM_SetCompare1N (TIM1, Ts - TIM_GetCompare1 (TIM1)); // U-(互补于 U+)
TIM_SetCompare2N (TIM1, Ts - TIM_GetCompare2 (TIM1)); // V-(互补于 V+)
TIM_SetCompare3N (TIM1, Ts - TIM_GetCompare3 (TIM1)); // W-(互补于 W+)
}
### 6.3 DShot完整代码(接收+解析)
DShot接收需通过定时器输入捕获解析飞控发送的脉冲信号,需处理同步位识别、CRC校验与油门值提取,代码如下:
```c
// DShot接收全局变量
uint8_t dshot_rx_buf[20] = {0}; // 存储20bit帧数据
uint8_t dshot_rx_cnt = 0; // 接收bit计数
uint16_t dshot_throttle = 0; // 解析后的油门值
uint8_t dshot_rx_flag = 0; // 接收完成标志(1=完成)
/**
* @brief TIM2初始化(DShot接收:输入捕获模式)
*/
void DShot_RX_TIM_Init(void) {
// 1. GPIO初始化(PA15=TIM2_CH1,输入模式)
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd = GPIO_Pu