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

stm32CubeMX+ADC+DMA的问题

[复制链接]
andrewsss 提问时间:2018-11-1 17:41 /
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2018-11-1 17:41
18个回答
andrewsss 回答时间:2018-11-3 14:38:25
今天又实验了几遍,发现使用circular模式时,如果main中阻塞在HAL_ADC_Start_DMA处(程序一直进入DMA1_Channel1_IRQHandler,导致后面的程序无法执行),可能还与ADC的采样周期(即Sampling Times)的值有关,原来我用的1.5,会阻塞,一直进入DMA中断(中断添加打印语句会一直打印);后来改成239.5,就不会阻塞,程序能正常执行下去,这个时候我想看它这时候有没有进入DMA中断,就在DMA中断中添加了一条打印语句,结果程序就一直在打印该语句,不能正常执行后面的程序了;我不懂根本问题在那里?
zxk126 回答时间:2018-11-8 17:39:51
andrewsss 发表于 2018-11-3 14:38
今天又实验了几遍,发现使用circular模式时,如果main中阻塞在HAL_ADC_Start_DMA处(程序一直进入DMA1_Chan ...

用中断时你一定要注意中断运行时间和你的中断时间间隔,如果每次中断之间的时间间隔小于一次进入中断运行的时间,那肯定会一直进中断,因为中断还没出来呢,下一次中断就来了,所以会一直进中断,其他程序就执行不了了。
另外,你说的加入打印命令,打印是很耗时间的,你的AD转换周期如果设置太小的话,不够一次打印时间,那肯定会一直反复进中断。打印子程序没用过,不知道是什么方式实现的,如果是中断方式的话,那么他执行打印的时候肯定会等待打印完成,这个时候如果发送中断优先级低于ADC优先级的话,是不会执行发送中断的,也就永远发送不完,也退不出ADC中断。这只是一种猜测,仅供参考。
中断程序一定简单,运行时间短,进去就出来,千万不能加太耗时的等待等语句。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

andrewsss 回答时间:2018-11-9 10:21:01
zhengxk-344971 发表于 2018-11-8 17:39
用中断时你一定要注意中断运行时间和你的中断时间间隔,如果每次中断之间的时间间隔小于一次进入中断运行 ...

了解了,但是我还有个问题,前面我实验时它一直进DMA的中断,然后我把DMA中断服务函数注释了,结果程序还是好像进中断了,阻塞在那里不执行后面的代码了;再然后我按二楼说的把ADC DMA中断的NVIC使能代码注释掉,程序就能继续执行了;这是为什么呢,我都没有中断服务函数了,为什么还会进中断,还必须把NVIC使能的代码注释掉才行?
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版