當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]1 /**2 * @brief 寫一個字節(jié)到I2C設(shè)備中3 * @param 4 * @arg pBuffer:緩沖區(qū)指針5 * @arg WriteAddr:寫地址6 * @retval 正常返回1,異常返回07 */8 uint8_t I2C_ByteWrite(u8 pBuffer, u8 WriteAddr)9

1 /**

2 * @brief 寫一個字節(jié)到I2C設(shè)備中

3 * @param

4 * @arg pBuffer:緩沖區(qū)指針

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 //啟動信號發(fā)出之后要等待狀態(tài)寄存器SR1的位0(SB=1),狀態(tài)寄存器SR2的位1(BUSY=1)和位0(MSL=1),此時表明主模式下,起始條件已發(fā)送,總線處于忙狀態(tài);確保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 //從機地址發(fā)出之后,等待 BUSY, MSL, ADDR, TXE and TRA flags標(biāo)志位

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通信非常嚴(yán)格,每一步都要檢測相應(yīng)的標(biāo)志位是否正確,確保通信不會出錯。



1 /**

2 * @brief 從I2C設(shè)備里面讀取一塊數(shù)據(jù)

3 * @param

4 * @arg pBuffer:存放從slave讀取的數(shù)據(jù)的緩沖區(qū)指針

5 * @arg WriteAddr:接收數(shù)據(jù)的從設(shè)備的地址

6 * @arg NumByteToWrite:要從從設(shè)備讀取的字節(jié)數(shù)

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 }


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉