• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32CubeMX问题

黄莨元 2017-05-22 浏览量:3904
这个函数有什么问题啊,我想ADC采集和DMA传输600个数据,触发转换是用PWM波的,但是函数卡在了判断传输是否完成那个while循环哪里,如下图,谢谢帮回答
 void ADC_Get_Value(void)
{		
		HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value,600);
		HAL_TIM_PWM_Start_IT(&htim2,TIM_CHANNEL_2);               //¿ªÊ¼´¥·¢ADת»»
		while(!__HAL_DMA_GET_FLAG(&hdma_adc1,DMA_FLAG_TCIF0_4))//µÈ´ý´«ÊäÍê³É
		{
				printf("%d\r\n",j++);
				HAL_Delay(100);
		}
		__HAL_DMA_CLEAR_FLAG(&hdma_adc1,DMA_FLAG_TCIF0_4);        //Çå³ýÍê³É±êÖ¾
		if(__HAL_DMA_GET_FLAG(&hdma_adc1,DMA_FLAG_TEIF0_4))       //Åжϴ«ÊäÊÇ·ñ³ö´í
		{
			__HAL_DMA_CLEAR_FLAG(&hdma_adc1,DMA_FLAG_TEIF0_4);      //Çå³ý±êÖ¾
			ADC_Get_Value();                                        //ÖØвɼ¯
		}
		HAL_TIM_PWM_Stop_IT(&htim2,TIM_CHANNEL_2);          //Í£Ö¹´¥·¢
		for(i=0;i<600;i++)
		{
				printf("%d\r\n",ADC_Value[i]);

		}
}


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 不是很完整,不過會卡住多半是中斷問題,我看您的TIM2配置成0,TIM3配置成2(這個應該沒用到?),DMA配置成1,

    我覺得DMA應該要是0才對,TIM2(3?)設1才對

    以上

    • 发布于 2017-05-23
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:6
  • 卡在这里,说明传输没有完成。
    要不是ADC不对,要不是PWM不对,通过以下步骤确定问题所在。
    一、确定不用DMA,软件触发,单次转换是否正确。
    二、确定使用DMA,软件触发,单次转换是不是正确。
    三、使用PWM,不使用DMA
    四、使用PWM、使用DMA
    • 发布于2017-05-22
    • 举报
    • 评论 0
    • 2
    • 0

  • DMA配置不正确,要不你把cubemx的配置贴出来看一下
    • 发布于2017-05-22
    • 举报
    • 评论 0
    • 1
    • 0

  • DMA配置不正确导致的中断问题
    • 发布于2017-05-24
    • 举报
    • 评论 0
    • 1
    • 0

  • 一般HAL库函数卡死都是没做好配置工作,你回去看下前面的配置有没有问题?一般而言ADC采集不需要用到DMA,太浪费单片机资源了,把DMA配置的语句全部注释掉看看效果?并且某些外设没配置好还用DMA的话是会卡死的,比较典型的例子就是SPI DMA。

             突然又想到一个可能性,楼主试试把while循环里面的HAL_Delay()函数用粗延时函数代替试试?

    • 发布于2017-05-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 检查一下DMA的条件是否满足~ 
    • 发布于2017-05-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32CubeMX问题