STM32F103 通过HAL库配置ADC DMA传输,出现hardfault
STM32F103 通过HAL库配置ADC DMA传输,出现hardfault 时钟配置错误或未启用 ADC和DMA的初始化配置有误吧 堆栈溢出 检查HAL库函数的使用是否正确,包括参数和返回值。 硬件故障或短路? 更新HAL库和固件 检查DMA的配置是否会导致内存越界访问。 缓冲区必须按照数据总线的对齐要求对齐。通常是 4 字节对齐。 肯定是配置错误 DMA配置错误,导致地址越界错误。我以前遇到过。 这个问题我也遇到过,通常是DMA地址设置错误导致的,你检查过DMA的目标地址是否正确吗? STM32F1的DMA对数据对齐要求比较严格,看看你的ADC缓冲区是不是对齐了? 确保你的DMA和ADC时钟已经打开,缺少 __HAL_RCC_DMA1_CLK_ENABLE(); 可能会导致hardfault。 你用的是什么模式?单次转换还是循环模式?有时候配置不同,DMA的设置也要调整。 试试看在 HAL_ADC_Start_DMA() 之前手动清除一下 DMA_FLAG_TC,有时候DMA状态没清理干净会出问题。 如果是多通道ADC,你的数组大小是否匹配转换的通道数量?数组大小不对可能会导致访问越界。 Debug模式下可以查看 HardFault 发生时的 CFSR 寄存器,看看是访问无效地址还是其他错误。 STM32F103的DMA使用时最好关闭 Data Cache,否则可能会导致数据不同步甚至HardFault。 你用的HAL库版本是多少?有些旧版本的HAL库在DMA部分可能存在bug,试试看更新到最新版本。
页:
[1]
2