smgyang 发表于 2020-6-7 01:17:09

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

调了一个月,快疯了
系统配置: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中断而没有中断入口函数,真的要疯了

跪求解答。好人一生平安!

smgyang 发表于 2020-6-7 17:25:09

有没有大神给个回复啊:)

子曰好人 发表于 2020-6-8 09:07:24

第一:你用的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 ENDTIMx_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 ENDTIMx_UP_M1_IRQn 1 */
}
第二:如果没有DMA入口函数,可能是在程序中等dma转换完成直接读取DMA传输到的地址

smgyang 发表于 2020-6-8 10:39:26

子曰好人 发表于 2020-6-8 09:07
第一:你用的LL库,我没用过,我这边生成的是这样的,库版本是5.32




你的代码NVIC中没有配置和使能高级定时器的update中断,也能进那个中断服务函数吗?
页: [1]
查看完整版本: 关于FOC库的中断配置,望大神指条明路