0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何配置硬件IIC

正点原子 2022-03-31 15:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如何配置硬件IIC

IIC英文全称:Inter Integrated Circuit,集成电路总线,是飞利浦公司在八十年代开发的一种串行、同步、半双工总线。

IIC总线协议无非就是几样东西:起始信号、停止信号、应答信号、以及数据有效性。大家学习了正点原子的IIC实验,应该很了解IIC时序。正点原子使用的是软件模拟IIC,也就是用IO口模拟出IIC时序去通信。使用硬件IIC,就可以不用管时序信号,配置好之后就可以产生时序。虽说ST的硬件IIC很鸡肋,但是某些方面还是比软件模拟IIC稍微强一点。



下面列出一个硬件IIC和软件IIC的对比表


e11dde04-af85-11ec-82f6-dac502259ad0.png





软件IIC整个流程很清晰,假如出了bug,你能很快找到问题,硬件IIC就需要动用DS100示波器去看波形,波形的查看教程可以参考以下推文

嵌入式工程师必备技能—如何使用示波器查看IIC波形》

https://mp.weixin.qq.com/s/lnSORSbXeNJe-QVwW0EVbg


其实很多时候是在管脚上考量使用软件IIC。硬件IIC虽然被听说吐槽过千百遍,但是有些人还是有兴趣想使用STM32的IIC外设的,那么本文就教一下大家使用硬件IIC,侧重于使用(这里使用的是F1 HAL库)。


首先,先看HAL库给IIC定义好的结构体,这里主要讲解IIC初始化结构体

e12c108c-af85-11ec-82f6-dac502259ad0.png

ClockSpeedIIC的传输速率,主要看从机,从机AT24C02是最大为400kHz,低于400kHz即可。

DutyCycleSCL线时钟占空比,就是低电平与高电平的比值,没有严格限制,选择2:1或者16:9即可。

OwnAddress1:STM32的IIC设备的自身地址,挂载在IIC总线上的器件每一个都有自己唯一地址,作为主机也不例外。特别注意:这里地址的设置不要跟从机一样即可。

AddressingMode地址的位数是使用7位还是10位,这要看从机了。对于AT24C02来说,直接使用7位。

DualAddressMode用来配置是否支持双设备地址,没有用到可以不配置。

OwnAddress2STM32的IIC设备的自身地址,是否有效取决于DualAddressMode成员的设置。

GeneralCallMode广播呼叫模式,作为从机时使用,通常用不上。

NoStrethMode时钟线延长,也是作为从机时使用的,通常用不上。




在IIC实验例程中,编写hwiic_init如下:


e13b6938-af85-11ec-82f6-dac502259ad0.png

这里是调用HAL_I2C_Init函数对IIC进行初始化,在IIC的初始化回调函数中就要使能I2C1时钟以及对相关引脚进行初始化,特别注意GPIO口的模式(复用开漏输出),这部分代码比较简单就不列出来了。




初始化完成后,使用HAL库提供的IIC发送和接收函数,函数如下:

e147a9fa-af85-11ec-82f6-dac502259ad0.png

hi2cIIC的句柄结构体地址。

DevAddress从机的设备地址,这里并不是通讯地址。

MemAddress要写入的地址。

MemAddSize地址的长度。

pData要写入的数据的地址。

Size写入数据的个数

Timeout函数执行的超时时间。




以往的AT24C02的写操作函数和读操作函数,函数体内一堆代码,现在只是几行代码。

at24c02写一字节函数代码如下:

e1677b9a-af85-11ec-82f6-dac502259ad0.png

at24c02读一字节函数代码如下:

e1764a4e-af85-11ec-82f6-dac502259ad0.png

假如说直接用HAL_I2C_Mem_Write来编写连续写函数,就有页写限制,也就是最多8字节,当你写入的数据大于8字节时,就会出现错误了。


所以编写at24c02的连续写函数最好就是调用at24c02_write_one_byte这个函数接口。


最终可以比对一下相同数据量的传输下,软件模拟IIC和硬件IIC的速度对比。


硬件IIC的配置使用还是挺简单的,速度上面还是比模拟IIC快,假如说是驱动OLED屏幕的话,可以试用一下硬件IIC提高一下刷新率,得到更好的显示效果。

e18df0a4-af85-11ec-82f6-dac502259ad0.gif

END

e19b49a2-af85-11ec-82f6-dac502259ad0.gif

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45575

    浏览量

    673477
  • 嵌入式
    +关注

    关注

    5209

    文章

    20645

    浏览量

    336906
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用 VisionFive IIC 读取 SHTC3 数据?

    使用 VisionFive IIC 读取 SHTC3 数据
    发表于 03-27 07:09

    【教程】CAN总线数据过滤太难?ECAN-E02硬件+软件滤波器配置实战指南

    备与电脑连入同一网络在浏览器输入设备IP进入网络配置界面如果不知道设备IP,可以使用上位机进行搜索二、硬件滤波器模式详解硬件滤波器默认开启,但不进行任何过滤。接收过滤
    的头像 发表于 02-10 19:33 1637次阅读
    【教程】CAN总线数据过滤太难?ECAN-E02<b class='flag-5'>硬件</b>+软件滤波器<b class='flag-5'>配置</b>实战指南

    【瑞萨RA × Zephyr开发板评测】+模拟IIC实现OLED输出(与硬件IIC输出的失败经验)

    无需额外工具即可编写/调试程序。此外,通过Arduino Uno和Pmod™接口,包括对微控制器所有引脚的标准和通孔访问等,它具有很高的可扩展性。 按照上图进行Oled接线,首先使用IIC硬件接口
    发表于 01-19 22:23

    RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示

    “RAMCU众测宝典”IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信的OLED显示。从IIC协议的核心原理、FSP中I2CMaster的
    的头像 发表于 01-01 10:04 3146次阅读
    RA MCU众测宝典 | <b class='flag-5'>IIC</b>之【RA2E1】<b class='flag-5'>IIC</b>通信的OLED显示

    智能双卡设计实战指南:硬件电路与软件配置详解!

    在智能双卡设计中,硬件电路的可靠性与软件配置的精准性直接决定双卡功能的稳定性。本文基于实际项目经验,详细拆解硬件设计中SIM卡供电电路、时钟信号匹配及卡槽复用设计的实现细节,并同步讲解软件层的初始化
    的头像 发表于 12-16 15:13 643次阅读
    智能双卡设计实战指南:<b class='flag-5'>硬件</b>电路与软件<b class='flag-5'>配置</b>详解!

    通信协议IIC与SPI最全对比分析

    的一些关键点。 总线拓扑结构信号路由硬件资源耗费 IIC只需两根信号线,而标准SPI至少四根信号,如果有多个从设备,信号需要更多。一些SPI变种虽然只使用三根线——SCLK、SS和双向的MISO
    发表于 12-10 06:04

    英诺达亮相IIC Shenzhen 2025

    2025年11月25日,国际集成电路展览会暨研讨会(IIC Shenzhen)在深圳举办,英诺达创始人及CEO王琦博士应邀出席,并于“全球CEO峰会”发表题为《低功耗设计新范式:突破算力芯片能效瓶颈》的主旨演讲,引发行业广泛关注。
    的头像 发表于 12-03 10:53 709次阅读

    【瑞萨RA6E2】硬件IIC驱动九轴传感器与OLED显示

    IIC_Write(OLED_ADDR, OLED_CMD, 0xDA);// 设置COM硬件配置 IIC_Write(OLED_ADDR, OLED_CMD, 0x12);//
    发表于 11-27 02:18

    基于hbirdv2-sdk的iic 0.96寸lcd调试

    , 读写数据函数, lcd初始化, lcd显示封装函数 iic.c: 硬件iic接口相关的定义 iic.h: iic
    发表于 10-30 06:20

    iic中只设置了时钟和数据引脚没有配置那个端口,rtt是怎么知道在那个端口上进行iic通信的?

    用的5.2.0版本配置iic的时钟和数据引脚没有配置端口,系统是怎么判断使用的那个端口的那个引脚开始了通信呢?在rt——thread中需要us的延时么?那个大佬解答一下啊,刚接触这个东西,感谢感谢
    发表于 09-26 07:26

    硬件定时器如何配置固定频率?

    需求是:以25.6kHz操作引脚电平,系统主频为160MHZ,STM32F429 按照文档里“HWTIMER 设备”开启了硬件定时器,但只能配置时间,按时间换算我要的这个频率为 39.0625us
    发表于 09-26 07:12

    【微五科技CF5010RBT60开发板试用体验】硬件IIC点亮OLED小屏幕

    微五科技 CF5010RBT60 测评:硬件 IIC 驱动 OLED 的流畅体验 作为一款基于高性能 RISC-V 内核 (CF5010RBT60, 160MHz) 的开发板,微五科技
    发表于 08-08 11:01

    硬件调试:JLink 驱动配置与调试技巧

    摘要: 本文深入探讨了 JLink 调试器在嵌入式系统硬件调试中的应用,详细阐述了 JLink 驱动配置的方法以及硬件调试技巧。本文以国科安芯的AS32系列MCU芯片为例,通过分析 JLink
    的头像 发表于 06-12 23:20 1887次阅读
    <b class='flag-5'>硬件</b>调试:JLink 驱动<b class='flag-5'>配置</b>与调试技巧

    ADL5308可以通过软件和硬件配置的参数,配置的优先级是什么?

    你好,麻烦问一下ADL5308可以通过软件和硬件配置的参数,配置的优先级是什么?有没有更详细的寄存器配置手册,截距配置的步进是多少?
    发表于 06-10 06:39

    IIC接口的IIC_SCL和IIC_SDA引脚做普通GPIO,程序启动不起来怎么解决?

    想用IIC接口的IIC_SCL和IIC_SDA引脚做普通GPIO,两个引脚对应的是GPIO58和GPIO59,更改代码将设置为普通GPIO引脚模式后,程序启动不起来。问:这种情况如何解决,官方支持这种应用吗?
    发表于 05-06 08:59