野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19070|回复: 4

请问下STM32F103的 I2C怎么配置成 DMA模式?

[复制链接]
发表于 2013-8-18 09:24:22 | 显示全部楼层 |阅读模式
ADC配置 DMA可以配置成连续读取模式,而不用一直控制读,使用 MMA7455的时候需要用到 I2C,如果仅仅是配置成 DMA时读写数据是没问题的,但是 I2C在发送数据结束以后需要有个应答信号而且每次对外设发送的数据都不一样,不知道该如何来解决了,请问哪位有好点的方法或者例程能够提供参考下,谢谢。
回复

使用道具 举报

发表于 2013-8-18 13:09:31 | 显示全部楼层
每次发的数据不一样的话,你可以把你要发的数据更新到DMA的源地址变量里。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-18 14:51:27 | 显示全部楼层
flyleaf 发表于 2013-8-18 13:09
每次发的数据不一样的话,你可以把你要发的数据更新到DMA的源地址变量里。

请问下,为什么用 I2C 的时候会经常在循环里死掉,一般都是在这段代码里死掉,以前是检查EV5,EV6的时候死掉,现在都是在第一局就死掉了
[code=c]static void I2C_MMA_ByteWrite(u8 pBuffer, u8 WriteAddr)
{
  /*wait until I2C bus is not busy*/
  while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
   
        /* Send START condition */
  I2C_GenerateSTART(I2C1, ENABLE);
  
    /* Test on EV5 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
  
   /* Send MMA address for write */
  I2C_Send7bitAddress(I2C1, MMA_ADRESS, I2C_Direction_Transmitter);
   
        /* Test on EV6 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
   
    /* Send the MMA's Register address to write to */   
  I2C_SendData(I2C1, WriteAddr);
  
  /* Test on EARM and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
   
    /* Send the byte to be written */
  I2C_SendData(I2C1, pBuffer);
  
   /* Test on EARM and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
   
   /* Send STOP condition */
  I2C_GenerateSTOP(I2C1, ENABLE);

}[/code]
回复 支持 反对

使用道具 举报

发表于 2013-8-18 22:07:26 | 显示全部楼层
似水流年、 发表于 2013-8-18 14:51
请问下,为什么用 I2C 的时候会经常在循环里死掉,一般都是在这段代码里死掉,以前是检查EV5,EV6的时候死 ...

据说STM32的硬件I2C问题多多,所以很多人直接用GPIO模拟I2C(像51单片机的方法),但我们平时没用DMA模式的时候没觉得有什么问题,可能用DMA又容易出错一点吧。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-21 10:59:45 | 显示全部楼层
flyleaf 发表于 2013-8-18 22:07
据说STM32的硬件I2C问题多多,所以很多人直接用GPIO模拟I2C(像51单片机的方法),但我们平时没用DMA模式的 ...

嗯,使用 IO口模拟 I2C的时候需要上拉吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-2 14:45 , Processed in 0.062577 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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