当前位置:首页 > 单片机 > 单片机
[导读]1 /**2 * @brief 写一个字节到I2C设备中3 * @param 4 * @arg pBuffer:缓冲区指针5 * @arg WriteAddr:写地址6 * @retval 正常返回1,异常返回07 */8 uint8_t I2C_ByteWrite(u8 pBuffer, u8 WriteAddr)9

1 /**

2 * @brief 写一个字节到I2C设备中

3 * @param

4 * @arg pBuffer:缓冲区指针

5 * @arg WriteAddr:写地址

6 * @retval 正常返回1,异常返回0

7 */

8 uint8_t I2C_ByteWrite(u8 pBuffer, u8 WriteAddr)

9 {

10 /* Send STRAT condition */

11 I2C_GenerateSTART(macI2Cx, ENABLE);

12

13 I2CTimeout = I2CT_FLAG_TIMEOUT;

14

15

16 /* Test on EV5 and clear it */

17 //启动信号发出之后要等待状态寄存器SR1的位0(SB=1),状态寄存器SR2的位1(BUSY=1)和位0(MSL=1),此时表明主模式下,起始条件已发送,总线处于忙状态;确保IIC通讯正确

18 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_MODE_SELECT))

19 {

20 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

21 }

22

23 /* Send slave address for write */

24 I2C_Send7bitAddress(macI2Cx, MPU6050_SLAVE_ADDRESS, I2C_Direction_Transmitter);//7bit slave address + read/write (0write,1 read)

25

26 I2CTimeout = I2CT_FLAG_TIMEOUT;

27

28 /* Test on EV6 and clear it */

29 //从机地址发出之后,等待 BUSY, MSL, ADDR, TXE and TRA flags标志位

30 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))

31 {

32 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

33 }

34

35 /* Send the slave's internal address to write to */

36 I2C_SendData(macI2Cx, WriteAddr);

37

38 I2CTimeout = I2CT_FLAG_TIMEOUT;

39 /* Test on EV8 and clear it */

40 /* TRA, BUSY, MSL, TXE and BTF flags */

41 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED))

42 {

43 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

44 }

45

46 /* Send the byte to be written */

47 I2C_SendData(macI2Cx, pBuffer);

48

49 I2CTimeout = I2CT_FLAG_TIMEOUT;

50

51 /* Test on EV8 and clear it */

52 /* TRA, BUSY, MSL, TXE and BTF flags */

53 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED))

54 {

55 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

56 }

57

58 /* Send STOP condition */

59 I2C_GenerateSTOP(macI2Cx, ENABLE);

60

61 return 1; //正常返回1

62 }


IIC事件检测:498页。STM32的硬件IIC通信非常严格,每一步都要检测相应的标志位是否正确,确保通信不会出错。



1 /**

2 * @brief 从I2C设备里面读取一块数据

3 * @param

4 * @arg pBuffer:存放从slave读取的数据的缓冲区指针

5 * @arg WriteAddr:接收数据的从设备的地址

6 * @arg NumByteToWrite:要从从设备读取的字节数

7 * @retval 正常返回1,异常返回0

8 */

9 uint8_t I2C_BufferRead(u8* pBuffer, u8 ReadAddr, u16 NumByteToRead)

10 {

11 I2CTimeout = I2CT_LONG_TIMEOUT;

12

13 while(I2C_GetFlagStatus(macI2Cx, I2C_FLAG_BUSY)) // Added by Najoua 27/08/2008

14 {

15 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

16 }

17

18 I2C_GenerateSTART(macI2Cx, ENABLE);

19

20 I2CTimeout = I2CT_FLAG_TIMEOUT;

21

22 /* Test on EV5 and clear it */

23 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_MODE_SELECT))

24 {

25 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

26 }

27

28 /* Send slave address for write */

29 I2C_Send7bitAddress(macI2Cx, MPU6050_SLAVE_ADDRESS, I2C_Direction_Transmitter);

30

31 I2CTimeout = I2CT_FLAG_TIMEOUT;

32

33 /* Test on EV6 and clear it */

34 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))

35 {

36 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

37 }

38

39 /* Clear EV6 by setting again the PE bit */

40 I2C_Cmd(macI2Cx, ENABLE);

41

42 /* Send the slave's internal address to write to */

43 I2C_SendData(macI2Cx, ReadAddr);

44

45 I2CTimeout = I2CT_FLAG_TIMEOUT;

46

47 /* Test on EV8 and clear it */

48 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED))

49 {

50 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

51 }

52

53 /* Send STRAT condition a second time */

54 I2C_GenerateSTART(macI2Cx, ENABLE);

55

56 I2CTimeout = I2CT_FLAG_TIMEOUT;

57 /* Test on EV5 and clear it */

58 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_MODE_SELECT))

59 {

60 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

61 }

62

63 /* Send slave address for read */

64 I2C_Send7bitAddress(macI2Cx, MPU6050_SLAVE_ADDRESS, I2C_Direction_Receiver);

65

66 I2CTimeout = I2CT_FLAG_TIMEOUT;

67

68 /* Test on EV6 and clear it */

69 while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))

70 {

71 if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback();

72 }

73

74 /* While there is data to be read */

75 while(NumByteToRead)

76 {

77 if(NumByteToRead == 1)

78 {

79 /* Disable Acknowledgement */

80 I2C_AcknowledgeConfig(macI2Cx, DISABLE);

81

82 /* Send STOP Condition */

83 I2C_GenerateSTOP(macI2Cx, ENABLE);

84 }

85

86 /* Test on EV7 and clear it */

87 if(I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED))

88 {

89 /* Read a byte from the slave */

90 *pBuffer = I2C_ReceiveData(macI2Cx);

91

92 /* Point to the next location where the byte read will be saved */

93 pBuffer++;

94

95 /* Decrement the read bytes counter */

96 NumByteToRead--;

97 }

98 }

99

100 /* Enable Acknowledgement to be ready for another reception */

101 I2C_AcknowledgeConfig(macI2Cx, ENABLE);

102

103 return 1; //正常,返回1

104 }


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭