//溢出中断
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim ->Instance == TIM1)
{
if(A ==0)
{
HAL_TIM_Base_Stop(&htim2);
__HAL_TIM_SET_COUNTER(&htim2,0);
HAL_DMA_Abort(&hdma_tim2_ch1); // hdma为DMA句柄
HAL_DMA_Abort(&hdma_tim2_ch2_ch4); // hdma为DMA句柄
HAL_DMA_Abort(&hdma_tim2_ch3); // hdma为DMA句柄
HAL_DMA_DeInit(&hdma_tim2_ch1);
HAL_DMA_DeInit(&hdma_tim2_ch2_ch4);
HAL_DMA_DeInit(&hdma_tim2_ch3);
__HAL_TIM_DISABLE_DMA(&htim2, TIM_DMA_UPDATE); // htim为PWM定时器句柄,TIM_DMA_UPDATE为DMA请求源
// HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); // 停止PWM输出
HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_1);
HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_2);
HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_3);
flag+=1;
if (flag == 1 ||flag == 5)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);//PA7的波形
}
if(flag == 1 || flag ==3 || flag == 5)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
}
if (flag == 3 ||flag == 5)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);//PA6的波形
}
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1); // 启动比较中断
}
}
}
//比较中断
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM1)
{
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
HAL_DMA_Abort(&hdma_tim2_ch1); // hdma为DMA句柄
HAL_DMA_Abort(&hdma_tim2_ch2_ch4); // hdma为DMA句柄
HAL_DMA_Abort(&hdma_tim2_ch3); // hdma为DMA句柄
HAL_TIM_Base_DeInit(&htim2);
MX_MY_TIM2_Init(16,423,0);
HAL_DMA_DeInit(&hdma_tim2_ch1);
HAL_DMA_DeInit(&hdma_tim2_ch2_ch4);
HAL_DMA_DeInit(&hdma_tim2_ch3);
HAL_TIM_Base_MspInit(&htim2);
__HAL_TIM_SET_COUNTER(&htim2,0);
HAL_TIM_PWM_Start_DMA(&htim2,TIM_CHANNEL_1,(uint32_t *)pulse1,(7));
HAL_TIM_PWM_Start_DMA(&htim2,TIM_CHANNEL_2,(uint32_t *)pulse2,(8));
HAL_TIM_PWM_Start_DMA(&htim2,TIM_CHANNEL_3,(uint32_t *)pulse3,(4));
}
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
flag+=1;
if (flag == 4 ||flag == 6)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
}
if (flag == 4 ||flag == 2 || flag == 6)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
}
if (flag == 4 ||flag == 2)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
}
if (flag == 6)
{
flag = 0;
}
}
}
}