用I2C从机的网友还不少,所以专门做个从机例子玩下,并给大家分享下。
基于STM32H7的硬件I2C从机.7z (5.38MB)
![](https://www.armbbs.cn/static/image/hrline/4.gif)
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上位机这里:
![](https://img.anfulai.cn/dz/attachment/forum/202205/22/163709hlelox0juaubou75.png)
2、接线说明:
![](https://img.alicdn.com/imgextra/i2/299314119/O1CN01Xc6vTh1gIY6q3Xkdc_!!299314119.png)
3、启动I2C:
这里仅需启动即可,不需要点击扫描I2C,因为扫描操作对I2C从机来说也是一种操作。
![](https://img.anfulai.cn/dz/attachment/forum/202205/22/164013njgo4knlyojeze4g.png)
4、下载程序到:
将程序下载到V7开发板。
H7-TOOL端操作,仅需点击“执行”按钮即可
![](https://img.alicdn.com/imgextra/i1/299314119/O1CN01pZcjWe1gIY9ZoJ1cW_!!299314119.gif)
|