在STM32 CubeMX生成的代码中,ADC_IRQn在用户代码部分注释中指的是什么?

在STM32 CubeMX生成的代码中,ADC_IRQn在用户代码部分注释中指的是什么?,stm32,stm32cubemx,Stm32,Stm32cubemx,在由Cube MX生成的[devicename]\u it.c文件中,每个IRQ处理程序中都有多个用户代码部分,如下面的ADC\u IRQHandler void ADC_IRQHandler(void) { /* USER CODE BEGIN ADC_IRQn 0 */ /* USER CODE END ADC_IRQn 0 */ /* USER CODE BEGIN ADC_IRQn 1 */ /* USER CODE END ADC_IRQn 1 */ }

在由Cube MX生成的[devicename]\u it.c文件中,每个IRQ处理程序中都有多个用户代码部分,如下面的ADC\u IRQHandler

void ADC_IRQHandler(void)
{
   /* USER CODE BEGIN ADC_IRQn 0 */

   /* USER CODE END ADC_IRQn 0 */

   /* USER CODE BEGIN ADC_IRQn 1 */

   /* USER CODE END ADC_IRQn 1 */
}

多个部分的意图是什么?

如果您勾选CubeMX中的选项以生成对HAL ADC处理程序的调用,并重新生成代码,它会将对HAL\u ADC\u IRQHandler()的调用置于两个用户代码部分之间。你可以在HAL之前和之后都有用户代码


然而,我发现在
IRQHandler
函数中通过HAL代码和用户代码处理中断是一个糟糕的主意,因为这通常意味着读取寄存器两次,这可能会产生一些不必要的副作用。如果调用了HAL处理程序,那么最好将用户代码放入相应的回调函数中,当HAL找到中断原因时调用该函数。

如果勾选CubeMX中的选项以生成对HAL ADC处理程序的调用,并重新生成代码,它将调用
HAL\u ADC\u IRQHandler()
在两个用户代码部分之间。你可以在HAL之前和之后都有用户代码

然而,我发现在
IRQHandler
函数中通过HAL代码和用户代码处理中断是一个糟糕的主意,因为这通常意味着读取寄存器两次,这可能会产生一些不必要的副作用。如果调用了HAL处理程序,那么最好将用户代码放入适当的回调函数中,当HAL找到中断的原因时,就会调用该回调函数