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

为什么DMA半传输中断和完全传输中断不能独立关闭?

[复制链接]
xiewenliang 提问时间:2023-11-28 13:38 / 未解决
[#STM32#](https://bbs.21ic.com/ictopic-4.html) [#DMA#](https://bbs.21ic.com/ictopic-4.html) 芯片型号:STM32G473RET6,开发环境:STM32CubeMX+Keil(LL库)。
使用DMA1通道1,在半传输中断和完全传输中断里,拷贝ADC采集的数据。
发现半传输中断和完全传输中断不能独立使用。
具体体现在:
**1、在DMA1初始化时,打开了半传输中断,关闭完全传输中断,照样能触发完全传输中断**
LL_DMA_EnableIT_HT(DMA1,LL_DMA_CHANNEL_1);//打开DMA1半传输中断
LL_DMA_DisableIT_TC(DMA1,LL_DMA_CHANNEL_1);//关闭DMA1完全传输中断
**2、在DMA1初始化时,关闭了半传输中断,打开完全传输中断,照样能触发半传输中断**
LL_DMA_EnableIT_TC(DMA1,LL_DMA_CHANNEL_1);//打开DMA1完全传输中断
LL_DMA_DisableIT_HC(DMA1,LL_DMA_CHANNEL_1);//关闭DMA1半传输中断

这个问题困扰了我很久,麻烦各位大神指点迷津。
收藏 评论1 发布时间:2023-11-28 13:38

举报

1个回答
xmshao 回答时间:2023-11-30 11:05:48

你这个问题估计你代码方面的问题。

提醒你一下,你如果想修改DMA的传输中断使能位,得先保证相应DMA通道的使能位为0。

使用LL库的话,可以调用LL_DMA_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel);来将相应DMA通道控制寄存器里的EN清零。当你修改完TC/HT使能位后

再调用LL_DMA_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel); 来恢复DMA传输功能。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版