单片机
返回首页

stm32中的i2c协议编程

2019-07-13 来源:eefocus

        在上篇博客中,我已经介绍完了i2c的各种特征,这次就结合师兄给我的编程实例来分析学习。首先i2c协议的编程可以分为硬件i2c和模拟i2c,一般在51之类的低端单片机都是使用模拟i2c(即用软件编程来控制io口上的时序变化以符合i2c协议的biao标准),而在stm32一类的中高端单片机本身就自带可以某些硬件gpio口自动实现i2c协议。下面就分别讨论下两种方式的编程初始化配置过程。


       1.1.模拟i2c编程


       1.1.1初始化i2c函数


       首先i2c协议通信需要两根总线数据线SDA与时钟线SCL,所以我们先选择两个gpio口进行相应初始化。gpio口的初始化过程在之前博客也详细介绍过这里就不过多赘述,主要就是调用库函数开启gpio口时钟,选择输入输出模式在i2c通信中我们选择是推挽留输出,然后速度是50MHZ。最后在把定义好的SDA与SCL拉高,准备进行i2c通信。i2c初始化函数如下图:


     1.1.2 起始信号与结束信号函数


     在初始化函数编写完后,我们按照i2c协议中时序图所需要的起始信号和结束信号以及应答信号的编写。整个编程过程严格对照下图的数据传输图以及时序图:


 

       如上图可知,要产生起始信号条件即为在SCL为高电平的情况下,SDA产生一个下降沿脉冲。同理结束信号便是在SCL为高电平的情况下,SDA产生一个上升沿脉冲。具体实现代码如下:


      


   1.1.3发送数据函数


       由于i2c协议规定发送数据一次只能发送一个字节8位,所以我们编程也要严格按照标准。编程内容主要先定义一个8位发送数据,然后将时钟总线SCL拉低这一步非常重要,因为在SCL为高电平时SDA的变化都是起始或者停止信号,所以要发送数据必须先拉低。一个字节的发送数据8位,用右移一位位发送即可,最后是默认收到应答信号故不再编写应答信号函数。整个编程代码如下图:


      2.1.硬件i2c


       硬件i2c的初始化过程和软件i2c相似,同样都需要初始化配置gpio口,然后配置下i2c硬件的模式。具体的起始信号以及结束信号以及应答函数都在官方固件库中编写好了,所以只需调用配置模式即可。具体编程代码如下图:


   具体发送函数会根据不同的接受设备而有一些变化,以上代码是根据与CH423进行通信的编程,也请读者们参考时留心。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用数字电路CD4069制作的万能遥控轻触开关

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章