0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32 HAL庫I2C讀寫操作筆記

冬至子 ? 來源:ecircuitlab ? 作者:ecircuitlab ? 2023-10-26 11:05 ? 次閱讀

I2C寫數(shù)據(jù):

I2C寫數(shù)據(jù)時(shí)用 HAL_I2C_Master_Transmit 函數(shù),函數(shù)參數(shù)信息如下:

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

**DevAddress: **7bit從機(jī)地址左移 + 1bit 0

pData: 要發(fā)送的數(shù)據(jù),數(shù)據(jù)存儲規(guī)則是大端方式,即數(shù)據(jù)發(fā)送先發(fā)pData[0],再發(fā)pData[1],再發(fā)pData[2],以此類推。如下代碼,addr=0x01, data=0x0220,進(jìn)行數(shù)據(jù)打包到trans_data數(shù)組發(fā)送后,抓取波形如下。

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讀數(shù)據(jù):

I2C寫數(shù)據(jù)時(shí)用 HAL_I2C_Master_Receive 函數(shù),函數(shù)參數(shù)信息如下:

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

DevAddress: 7bit從機(jī)地址左移 + 1bit 1

pData: 存儲讀到的數(shù)據(jù),數(shù)據(jù)仍然是大端模式,即第一個(gè)接收的數(shù)據(jù)存在pData[0],第二個(gè)存在pData[1],第三個(gè)存在pData[2],以此類推,如下代碼為處理抓取接收到的數(shù)據(jù),最終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);

圖片

打印的結(jié)果:

圖片

這里需要注意下:

ST的HAL庫,I2C讀函數(shù) HAL_I2C_Master_Receive 僅做讀那一部分操作,按照I2C協(xié)議,要完成從機(jī)的數(shù)據(jù)讀取,需要先尋址發(fā)送寄存器地址,然后再讀,所以這里需要使用I2C寫函數(shù)HAL_I2C_Master_Transmit來配合。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120808
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356765
  • 數(shù)據(jù)存儲
    +關(guān)注

    關(guān)注

    5

    文章

    977

    瀏覽量

    50975
  • I2C總線
    +關(guān)注

    關(guān)注

    8

    文章

    391

    瀏覽量

    61063
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    6339
收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于I2C總線的讀寫操作流程詳解

    本文主要介紹I2C總線的讀寫操作流程。 I2C總線的操作包括讀和寫,具體的操作流程如下。
    的頭像 發(fā)表于 11-29 09:38 ?3.4w次閱讀
    關(guān)于<b class='flag-5'>I2C</b>總線的<b class='flag-5'>讀寫</b><b class='flag-5'>操作</b>流程詳解

    STM32CubeMx入門教程(7):I2C讀寫應(yīng)用

    導(dǎo)語“本次 教程使用CubeMx配置I2C進(jìn)行I2C總線設(shè)備的數(shù)據(jù)讀寫操作,使用EEPROM作為實(shí)驗(yàn)對象”
    發(fā)表于 07-12 11:34 ?4546次閱讀
    <b class='flag-5'>STM32</b>CubeMx入門教程(7):<b class='flag-5'>I2C</b>的<b class='flag-5'>讀寫</b>應(yīng)用

    求助,關(guān)于STM32F412 I2C從模式HAL使用方法的疑問求解

    _Slave_Receive_IT()/HAL_I2C_Slave_Transmit_IT(),但是這兩個(gè)函數(shù)只能夠發(fā)送或者接受特定長度的數(shù)據(jù),而作為I2C從機(jī),當(dāng)主機(jī)寫操作的時(shí)候,數(shù)據(jù)的長度是不定的,如何使用
    發(fā)表于 04-22 07:47

    請問cube halI2C讀寫24c1024?

    請教下,使用 hal 的庫函數(shù)進(jìn)行 I2C器件的 AT24C1024 器件的讀寫,這個(gè)讀寫地址 需要24位,而
    發(fā)表于 12-26 08:54

    I2C總線規(guī)范與I2C器件C51讀寫程序

    I2C總線規(guī)范與I2C器件C51讀寫程序:本文簡要介紹了I2C總線,并給出了I2C器件的
    發(fā)表于 08-22 17:51 ?93次下載

    STM32硬件i2c,CubeMX,Hal

    這是基于STM32調(diào)試的兩個(gè)簡單的硬件i2c通信的資料,所使用的是hal,并且文件里面還有相關(guān)傳感器SHT20,SSD1306屏幕的數(shù)據(jù)手冊
    發(fā)表于 09-17 09:32 ?66次下載

    I2C讀寫EEPROM

    【*】程序簡介 -工程名稱:基本讀寫EEPROM -實(shí)驗(yàn)平臺: 秉火STM32 F429 開發(fā)板 -MDK版本:5.16 -ST固件版本:1.5.1 【 !】功能簡介: 讀寫板載的
    發(fā)表于 12-13 15:12 ?23次下載

    STM32F10x _硬件I2C讀寫EEPROM(標(biāo)準(zhǔn)外設(shè)版本)

    STM32F10x_硬件I2C讀寫EEPROM(標(biāo)準(zhǔn)外設(shè)版本)
    的頭像 發(fā)表于 03-25 11:11 ?1w次閱讀
    <b class='flag-5'>STM32</b>F10x _硬件<b class='flag-5'>I2C</b><b class='flag-5'>讀寫</b>EEPROM(標(biāo)準(zhǔn)外設(shè)<b class='flag-5'>庫</b>版本)

    STM32F10x_ 模擬I2C讀寫EEPROM

    STM32F10x_模擬I2C讀寫EEPROM
    的頭像 發(fā)表于 03-25 11:13 ?9988次閱讀
    <b class='flag-5'>STM32</b>F10x_ 模擬<b class='flag-5'>I2C</b><b class='flag-5'>讀寫</b>EEPROM

    STM32V107VCT6,基于HAL的用IO口模擬I2C的0.96寸OLED驅(qū)動(dòng)

    STM32V107RCT6,基于HAL的用IO口模擬I2C的0.96寸OLED驅(qū)動(dòng)前言作為一個(gè)初學(xué)者,當(dāng)然希望有比較好的范例可以學(xué)習(xí),但在CSDN和眾多家的單片機(jī)學(xué)習(xí)網(wǎng)站,沒發(fā)現(xiàn)現(xiàn)成
    發(fā)表于 11-29 14:51 ?16次下載
    <b class='flag-5'>STM32</b>V107VCT6,基于<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>的用IO口模擬<b class='flag-5'>I2C</b>的0.96寸OLED驅(qū)動(dòng)

    STM32學(xué)習(xí)之I2C協(xié)議(讀寫EEPROM)

    關(guān)于STM32學(xué)習(xí)分享第七章 I2C協(xié)議(讀寫EEPROM)文章目錄關(guān)于STM32學(xué)習(xí)分享前言二、代碼1.i2c.c2.i2c.h3.main.c
    發(fā)表于 11-30 15:21 ?32次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)之<b class='flag-5'>I2C</b>協(xié)議(<b class='flag-5'>讀寫</b>EEPROM)

    HAL讀寫STM32F103內(nèi)部的FLASH空間

    在此聲明——本文摘自這里:【碼神島】STM32F0x HAL學(xué)習(xí)筆記(5)片內(nèi)FLASH的讀寫操作
    發(fā)表于 12-01 20:51 ?23次下載
    <b class='flag-5'>HAL</b><b class='flag-5'>庫</b>之<b class='flag-5'>讀寫</b><b class='flag-5'>STM32</b>F103內(nèi)部的FLASH空間

    STM32HAL硬件I2C驅(qū)動(dòng)INA226保姆級教程

    STM32HAL硬件I2C驅(qū)動(dòng)INA226保姆級教程廢話不多說直接上代碼ina226.h/**@brief STM32 HAL Lib
    發(fā)表于 12-04 16:51 ?142次下載
    <b class='flag-5'>STM32HAL</b><b class='flag-5'>庫</b>硬件<b class='flag-5'>I2C</b>驅(qū)動(dòng)INA226保姆級教程

    STM32F1x HAL學(xué)習(xí)筆記(9)硬件 I2C(IIC)主從機(jī)的配置

    STM32CubeMx 配置主從I2C(IIC)示例工程一、簡介I2C 是一種雙線協(xié)議,由一根時(shí)鐘線和一根數(shù)據(jù)線組成,由于時(shí)序簡單,應(yīng)用廣泛,ST 硬件 I2C 網(wǎng)傳...
    發(fā)表于 12-06 11:21 ?26次下載
    <b class='flag-5'>STM32</b>F1x <b class='flag-5'>HAL</b><b class='flag-5'>庫</b>學(xué)習(xí)<b class='flag-5'>筆記</b>(9)硬件 <b class='flag-5'>I2C</b>(IIC)主從機(jī)的配置

    STM32f103系列i2c讀寫文件at24c02

    STM32f103系列i2c讀寫文件at24c02免費(fèi)下載。
    發(fā)表于 03-04 09:43 ?26次下載