久芯网

关于FOC库的中断配置,望大神指条明路

avatar smgyang 提问时间: 2023-09-30 18:16:19 / 未解决
调了一个月,快疯了
系统配置:stm32F103RC+单电机+3shunt+hall
第一:为什么TIM1有update中断入口函数而NVIC中没有配置TIM1的TIM1_UP_IRQn,而tim1的update中断函数应该在每次溢出时配置采样的通道的,肯定每个pwm周期都要进的啊?而在update中断函数中为什么又关掉中断使能(LL_TIM_DisableIT_UPDATE),其他使能的地方只有R3_2_SwitchOnPWM这个函数里,难道只要电机启动 的时候进入一次吗?怎么可能
static void MX_NVIC_Init(void)
{
  /* ADC1_2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(ADC1_2_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
  /* DMA1_Channel1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  /* TIM2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
  HAL_NVIC_EnableIRQ(TIM2_IRQn);
  /* USART3_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(USART3_IRQn, 3, 1);
  HAL_NVIC_EnableIRQ(USART3_IRQn);
       
}


void TIMx_UP_M1_IRQHandler(void)
{
  /* USER CODE BEGIN TIMx_UP_M1_IRQn 0 */

  /* USER CODE END TIMx_UP_M1_IRQn 0 */  
    LL_TIM_ClearFlag_UPDATE(TIM1);
    R3_2_TIMx_UP_IRQHandler(&PWM_Handle_M1);
    LL_TIM_DisableIT_UPDATE(TIM1);
   /* USER CODE BEGIN TIMx_UP_M1_IRQn 1 */

   /* USER CODE END TIMx_UP_M1_IRQn 1 */   
}



第二:为什么NVIC中配置了DMA中断而没有中断入口函数,真的要疯了

跪求解答。好人一生平安!
3个回答
  • avatar smgyang
    回答时间: 2023-09-30 18:42:19

    有没有大神给个回复啊

  • avatar 子曰好人
    回答时间: 2023-09-30 19:09:47

    第一:你用的LL库,我没用过,我这边生成的是这样的,库版本是5.32 static void MX_NVIC_Init(void) { /* TIM1_BRK_TIM15_IRQn interrupt configuration */ HAL_NVIC_SetPriority(TIM1_BRK_TIM15_IRQn, 4, 1); HAL_NVIC_EnableIRQ(TIM1_BRK_TIM15_IRQn); /* ADC1_IRQn interrupt configuration */ HAL_NVIC_SetPriority(ADC1_IRQn, 2, 0); HAL_NVIC_EnableIRQ(ADC1_IRQn); /* TIM2_IRQn interrupt configuration */ HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); /* USART2_IRQn interrupt configuration */ HAL_NVIC_SetPriority(USART2_IRQn, 3, 1); HAL_NVIC_EnableIRQ(USART2_IRQn); /* EXTI15_10_IRQn interrupt configuration */ HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); }复制代码 void TIMx_UP_M1_IRQHandler(void) { /* USER CODE BEGIN TIMx_UP_M1_IRQn 0 */ /* USER CODE END TIMx_UP_M1_IRQn 0 */ LL_TIM_ClearFlag_UPDATE(PWM_Handle_M1.pParams_str->TIMx); R3_1_F30X_TIMx_UP_IRQHandler(&PWM_Handle_M1); /* USER CODE BEGIN TIMx_UP_M1_IRQn 1 */ /* USER CODE END TIMx_UP_M1_IRQn 1 */ }复制代码 第二:如果没有DMA入口函数,可能是在程序中等dma转换完成直接读取DMA传输到的地址

  • avatar smgyang
    回答时间: 2023-09-30 19:38:10
    子曰好人 发表于 2020-6-8 09:07
    第一:你用的LL库,我没用过,我这边生成的是这样的,库版本是5.32

    你的代码NVIC中没有配置和使能高级定时器的update中断,也能进那个中断服务函数吗?

会员中心 微信客服
客服
回到顶部