上一主题下一主题
关键字
主题 : 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) 3*@5S]]  
{    while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008 OD_W8!-  
   /* Send START condition */ %D[0nt|X  
  I2C_GenerateSTART(I2C1, ENABLE); ^53r/V}%  
   /* Test on EV5 and clear it */ RH|XxH*  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); 1w&!H ]%{  
  /* Send EEPROM address for write */ gatB QwJb9  
  I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter); i _% Q`i  
   G2FXrkU  
  /* Test on EV6 and clear it */ jt.3 P  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));   G}G#i`6o  
@n": w2^B  
  /* Send the EEPROM's internal address to write to */     nxl[d\ap+n  
  I2C_SendData(I2C1, WriteAddr);   2TA*m{\Hr  
$-*!pRaVU  
  /* Test on EV8 and clear it */ Zp# v Hs  
  while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); w/K_B:s  
z'EajBB\f  
  /* While there is data to be written */ -Zz$~$  
  while(NumByteToWrite--)   ~((w?Yy"v  
  { aX}P|l  
    /* Send the current byte */ X7g1:L1Ys  
    I2C_SendData(I2C1, *pBuffer); ok4@N @  
X.e7A/ClEo  
    /* Point to the next byte to be written */ [`):s= FC  
    pBuffer++; w:<W.7y?0  
   $+I;oHWI  
    /* Test on EV8 and clear it */ &sL&\+=<(  
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); Aj4T"^fv  
  } \9g+^vQg  
v t9)pMs  
  /* Send STOP condition */  W0]gLw9*  
  I2C_GenerateSTOP(I2C1, ENABLE); N D2L_!g:(  
  } *9{Z$IA9w  
Yn G_m]  
la+[bm< v  
程序在执行到 sU{NHC)5  
/* Test on EV5 and clear it */ -xA2pYz"  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); % V 8U (z  
这里就执行不下去了。 / :n#`o=;  
STM32F10X。IIC外接铁电的。 &?yZv {  
我查了下网上很多人也是死在这。不知道是为什么。求指教
此帖悬赏结束
最佳答案: 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 */ !P)O(i=  
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  .Nw=[  
这个解决了,现在停在 tS|(K=$  
/* Test on EV6 and clear it */ 4<% *E{`  
  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||

你这个应该函数应该是探测有没产生中断吧 这个明显是寻址不到 N_|YOw6  
你的从设备是什么 地址是0x50?你改0xa0试试。。 .Pqj6Ko9  
你可以把状态寄存器的值读出来看看 是不是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

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