调了一个月,快疯了 系统配置: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中断而没有中断入口函数,真的要疯了 跪求解答。好人一生平安! |
有没有大神给个回复啊
第一:你用的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传输到的地址
第一:你用的LL库,我没用过,我这边生成的是这样的,库版本是5.32
你的代码NVIC中没有配置和使能高级定时器的update中断,也能进那个中断服务函数吗?