OpenEdv-开源电子网

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

STM32 I2C硬件中断 无DMA 读写EEPROM可用

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
发表于 2014-11-11 14:05:27 | 显示全部楼层 |阅读模式

void c02_write_data(void)
{
 while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
 
 WRITE_FLAG=1;
 I2C_GenerateSTART(I2C1, ENABLE);
 
// while(i2c_plan!=20);
 //while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
 //delay_ms(5);

}

void c02_read_data()
{
 while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
 WRITE_FLAG=0;
 STEP1=1;
 STEP2=1;
 I2C_GenerateSTART(I2C1, ENABLE);
}

 

/*********************************************zhongduan**********************/
void I2C1_EV_IRQHandler(void)
{
  uint32_t lastevent=  I2C_GetLastEvent(I2C1);
  switch (lastevent)
 {
  case I2C_EVENT_MASTER_MODE_SELECT://EV5
    if(WRITE_FLAG==1)
    {
      I2C_Send7bitAddress(I2C1, 0X50, I2C_Direction_Transmitter);
     if((STEP1==1)&&(STEP2==1))
     {
       STEP1=0;
     }
    }
    else
    {
      I2C_Send7bitAddress(I2C1, 0X50, I2C_Direction_Receiver);
      STEP2=0;
    }     
  break;
  case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED://EV6fa
   if(WRITE_FLAG==1)
     I2C_SendData(I2C1, WRITE_OFFSET);
   else
     I2C_SendData(I2C1, READ_OFFSET);
  break;
  case I2C_EVENT_MASTER_BYTE_TRANSMITTED://EV8
   if(WRITE_FLAG==1)
   {
    I2C_SendData(I2C1, I2c_Buf_Write[WRITE_OFFSET]);
     WRITE_OFFSET++;
     if(WRITE_OFFSET!=0xff)
     I2C_GenerateSTART(I2C1, ENABLE);
    else
     I2C_GenerateSTOP(I2C1, ENABLE);
   }
   else
   {
     I2C_GenerateSTOP(I2C1, ENABLE);
     I2C_GenerateSTART(I2C1, ENABLE);
   }
  break;
  case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED://EV6SHOU
  break;
  case I2C_EVENT_MASTER_BYTE_RECEIVED://ev7
   I2c_Buf_Read[READ_OFFSET] = I2C_ReceiveData(I2C1);
  if(READ_OFFSET!=0xff)
     I2C_GenerateSTART(I2C1, ENABLE);
  else
     I2C_GenerateSTOP(I2C1, ENABLE);
  break;
}
}
有参考http://www.openedv.com/posts/list/0/18461.htm#239845
http://www.amobbs.com/forum.php?mod=viewthread&tid=4526021

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-11 15:47:06 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2014-11-11 15:57:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我自己写的,求表扬。。
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2014-11-11 17:47:20 | 显示全部楼层
@正点原子原子哥,I2C_ITConfig(I2C1,I2C_IT_EVT,ENABLE);的作用是什么?看着是事件中断使能。
我这个程序没有加I2C_ITConfig(I2C1,I2C_IT_EVT,ENABLE);也读写了。
并且,我看阿莫那个帖子关关开开的。貌似又是有用的。


回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2014-11-11 17:48:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,I2C_ITConfig(I2C1,I2C_IT_EVT,ENABLE);的作用是什么?看着是事件中断使能。
我这个程序没有加I2C_ITConfig(I2C1,I2C_IT_EVT,ENABLE);也读写了。
并且,我看阿莫那个帖子关关开开的。貌似又是有用
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-11 21:14:56 | 显示全部楼层
回复【5楼】墨染卿卿:
---------------------------------
我不用硬件IIC了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 11:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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