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文章
5620浏览量
130422 -
STM32
+关注
关注
2313文章
11195浏览量
374667 -
数据存储
+关注
关注
5文章
1037浏览量
53013 -
I2C总线
+关注
关注
8文章
422浏览量
63504 -
HAL库
+关注
关注
1文章
121浏览量
7741
发布评论请先 登录
相关推荐
热点推荐
STM32CubeMx入门教程(7):I2C的读写应用
导语“本次 教程使用CubeMx配置I2C进行I2C总线设备的数据读写操作,使用EEPROM作为实验对象”
发表于 07-12 11:34
•6848次阅读
求助,关于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读写操作笔记
评论