选择ADC1和ADC2以同步方式采集数据2×4通道的数据,运行自动生成的代码,直接陷入错误捕获循环中。
★故障分析:
MX_ADC2_Init()函数有设置多通道代码如下
multimode.Mode = ADC_DUALMODE_REGSIMULT;
if (HAL_ADCEx_MultiModeConfigChannel(&hadc2, &multimode) != HAL_OK)
{
Error_Handler();
}
就是这个HAL_ADCEx_MultiModeConfigChannel()函数,它只能由主ADC调用,根本就不该出现在从ADC调用中,于是就陷入错误捕获函数Error_Handler()内部了。
★故障排除办法:删除该段代码。
★值得说明的是,这个错误在v1.4.0以前的版本就有,但到了v1.4.0就变成了致命错误,这说明:
1. ST公司具有法国奔放浪漫的基因,程序风格属于意识流;
2. ST的HAL库确实在进步,学会通过检验函数返回值拦截错误了;
3. 这个HAL库还有进步的巨大空间;
4. 用 /* USER CODE BEGIN 1 */ 和 /* USER CODE END 1 */ 限定用户的可编程区域真的很蛋疼。比如,想在所有头文件之前加个定义都没门儿,修改HAL库的错误也很麻烦,每次重新生成之后都要再改一遍。
|