classroom 发表于 2024-8-27 10:40

STM32F103 通过HAL库配置ADC DMA传输,出现hardfault

STM32F103 通过HAL库配置ADC DMA传输,出现hardfault

duo点 发表于 2024-8-27 13:28

时钟配置错误或未启用

两只袜子 发表于 2024-8-27 13:29

ADC和DMA的初始化配置有误吧

cr315 发表于 2024-8-27 13:30

堆栈溢出

elephant00 发表于 2024-8-27 13:31

检查HAL库函数的使用是否正确,包括参数和返回值。

onlycook 发表于 2024-8-27 13:31

硬件故障或短路?

七毛钱 发表于 2024-8-27 13:32

更新HAL库和固件

jcky001 发表于 2024-8-27 14:00

检查DMA的配置是否会导致内存越界访问。

烟雨蒙蒙520 发表于 2024-8-28 12:17

缓冲区必须按照数据总线的对齐要求对齐。通常是 4 字节对齐。

szt1993 发表于 2024-8-28 16:19

肯定是配置错误

azhangxingweia 发表于 2024-8-29 09:06

DMA配置错误,导致地址越界错误。我以前遇到过。

公羊子丹 发表于 2025-3-16 07:50

这个问题我也遇到过,通常是DMA地址设置错误导致的,你检查过DMA的目标地址是否正确吗?

周半梅 发表于 2025-3-16 07:51

STM32F1的DMA对数据对齐要求比较严格,看看你的ADC缓冲区是不是对齐了?

帛灿灿 发表于 2025-3-16 07:54

确保你的DMA和ADC时钟已经打开,缺少 __HAL_RCC_DMA1_CLK_ENABLE(); 可能会导致hardfault。

童雨竹 发表于 2025-3-16 07:55

你用的是什么模式?单次转换还是循环模式?有时候配置不同,DMA的设置也要调整。

万图 发表于 2025-3-16 07:56

试试看在 HAL_ADC_Start_DMA() 之前手动清除一下 DMA_FLAG_TC,有时候DMA状态没清理干净会出问题。

Wordsworth 发表于 2025-3-16 07:57

如果是多通道ADC,你的数组大小是否匹配转换的通道数量?数组大小不对可能会导致访问越界。

Bblythe 发表于 2025-3-16 07:58

Debug模式下可以查看 HardFault 发生时的 CFSR 寄存器,看看是访问无效地址还是其他错误。

Pulitzer 发表于 2025-3-16 07:59

STM32F103的DMA使用时最好关闭 Data Cache,否则可能会导致数据不同步甚至HardFault。

Uriah 发表于 2025-3-16 08:00

你用的HAL库版本是多少?有些旧版本的HAL库在DMA部分可能存在bug,试试看更新到最新版本。
页: [1] 2
查看完整版本: STM32F103 通过HAL库配置ADC DMA传输,出现hardfault