用I2C从机的网友还不少,所以专门做个从机例子玩下,并给大家分享下。
基于STM32H7的硬件I2C从机.7z (5.38MB)

1、I2C主机控制器
下面是LUA程序实现, 根据自己的硬件,修改使用的I2C器件地址,这里访问的是0x20.
[C] 纯文本查看 复制代码 -- 数据收发测试
function i2cSlaveTransmit(_usAddress)
local ack
local str
-------发送数据------------------------------
i2c_bus("start") -- 启动
ack = i2c_bus("send", _usAddress) -- 写操作
if (ack ~= 0) then
print("I2C从机无应答 send address")
goto cmd_fail -- 无应答
end
ack = i2c_bus("send", "1") -- 发送数据
if (ack ~= 0) then
print("I2C从机无应答 send data")
goto cmd_fail -- 无应答
end
i2c_bus("stop")
-------接收数据------------------------------
i2c_bus("start")
ack = i2c_bus("send", _usAddress + 1) -- 读操作
if (ack ~= 0) then
print("I2C从机无应答 send address")
goto cmd_fail -- 无应答
end
str = i2c_bus("recive", 17) -- 读取17个字节数据
print(str)
::cmd_fail::
-- 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备
-- 发送I2C总线停止信号
i2c_bus("stop")
end
-- 连续发送10次
for i = 1, 10, 1 do
delayms(200)
i2cSlaveTransmit(0x20)
end
代码代码复制到TOOL上位机这里:

2、接线说明:

3、启动I2C:
这里仅需启动即可,不需要点击扫描I2C,因为扫描操作对I2C从机来说也是一种操作。

4、下载程序到:
将程序下载到V7开发板。
H7-TOOL端操作,仅需点击“执行”按钮即可

|