首页 > 编程语言 >STM32 I2C介绍和软件模拟I2C编程要点

STM32 I2C介绍和软件模拟I2C编程要点

时间:2023-02-08 13:22:31浏览次数:44  
标签:SCL ACK 编程 STM32 GPIO I2C

I2C协议层独特特征:

1. 通过从地址(Slave Address)区分不同的设备。 

2. ACK信号体制,即通过ACK表示是否进行继续传输。

3.由SCL、SDA的四种关系,映射数据有效性、起始信号、结束信号。

STM的硬件I2C编程:

1. 通过初始化I2C结构体,配置硬件I2C(所有STM32设备都有的部分)

2.有特有的发送起始信号、结束信号,使能 ACK信号的相关库函数命令。不需要手动模拟GPIO,由硬件按协议层要求发送。

3. 有特有的事件检测(EV)库函数和宏定义。通过检测各种事件,达到数据传输的可靠性。

STM32 软件模拟I2C编程要点

1. 配置GPIO的时候,模式要选择开漏输出(GPIO_Mode_Out_OD):(STM32硬件编程I2C时,为复用开漏输出GPIO_Mode_AF_OD)

 2. 编写I2C协议层函数时,特别注意接收数据函数的左移次数

//I2C协议规定:发送数据以一个字节(8bit)为单位,不能多也不能少。
//接收时,一位一位传输,优先接收高位(MSB)
//当SCL为0时,SDA数据可变化(此时数据无效),SCL为1时,SDA数据有效
uint8_t i2c_ReadByte(void)
{

    uint8_t dat = 0;
    uint8_t i;
    for(i=0; i<8; i++)
    {
        dat <<= 1;//循环总共进行8次,但有效的左移(采集数据位后)应该为7次,此语句不能放在接收收据之后
        SCL_1;
        i2c_Delay();
        if(EEPROM_I2C_SDA_READ() == 0)
        {
            dat &= ~(1<<0);
        }else
        {
            dat |= (1<<0);
        }//dat <<= 1;不能放在这里
    SCL_0; 
    i2c_Delay(); }

return dat; }

 注:另外,发送数据函数的左移语句应该放在数据位采集之后。

标签:SCL,ACK,编程,STM32,GPIO,I2C
From: https://www.cnblogs.com/FBsharl/p/17101391.html

相关文章

  • java多线程编程核心技术(1丶2章)
    java多线程编程第一章:实现多线程编程主要有两种方式,一种是继承Thread类,另一种是实现Runnable接口。使用继承Thread类的方式创建新线程时,最大的......
  • C++编程中遇到的问题
    函数中无法通过sizeof运算得到数组的大小及维数,因为,数组形参实际上是指针类型。#include<iostream>usingnamespacestd;//数组作为参数时,退化为简单的指针voidg......
  • Linux编程入门
    GCCGNU编译器'-std=c99'表示指定编译标准安装sudoaptinstallgccg++查看版本gcc/g++-v/--version运行gcctest.c-oapp(编译)./app其中,app为自命名,可......
  • Linux下线程编程(1)
    1.线程简介  线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可......
  • 高级Excel图表教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介高级Excel图表初学者教程-从基本到高级概念的简单简单步骤学习高级Excel图表,包括简介,瀑布,乐队,甘特,温度计,仪表,子弹,漏斗,华夫饼干,踏板,盒子和晶须,帕累托,组织结构图,热......
  • STM32MP157开发板Linux+Qt项目实战:智慧家庭
    stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux+单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7......
  • Amazon RDS 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介AmazonRDS初学者教程-从基本到高级概念的简单简单步骤学习AmazonRDS,其中包括概述,环境,接口,数据库实例,数据库存储,MSSQL功能,MSSQL创建数据库,MSSQL连接到数据库......
  • CICS教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介CICS快速指南-从CICS概述,环境,基本术语,Nucleus,事务,COBOL基础知识,BMS,MAP,接口块,伪编程,辅助密钥,文件处理,错误处理,控制操作,简单而简单的步骤学习CICS临时存储,互通,状......
  • CICS教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介CICS快速指南-从CICS概述,环境,基本术语,Nucleus,事务,COBOL基础知识,BMS,MAP,接口块,伪编程,辅助密钥,文件处理,错误处理,控制操作,简单而简单的步骤学习CICS临时存储,互通,状态......
  • 亚马逊商城入门教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介亚马逊商城快速指南-从简单和简单的步骤开始学习亚马逊商城,从基本到高级概念,包括为什么选择亚马逊?,亚马逊优势,帐户类型,销售什么?,产品列表,费用,帐户设置,购买盒,运输......