你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

H743显示波形,dma只能传输一位数据!!!!

[复制链接]
702U7 提问时间:2022-1-5 15:32 / 未解决

请问大家,我是做一个波形显示,H7的板子,在正点的GRAPH那个例程中加入adc和dma以后,当用1个ADC多通道的时候调用函数HAL_ADC_Start_DMA(),最后一个参数只能是1,也就是只传输一个数据,能正常显示波形,程序运行正常,但是我是6个通道,需要传输6个数据,不管是2 3 4 5 6,只要不是1,屏幕emwin界面就会卡住;同样当使用ADC双重模式的时候,调用函数HAL_ADCEx_MultiModeStart_DMA()打开adc和dma,也是如上的问题,只能传输1个,其它就会卡死在屏幕 请求大家帮忙指点一下!

十分感谢!!!

收藏 评论4 发布时间:2022-1-5 15:32

举报

4个回答
STMCU-管管 回答时间:2022-1-5 16:28:25
是不是你没清除中断标志,一直在调用中断。
702U7 回答时间:2022-1-5 16:55:44

STMCU-管管 发表于 2022-1-5 16:28
是不是你没清除中断标志,一直在调用中断。

void DMA1_Stream0_IRQHandler(void) { static int count=0;

if( __HAL_DMA_GET_FLAG(&DMA1_Stream0_Handler,DMA_FLAG_TCIF0_4)!=RESET) { SCB_InvalidateDCache();

    if((oscilldev.buffer!=NULL)&&(oscilldev.adflag==0)) //buffer为空,并且允许进行AD采集
    {
                Acceleration_Buf[1] = ADC_DMA_Buf[0];
                Acceleration_Buf[0] = ADC_DMA_Buf[0] >> 16;   

              Acceleration[0] = (float)Acceleration_Buf[0] * 3300 / 65536;
                oscilldev.buffer[count]=(int)Acceleration[0];
                count++;

  if(count>oscilldev.dataxsize)//一次数据采集完成
  {
                    count=0;
                    oscilldev.adflag=1;//标记AD采集完成
  }         
    }                   
  __HAL_DMA_CLEAR_FLAG(&DMA1_Stream0_Handler,DMA_FLAG_TCIF0_4);

} }

清除了

702U7 回答时间:2022-1-6 20:13:54

111111111111111111111

702U7 回答时间:2022-1-6 20:14:17

11111111

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版