STM32硬件IIC的實現

1、STM32 Cube配置

進入Cube設置 根據數據手冊填入上升與下降沿時間,選擇快速模式。
在這裏插入圖片描述

2、程序分析

2.1、單片機發送命令函數

發送的函數使用

HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

其中hi2c爲結構體,DevAddress爲設備地址,*pData爲所要發送的數據, Size爲發送數據的大小,Timeout爲操作超時時間
比如:

I2C_HandleTypeDef hi2c1;
data[3]={0x00,0x10,0x00}
HAL_I2C_Master_Transmit(&hi2c1, 0x20,  &data[0],3, 1000 )

爲0x20地址上發送數組data中三個數據。可以使用示波器看IIC_SCL與IIC_SDA上的數據。

2.2、數據讀取

使用的函數爲

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

其中hi2c爲結構體,DevAddress爲設備地址,MemAddress爲所讀取設備的數據保存的地址,MemAddSize爲需要讀取單數據的長度,*pData爲讀取數據被保存的地址, Size爲讀取數據的大小,Timeout爲操作超時時間
比如:

HAL_I2C_Mem_Read( &hi2c1, 0x21, 0x08, I2C_MEMADD_SIZE_8BIT, &Receivedata[0], 2, 1000 );

上面函數分析:0x21爲讀取的命令,0x80爲讀取設備保存數據的地址,I2C_MEMADD_SIZE_8BIT爲單字節讀取,Receivedata爲讀取數據保存的數據,2位讀取兩個字節的數據。

示波器抓取到時序和基本一致。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章