[STM32F1] stm32cubeide下,ADC配置DMA会出错

[复制链接]
1891|13
 楼主| djz1992 发表于 2020-5-25 15:49 | 显示全部楼层 |阅读模式
ADC是定时器触发的,用DMA传输,开启DMA,设置循环模式,word搬运。
843715ecb776c66baf.png 873545ecb7792ad582.png

在调试过程中会进入HardFault_Handler,单步调试发现问题在 HAL_ADC_MspInit(hadc);中
继续深入发现是tmp = hdma->Instance->CCR;这一句引起的错误。此时CCR是0
16465ecb780b2f230.png
如果不开起ADC的DMA就不会有这个错误。
很奇怪,都是stm32cubeide自动生成的代码,为什么呢?以前用f0单片机如此配置也没出错。
cry1109 发表于 2020-5-25 20:15 | 显示全部楼层
本帖最后由 cry1109 于 2020-5-25 20:16 编辑

屏蔽掉用于搬运ADC的DMA通道的中断就好了。 875135ecbb70c075c7.png
香水城 发表于 2020-5-26 07:07 | 显示全部楼层
注意下地址访问越界或地址对齐方面的问题。
 楼主| djz1992 发表于 2020-5-26 08:49 | 显示全部楼层
cry1109 发表于 2020-5-25 20:15
屏蔽掉用于搬运ADC的DMA通道的中断就好了。

你也遇到这个问题了吗?cube里配置,这个dma中断还是默认选择的,不能取消。
那屏蔽掉这个中断,adc的dma还能正常搬运么?
 楼主| djz1992 发表于 2020-5-26 08:53 | 显示全部楼层
香水城 发表于 2020-5-26 07:07
注意下地址访问越界或地址对齐方面的问题。

好的大佬。
请问stm32cubeide调试,不支持全局变量的动态自动刷新吗?只能暂停下来后看
cry1109 发表于 2020-5-26 08:55 | 显示全部楼层
djz1992 发表于 2020-5-26 08:49
你也遇到这个问题了吗?cube里配置,这个dma中断还是默认选择的,不能取消。
那屏蔽掉这个中断,adc的dma ...

你可以试一下,我现在ADC开了两个通道,之前中断没屏蔽会卡死。
 楼主| djz1992 发表于 2020-5-26 09:13 | 显示全部楼层
cry1109 发表于 2020-5-26 08:55
你可以试一下,我现在ADC开了两个通道,之前中断没屏蔽会卡死。

okok
 楼主| djz1992 发表于 2020-5-26 09:30 | 显示全部楼层
cry1109 发表于 2020-5-26 08:55
你可以试一下,我现在ADC开了两个通道,之前中断没屏蔽会卡死。

我试了一下,屏蔽该中断没有用。而且我发现不是adc启用dma会出错,而且dma超过2路,就会出错。DMA1的通道1、4、5,随便取消一路,就没问题了。
好奇怪
香水城 发表于 2020-5-26 11:51 | 显示全部楼层
估计你程序逻辑上有问题。

你说用到DMA 1 4 5 三个通道,你ADC只需用到通道1,另外的两个通道是干什么的?

中断之间有无优先级抢占或互斥方面的问题,好好检查下。
 楼主| djz1992 发表于 2020-5-26 16:03 | 显示全部楼层
香水城 发表于 2020-5-26 11:51
估计你程序逻辑上有问题。

你说用到DMA 1 4 5 三个通道,你ADC只需用到通道1,另外的两个通道是干什么的? ...

都是stm32cubeide里配置的,通道4和5是串口的收发。
磨砂 发表于 2020-6-8 12:53 | 显示全部楼层
我也遇到这个问题了  后来没办法不用dma 了
晓伍 发表于 2020-6-8 12:54 | 显示全部楼层
最后找到是什么问题了吗 或者怎么解决的呢
八层楼 发表于 2020-6-8 12:54 | 显示全部楼层
请问什么叫word搬运啊
 楼主| djz1992 发表于 2020-6-10 14:06 | 显示全部楼层
磨砂 发表于 2020-6-8 12:53
我也遇到这个问题了  后来没办法不用dma 了

感觉是个bug
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部