0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 HAL库I2C读写操作笔记

冬至子 来源:ecircuitlab 作者:ecircuitlab 2023-10-26 11:05 次阅读

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

    文章

    5334

    浏览量

    120208
  • STM32
    +关注

    关注

    2270

    文章

    10890

    浏览量

    355642
  • 数据存储
    +关注

    关注

    5

    文章

    970

    浏览量

    50890
  • I2C总线
    +关注

    关注

    8

    文章

    390

    浏览量

    60905
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

    6213
收藏 人收藏

    评论

    相关推荐

    关于I2C总线的读写操作流程详解

    本文主要介绍I2C总线的读写操作流程。 I2C总线的操作包括读和写,具体的操作流程如下。
    的头像 发表于 11-29 09:38 3.3w次阅读
    关于<b class='flag-5'>I2C</b>总线的<b class='flag-5'>读写</b><b class='flag-5'>操作</b>流程详解

    STM32CubeMx入门教程(7):I2C读写应用

    导语“本次 教程使用CubeMx配置I2C进行I2C总线设备的数据读写操作,使用EEPROM作为实验对象”
    发表于 07-12 11:34 4353次阅读
    <b class='flag-5'>STM32</b>CubeMx入门教程(7):<b class='flag-5'>I2C</b>的<b class='flag-5'>读写</b>应用

    求助,关于STM32F412 I2C从模式HAL使用方法的疑问求解

    _Slave_Receive_IT()/HAL_I2C_Slave_Transmit_IT(),但是这两个函数只能够发送或者接受特定长度的数据,而作为I2C从机,当主机写操作的时候,数据的长度是不定的,如何使用
    发表于 04-22 07:47

    请问cube halI2C读写24c1024?

    请教下,使用 hal 的库函数进行 I2C器件的 AT24C1024 器件的读写,这个读写地址 需要24位,而
    发表于 12-26 08:54

    I2C总线规范与I2C器件C51读写程序

    I2C总线规范与I2C器件C51读写程序:本文简要介绍了I2C总线,并给出了I2C器件的
    发表于 08-22 17:51 93次下载

    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次下载

    STM32F10x _硬件I2C读写EEPROM(标准外设版本)

    STM32F10x_硬件I2C读写EEPROM(标准外设版本)
    的头像 发表于 03-25 11:11 1w次阅读
    <b class='flag-5'>STM32</b>F10x _硬件<b class='flag-5'>I2C</b><b class='flag-5'>读写</b>EEPROM(标准外设<b class='flag-5'>库</b>版本)

    STM32F10x_ 模拟I2C读写EEPROM

    STM32F10x_模拟I2C读写EEPROM
    的头像 发表于 03-25 11:13 9914次阅读
    <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驱动

    STM32V107RCT6,基于HAL的用IO口模拟I2C的0.96寸OLED驱动前言作为一个初学者,当然希望有比较好的范例可以学习,但在CSDN和众多家的单片机学习网站,没发现现成
    发表于 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驱动

    STM32学习之I2C协议(读写EEPROM)

    关于STM32学习分享第七章 I2C协议(读写EEPROM)文章目录关于STM32学习分享前言二、代码1.i2c.c2.i2c.h3.main.c
    发表于 11-30 15:21 32次下载
    <b class='flag-5'>STM32</b>学习之<b class='flag-5'>I2C</b>协议(<b class='flag-5'>读写</b>EEPROM)

    STM32HAL硬件I2C驱动INA226保姆级教程

    STM32HAL硬件I2C驱动INA226保姆级教程废话不多说直接上代码ina226.h/**@brief STM32 HAL Lib
    发表于 12-04 16:51 141次下载
    <b class='flag-5'>STM32HAL</b><b class='flag-5'>库</b>硬件<b class='flag-5'>I2C</b>驱动INA226保姆级教程

    STM32F1x HAL学习笔记(9)硬件 I2C(IIC)主从机的配置

    STM32CubeMx 配置主从I2C(IIC)示例工程一、简介I2C 是一种双线协议,由一根时钟线和一根数据线组成,由于时序简单,应用广泛,ST 硬件 I2C 网传...
    发表于 12-06 11:21 26次下载
    <b class='flag-5'>STM32</b>F1x <b class='flag-5'>HAL</b><b class='flag-5'>库</b>学习<b class='flag-5'>笔记</b>(9)硬件 <b class='flag-5'>I2C</b>(IIC)主从机的配置

    STM32 HAL UART 串口读写功能笔记

    STM32L0 HAL UART 串口读写功能串口发送功能:uint8_t TxData[10]= “01234abcde”;HAL_UA
    发表于 12-27 19:11 13次下载
    <b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>库</b> UART 串口<b class='flag-5'>读写</b>功能<b class='flag-5'>笔记</b>

    STM32f103系列i2c读写文件at24c02

    STM32f103系列i2c读写文件at24c02免费下载。
    发表于 03-04 09:43 26次下载