在 STM32 CubeMX 生成的代码中,ADC_IRQn 在用户代码部分注释中指的是什么?
In STM32 CubeMX generated code what does ADC_IRQn refer to in the user code section comments?
在 Cube MX 生成的 [devicename]_it.c 文件中,每个 IRQ 处理程序中都有多个用户代码部分,例如下面的 ADC_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_ADC_IRQHandler()
的调用放在两个用户代码部分之间。你可以在 HAL 之前和之后都有用户代码。
但是,我发现在 IRQHandler
函数中同时通过 HAL 代码和用户代码处理中断不是一个好主意,因为这通常意味着读取寄存器两次,这可能会产生一些不需要的副作用.如果调用了HAL处理程序,那么最好将用户代码放在适当的回调函数中,当HAL找到中断原因时调用。
在 Cube MX 生成的 [devicename]_it.c 文件中,每个 IRQ 处理程序中都有多个用户代码部分,例如下面的 ADC_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_ADC_IRQHandler()
的调用放在两个用户代码部分之间。你可以在 HAL 之前和之后都有用户代码。
但是,我发现在 IRQHandler
函数中同时通过 HAL 代码和用户代码处理中断不是一个好主意,因为这通常意味着读取寄存器两次,这可能会产生一些不需要的副作用.如果调用了HAL处理程序,那么最好将用户代码放在适当的回调函数中,当HAL找到中断原因时调用。