hal库配置玩adc和dma后,在main里面调用HAL_ADC_Start_DMA后卡死。经多次调试解决了问题,但原因不详。
现贴出关键部分代码(运行后卡死):
uint16_t temp_ADC1_Value[2]={0}; //暂时存储DMA从DC通道转移的数值
float ADC2_Value[2]; //换算后的电压值
int main(void)
{
...
MX_DMA_Init();
MX_ADC1_Init();
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)temp_ADC1_Value, 4);
while(1)
{
ADC2_Value[0]= (float)(temp_ADC1_Value[0]) / 4096 * 5.0;
ADC2_Value[1]= (float)(temp_ADC1_Value[1]) / 4096 * 5.0;
}
}
运行上面代码后会卡死在HAL_ADC_Start_DMA这个函数。
可以运行后的代码:
uint16_t temp_ADC1_Value[2]={0}; //暂时存储DMA从DC通道转移的数值
float ADC2_Value[4]; //换算后的电压值
int main(void)
{
...
MX_DMA_Init();
MX_ADC1_Init();
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)temp_ADC1_Value, 4);
while(1)
{
...
ADC2_Value[0]= (float)(temp_ADC1_Value[0]) / 4096 * 5.0;
ADC2_Value[1]= (float)(temp_ADC1_Value[1]) / 4096 * 5.0;
...
}
}
**对比两处 发现只是改变了ADC2_Value的数组大小。
然后我以为不是卡在HAL_ADC_Start_DMA这个函数,而是ADC2_Value的数组赋值,但我注释后程序还是卡死。
改成以下代码仍旧卡死。**
uint16_t temp_ADC1_Value[2]={0}; //暂时存储DMA从DC通道转移的数值
float ADC2_Value[2]; //换算后的电压值
int main(void)
{
...
MX_DMA_Init();
MX_ADC1_Init();
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)temp_ADC1_Value, 2);
while(1)
{
...
ADC2_Value[0]= (float)(temp_ADC1_Value[0]) / 4096 * 5.0;
ADC2_Value[1]= (float)(temp_ADC1_Value[1]) / 4096 * 5.0;
...
}
}
问题现在是解决了,但原因至今没弄明白…希望评论区有大佬能分析一下!