硬汉嵌入式论坛

 找回密码
 立即注册
查看: 760|回复: 1
收起左侧

[LUA教程] H7-TOOL的LUA小程序教程第9期:I2C总线从机模式操作说明V1.0(2023-12-03)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-12-3 09:54:14 | 显示全部楼层 |阅读模式
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。

TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。


功能特性:

1、从机是采用硬件I2C实现,开启了Fast-mode Plus,最高支持1MHz,从机的I2C速度是由主机决定的,使用时,不需要大家配置。
2、IO电平范围支持1.2V-5.0V。
3、从机不能主动发起操作,对从机的读写操作都是由主机发起的。
4、支持波形展示。

LUA函数说明:

1、从机初始化函数

i2c_bus("initslave", 从机地址)  , 从机地址采用7bit模式,这里实际填入的值是 = 7bit地址 << 1 , 左移了一位

从机函数可以单独LUA调用,也可以TOOL上位机I2C从机界面控制。

1.png

大家可以看到从机地址都是偶数,就是因为左移了一位,空出来的bit0是I2C的读写控制位,硬件I2C会自动管理。

2.png

2、从机数据接收函数

返回值1, 返回值2 = i2c_bus("reciveslave", 参数1, 参数2)
返回值1 :表示实际接收到的字节数。
返回值2 :返回接收的数值
参数1    :等待接收字节数
参数2    :等待超时时间,单位ms,等待的时间内没有接收完成将立即返回

比如接收10个数据,超时时间3000ms,那么就可以这样调用:len, str = i2c_bus("reciveslave", 10, 3000)

3.png

3、从机数据发送函数

返回值1 = i2c_bus("sendslave", 参数1,  参数2)
返回值1 :表示实际发送的字节数。
参数1    :等待发送的数据,可以发送字符串比如"12345678", 如果要发送实际数值,可以转移字符比如"\x00\x12\x34\x56"
参数2    :等待超时时间,单位ms,等待的时间内没有发送完成将立即返回

比如写10个数据,超时时间2000ms,那么就可以这样调用:len = i2c_bus("sendslave", "0123456789", 2000)

4.png

4、从机卸载函数

直接调用函数i2c_bus("deinitslave")即可,也可以上位机按钮退出

5.png

硬件接线方式:

I2C控制器引脚定义
D9 : I2C_SCL, 开漏内部集成上拉电阻2K欧
D7 : I2C_SDA, 开漏内部集成上拉电阻2K欧

接目标板的话,接线方式如下:



操作举例:

1、测试从机地址0x20,主机发送给从机10个数据,从机等待超时时间设置为5000ms,注意要主机发起操作,从机不能主动发起

6.png

2、测试从机地址0x20,从机发送10个数据给主机,等待超时时间设置为5000ms,注意要主机发起操作,从机不能主动发起操作

7.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
 楼主| 发表于 2023-12-3 12:38:42 | 显示全部楼层
更新完成。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 21:08 , Processed in 0.277630 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表