硬汉嵌入式论坛

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

[I2C] 基于STM32H7的硬件I2C从机例子分享(2022-05-22)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106833
QQ
发表于 2022-5-22 16:57:56 | 显示全部楼层 |阅读模式
用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端操作,仅需点击“执行”按钮即可



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 19:16 , Processed in 0.151091 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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