2301_76839845 2024-05-23 13:36 采纳率: 0%
浏览 30

stm32H7+DMA传输+LWIP增大传输速率后,进入HardFault_Handler

以前是STM32H723+ADC+DMA+LWIP连不上网络,用下面代码后可以连接网络发送数据,但是速率不够。加大 MEM_SIZE后出现MEMP_int进入HardFault_Handler。


void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    
SCB_InvalidateDCache_by_Addr((uint32_t *) &AD_value[0], 96);
    
            for(TempDD=0;TempDD<96;TempDD++)
        {
    AD_value[TempDD]=HAL_ADC_GetValue(&hadc1);
 Temp_ADC[TempDD]=AD_value[TempDD];
        }
  /* Invalidate Data Cache to get the updated content of the SRAM on the first half of the ADC converted data buffer: 32 bytes */ 

            for(Temp3=0;Temp3<16;Temp3++)
    {
    AD_tr[0] +=Temp_ADC[Temp3*6+0];
    AD_tr[1] +=Temp_ADC[Temp3*6+1];
    AD_tr[2] +=Temp_ADC[Temp3*6+2];
    AD_tr[3] +=Temp_ADC[Temp3*6+3];
    AD_tr[4] +=Temp_ADC[Temp3*6+4];    
    AD_tr[5] +=Temp_ADC[Temp3*6+5];//6AD值
}
        
        
}
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-23 13:36
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】:您的目的是解决在使用STM32H7系列微控制器进行ADC数据采集,通过DMA传输数据,结合LWIP协议栈进行网络通信时,提高数据传输速率后,程序运行进入HardFault_Handler异常处理函数的问题。

    【问题出现原因】:

    1. 增大MEM_SIZE后出现MEMP_int进入HardFault_Handler,这可能意味着内存分配请求超过了系统可分配的内存大小。
    2. 在ADC转换完成回调函数中,连续调用HAL_ADC_GetValue()可能导致DMA传输和ADC读取之间的竞争条件,影响数据的准确性和DMA的效率。
    3. 缓存操作可能存在问题,比如在修改数据后没有正确地使缓存失效或刷新,这可能导致数据不一致。

    【问题解决方案】:

    1. 检查MEMP_int的定义和使用,确保它没有超出LWIP协议栈的内存管理限制。
    2. 优化ADC和DMA的数据读取逻辑,避免在中断服务例程中进行大量的数据处理,这可能会影响系统的实时性能。
    3. 确保在修改数据后正确地进行缓存操作,比如使用SCB_InvalidateDCache_by_Addr()和SCB_CleanDCache_by_Addr()等函数。

    【提供代码】: 由于无法提供完整的代码,以下是一些建议的修改点:

    • 减少在中断服务例程中的数据处理量,考虑使用DMA传输完成后的回调函数或任务调度来处理数据。
    • 确保在修改数据后,使用SCB_CleanInvalidateDCache_by_Addr()代替SCB_InvalidateDCache_by_Addr(),以确保缓存的数据是最新的。
    • 检查LWIP的内存配置,确保MEMP_int的大小适合您的应用需求,并且没有超出内存限制。

    【代码运行方式】:

    • 需要在STM32H7的开发环境中编译和下载到STM32H7微控制器上运行。
    • 确保STM32CubeMX配置正确,包括ADC、DMA和LWIP协议栈的配置。
    • 使用调试工具来跟踪程序的执行和内存使用情况。

    【代码预期运行结果】:

    • 程序能够稳定运行,不会因为内存分配问题而进入HardFault_Handler。
    • ADC数据能够正确地通过DMA传输到内存,并通过网络发送。
    • 系统的实时性能得到保证,不会因为数据处理而产生延迟。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月23日

悬赏问题

  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼
  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!