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

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

    关注

    6035

    文章

    44554

    浏览量

    634624
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304796
收藏 人收藏

    评论

    相关推荐

    请问TAS5760L怎么通过IIC进行音量控制,需要配置哪些寄存器?

    TAS5760L: 怎么通过IIC进行音量控制,需要配置哪些寄存器
    发表于 09-27 09:36

    iic通讯的ardunio的文件下载

    里面很多iic通讯的ardunio的文件
    发表于 07-05 10:55 1次下载

    下位机硬件选型与配置研究

    在工业自动化、嵌入式系统以及物联网等领域,下位机作为系统的执行单元,其硬件的选型与配置直接关系到整个系统的性能、稳定性和可靠性。因此,合理的下位机硬件选型与配置对于确保系统的高效运行至
    的头像 发表于 06-28 16:57 614次阅读

    ABB变频器的硬件配置详解

      ABB变频器作为工业自动化领域的核心设备之一,其硬件配置对于实现高效、稳定的电机控制至关重要。本文将详细介绍ABB变频器的硬件配置,包括其主要组成部分、功能特点、以及各组件的选型与
    的头像 发表于 06-19 15:31 1100次阅读

    使用STM32F103的硬件IIC,出现BUSY去重新初始化IIC之后,为什么会每次卡在设备地址发送不出去?

    使用STM32F103的硬件IIC,查询的方式,进行通讯,出现BUSY之后,去重新初始化IIC之后,之后为什么会每次卡在设备地址发送不出去啊。求教,求教
    发表于 05-28 06:43

    STM8L051F3手册里是否有IIC作为slave的IIC address?

    各位使用过STM8L051F3硬件IIC的朋友们,手册里是否有IIC作为slave的IIC address,并没有看到啊。请大家帮忙告知。谢谢!
    发表于 05-07 07:25

    stm32f103z系列硬件IIC从机不能用的原因?

    如题,我在STM32F103C8 48脚下写的IIC PB6 PB7 硬件IIC从机可以使用, 把上面的程序改为STM32F103ZE 144脚下的写的IIC PB6 PB7
    发表于 05-07 06:56

    请问STM32F429硬件IIC需要外围上拉电阻吗?

    如题,STM32F429使用IIC通信的时候,是否需要外加上拉电阻? 看过很多资料,都说是需要上拉电阻,让人郁闷的是,这次设计硬件的时候,偏偏忘记了加,于是乎我进行了测试, //使能IO引脚
    发表于 04-24 06:35

    STM8L101F3U6TR的硬件IIC从机进不了中断是为什么?

    开发stm8,一直都用的是stvd,但是发现很多例程到使用iar,就转到iar开发。 现在项目上用到IIC从机的问题,也看了挺多人写的硬件IIC从机程序,都运行无问题,于是自己也仿照着写了从机程序
    发表于 04-09 06:25

    FPGA实现IIC协议的设计

    今天给大家带来的是IIC通信,IIC协议应用非常广泛,例如与MPU6050进行通信,配置OV5640摄像头、驱动OLED屏幕等等,都需要使用到IIC协议,所以掌握它是非常必要的,废话不
    的头像 发表于 03-04 10:49 1246次阅读
    FPGA实现<b class='flag-5'>IIC</b>协议的设计

    GD32 MCU碰到IIC总线卡死怎么办?

    大家在使用MCU IIC通信时,若碰到设备复位或者总线干扰等情况,可能会导致IIC总线卡死,表现上总线上SDA或者SCL其中一根线为低电平,IIC总线一直处于busy状态。此时若代码上一直等待总线空闲,则可能导致软件死机,为解决
    的头像 发表于 02-24 09:46 3830次阅读
    GD32 MCU碰到<b class='flag-5'>IIC</b>总线卡死怎么办?

    请问一下TC275是否有完整的例程来使用mcHal库为控制器配置IIC

    先生请问一下 TC275 是否有完整的例程来使用 mcHal 库为控制器配置 IIC
    发表于 02-01 08:17

    请问如何使用Dave2配置XC2267M的IIC

    如何使用 Dave2 配置 XC2267M 的 IIC? 您CAN 为我提供特定的配置步骤? 请帮帮我,谢谢!
    发表于 01-31 07:54

    采集卡与显卡:功能差异和硬件配置的不同

    采集卡与显卡:功能差异和硬件配置的不同  采集卡与显卡在计算机硬件中担当着不同的角色,每个都具有不同的功能和硬件配置。采集卡主要用于数据采集
    的头像 发表于 01-09 14:41 2065次阅读

    IIC总线的FPGA实现说明

    DE2_TV中,有关于寄存器的配置的部分,采用的方法是通过IIC的功能,这里对IIC总线的FPGA实现做个说明。
    的头像 发表于 01-05 10:16 1052次阅读
    <b class='flag-5'>IIC</b>总线的FPGA实现说明