I2C寫數據:
I2C寫數據時用 HAL_I2C_Master_Transmit 函數,函數參數信息如下:
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
**DevAddress: **7bit從機地址左移 + 1bit 0
pData: 要發送的數據,數據存儲規則是大端方式,即數據發送先發pData[0],再發pData[1],再發pData[2],以此類推。如下代碼,addr=0x01, data=0x0220,進行數據打包到trans_data數組發送后,抓取波形如下。
trans_data[0] = addr;
trans_data[1] = data > > 8;
trans_data[2] = data & 0x00FF;
HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)(TMP117_ADDR), trans_data, 3,0xFF);

I2C讀數據:
I2C寫數據時用 HAL_I2C_Master_Receive 函數,函數參數信息如下:
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
DevAddress: 7bit從機地址左移 + 1bit 1
pData: 存儲讀到的數據,數據仍然是大端模式,即第一個接收的數據存在pData[0],第二個存在pData[1],第三個存在pData[2],以此類推,如下代碼為處理抓取接收到的數據,最終rt_data的值為 0x0E58。
HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)(TMP117_ADDR), &addr, 1,0xFF);
HAL_I2C_Master_Receive(&hi2c1, (uint16_t)(TMP117_ADDR | 0x01), read_data, 2,0xFF);
rt_data = (read_data[0] < < 8) | read_data[1];
printf("rt_data is: 0x%04xrn", rt_data);

打印的結果:

這里需要注意下:
ST的HAL庫,I2C讀函數 HAL_I2C_Master_Receive 僅做讀那一部分操作,按照I2C協議,要完成從機的數據讀取,需要先尋址發送寄存器地址,然后再讀,所以這里需要使用I2C寫函數HAL_I2C_Master_Transmit來配合。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
寄存器
+關注
關注
31文章
5609瀏覽量
130017 -
STM32
+關注
關注
2310文章
11162瀏覽量
373539 -
數據存儲
+關注
關注
5文章
1025瀏覽量
52957 -
I2C總線
+關注
關注
8文章
417瀏覽量
63364 -
HAL庫
+關注
關注
1文章
121瀏覽量
7643
發布評論請先 登錄
相關推薦
熱點推薦
STM32CubeMx入門教程(7):I2C的讀寫應用
導語“本次 教程使用CubeMx配置I2C進行I2C總線設備的數據讀寫操作,使用EEPROM作為實驗對象”
發表于 07-12 11:34
?6710次閱讀
求助,關于STM32F412 I2C從模式HAL庫使用方法的疑問求解
_Slave_Receive_IT()/HAL_I2C_Slave_Transmit_IT(),但是這兩個函數只能夠發送或者接受特定長度的數據,而作為I2C從機,當主機寫操作的時候,數據的長度是不定的,如何使用
發表于 04-22 07:47
STM32H7CubeMX配置硬件I2C,讀寫失敗是什么問題呀?
STM32H7CubeMX配置硬件I2C,讀寫失敗什么問題呀,同樣的操作F4和F1都能正常使用,應該不存在i2c地址錯誤,
發表于 06-12 06:21
STM32硬件i2c,CubeMX,Hal庫
這是基于STM32調試的兩個簡單的硬件i2c通信的資料,所使用的是hal庫,并且文件里面還有相關傳感器SHT20,SSD1306屏幕的數據手冊
發表于 09-17 09:32
?66次下載
I2C—讀寫EEPROM
【*】程序簡介 -工程名稱:基本讀寫EEPROM -實驗平臺: 秉火STM32 F429 開發板 -MDK版本:5.16 -ST固件庫版本:1.5.1 【 !】功能簡介: 讀寫板載的
發表于 12-13 15:12
?23次下載
STM32V107VCT6,基于HAL庫的用IO口模擬I2C的0.96寸OLED驅動
STM32V107RCT6,基于HAL庫的用IO口模擬I2C的0.96寸OLED驅動前言作為一個初學者,當然希望有比較好的范例可以學習,但在CSDN和眾多家的單片機學習網站,沒發現現成
發表于 11-29 14:51
?16次下載
STM32學習之I2C協議(讀寫EEPROM)
關于STM32學習分享第七章 I2C協議(讀寫EEPROM)文章目錄關于STM32學習分享前言二、代碼1.i2c.c2.i2c.h3.main.c
發表于 11-30 15:21
?34次下載
STM32HAL庫硬件I2C驅動INA226保姆級教程
STM32HAL庫硬件I2C驅動INA226保姆級教程廢話不多說直接上代碼ina226.h/**@brief STM32 HAL Lib
發表于 12-04 16:51
?158次下載
STM32F1x HAL庫學習筆記(9)硬件 I2C(IIC)主從機的配置
:STM32CubeMx 配置主從I2C(IIC)示例工程一、簡介I2C 是一種雙線協議,由一根時鐘線和一根數據線組成,由于時序簡單,應用廣泛,ST 硬件 I2C 網傳...
發表于 12-06 11:21
?27次下載
STM32 HAL庫I2C讀寫操作筆記
評論