上一主题下一主题
关键字
主题 : stm32 I2C_CheckEvent()函数。
级别: 北风工程师


UID: 474139
精华: 0
发帖: 548
威望: 1152 点
学点: 750 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-13
最后登录: 2014-08-25
楼主  发表于: 2014-07-17 17:43||

stm32 I2C_CheckEvent()函数。

void I2C_EE_PageWrite(u8* pBuffer, u8 WriteAddr, u8 NumByteToWrite) <tZtt9j_  
{    while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008 k1g-%DB  
   /* Send START condition */ !jB}}&Ii  
  I2C_GenerateSTART(I2C1, ENABLE); E83$(6z  
   /* Test on EV5 and clear it */ U9PI#TX &O  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); %$b}o7U"s  
  /* Send EEPROM address for write */ =os!^{p7>  
  I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter); D,p 2MBr  
   Ux^ue9  
  /* Test on EV6 and clear it */ pheu4 8/f  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));    *uK!w(;2  
-0 ;{  
  /* Send the EEPROM's internal address to write to */     lBG=jOS  
  I2C_SendData(I2C1, WriteAddr);   h*<`ct xL  
N@Ap|`Ei  
  /* Test on EV8 and clear it */ U3]/ NV*   
  while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); l_04b];  
\cX9!lHl  
  /* While there is data to be written */ &'/PEOu&}G  
  while(NumByteToWrite--)   ]o'dr r  
  { /'VuMMJ2  
    /* Send the current byte */ KDP& I J  
    I2C_SendData(I2C1, *pBuffer); h0 %M+g  
A$\/D2S7!  
    /* Point to the next byte to be written */ T$FKn  
    pBuffer++; ]{| l4e4P  
   _E0yzkS  
    /* Test on EV8 and clear it */ $b^niL  
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); =*-a c  
  } 9"D t3>Z  
v'`qn  
  /* Send STOP condition */ $*XTX?,'  
  I2C_GenerateSTOP(I2C1, ENABLE); :SMf (E 5  
  } N7 _rVcDe  
ZX+0{E8a  
,5~C($-t  
程序在执行到 \q!TI x  
/* Test on EV5 and clear it */ )`|`PB  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); h{~GzrL*  
这里就执行不下去了。 Q0 ezeo  
STM32F10X。IIC外接铁电的。 z+0#H39&  
我查了下网上很多人也是死在这。不知道是为什么。求指教
此帖悬赏结束
最佳答案: 1 学点
最佳答案获得者: 慕容紫英
级别: 北风资深工程师


UID: 472421
精华: 0
发帖: 1405
威望: 1631 点
学点: 64 点
贡献: 23 点
好评: 0 点
学币: 95 个
注册时间: 2014-07-09
最后登录: 2018-07-09
沙发(1楼)  发表于: 2014-07-17 17:44||

/* Test on EV5 and clear it */ 5|0}   
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); s'Wu \r'  
这个解决了,现在停在 #cy;((zuB  
/* Test on EV6 and clear it */ M=Cl|  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
最佳答案奖励: (+1) 学点
级别: 北风工程师

UID: 474143
精华: 0
发帖: 522
威望: 1131 点
学点: 887 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-13
最后登录: 2014-08-27
板凳(2楼)  发表于: 2014-07-17 17:43||

有没有上拉电阻
级别: 北风助理工程师

UID: 474136
精华: 0
发帖: 418
威望: 898 点
学点: 715 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-13
最后登录: 2014-12-05
地板(3楼)  发表于: 2014-07-17 17:44||

你这个应该函数应该是探测有没产生中断吧 这个明显是寻址不到 g$#A'Du  
你的从设备是什么 地址是0x50?你改0xa0试试。。 3%(r,AD  
你可以把状态寄存器的值读出来看看 是不是no ack
级别: 北风高级技术员

UID: 625983
精华: 0
发帖: 167
威望: 183 点
学点: 178 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2016-02-17
最后登录: 2016-06-13
地下室(4楼)  发表于: 2016-05-04 03:05||

Countdown to the college entrance examination to overcome their own

本部分内容设定了隐藏,需要回复后才能看到