OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4240|回复: 2

I2C DMA连续两条指令只执行第一条?

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-5-25
在线时间
6 小时
发表于 2021-7-7 19:03:11 | 显示全部楼层 |阅读模式
1金钱
代码如下,我用逻辑分析仪抓数据,发现加粗的那条始终没有发出来。
这是因为DMA被占用就被屏蔽了?DMA不是跟中断一样执行完就执行被挂起的吗?
如果直接被屏蔽,那用TIM定时发送I2C指令,在程序中再执行另一I2C DMA指令不是很容易丢失指令?

while (1)
  {
                HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
                HAL_Delay(1000);
                HAL_I2C_Mem_Write_DMA(&hi2c1, AF_ADDRESS, 0x00, I2C_MEMADD_SIZE_8BIT, X_Target, 2);

                HAL_I2C_Mem_Read_DMA(&hi2c1, AF_ADDRESS, 0x03, I2C_MEMADD_SIZE_8BIT, X_Hall, 2);
               
                HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
                HAL_Delay(1000);       
                HAL_I2C_Mem_Write_DMA(&hi2c1, AF_ADDRESS, 0x00, I2C_MEMADD_SIZE_8BIT, Y_Target, 2);

  }

最佳答案

查看完整内容[请看2#楼]

我没用过hal库,这样用感觉不合理吧,至少写完读之前应该看一下DMA是不是空闲了,按照IIC标准库的写法,函数进去后发送IIC总线busy的话会直接return的,你可以看看HAL_I2C_Mem_Read_DMA是不是有返回值
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4894
金钱
4894
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-7-7 19:03:12 | 显示全部楼层
我没用过hal库,这样用感觉不合理吧,至少写完读之前应该看一下DMA是不是空闲了,按照IIC标准库的写法,函数进去后发送IIC总线busy的话会直接return的,你可以看看HAL_I2C_Mem_Read_DMA是不是有返回值
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1430
金钱
1430
注册时间
2020-5-12
在线时间
393 小时
发表于 2021-7-9 08:27:26 | 显示全部楼层
我觉得不是dma的问题,是IIC的问题。个人建议先单步调试下是不是读取的时候报错退出了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 15:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表