HAL库学习梳理——I2C

   笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。下面对HAL库有关 I2C 课程知识和应用做一个梳理。

省流:

uint8_t commands[] = {0x00, 0x8d, 0x14, 0xaf, 0xa5};

HAL_I2C_Master_Transmit(&hi2c1,0x78,commands,sizeof(commands)/sizeof(commands[0]) ,HAL_MAX_DELAY);

sizeof(commands)/sizeof(commands[0])        // 结果等于5,表示5个元素

主机发送5个元素数据给从机。

uint8_t Data_Receive;

HAL_I2C_Master_Receive(&hi2c1,0x78,&dataRcvd,1,HAL_MAX_DELAY);

if((dataRcvd & (0x01<<6)) == 0)
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
}

读取从机的数据保存到自定义的变量中,再判断第6位是否为0。

1、I2C 总线基本原理

I2C 总线框图
起始位
寻址
数据传输
停止位
I2C总线 读写过程

这里的示例模拟了I2C总线主机的写读过程,有弹幕和评论说主机在寻址完之后应该发送从机寄存器地址,这里笔者在学习江科大标准库的时候确实是这样的。可能铁头山羊想把这部分内容放到进阶版视频再详细讲。作为入门的初学者来说,用这4个阶段来理解I2C正合适不过。实际开发与基础理论有出入更能让我们记忆深刻。

数据传输模式

2、示例

2.1 简单数据传输

(1)I2C模式参数

I2C 接口配置

I2C 模式配置

(2)程序 

I2C总线主机读写数据——HAL函数接口
主机发送 5个 元素的数据
uint8_t commands[] = {0x00, 0x8d, 0x14, 0xaf, 0xa5};

sizeof(commands)                            // uint8_t 规定元素占1个字节,结果等于1*5个元素=4

sizeof(commands[0])                         // 一个数据元素占1个字节,结果等于1

sizeof(commands)/sizeof(commands[0])        // 结果等于5

主机读取 从机地址的数据并控制LED灯
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值