• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-11
  • 语言: 其他
  • 标签: STM32  I2C  IIC  

资源简介

文件中包括基于STM32实现的模拟I2C操作,经测试能正确读写I2C设备。

资源截图

代码片段和文件信息

//---------------------------------------------------------------//
//- 文件名称: I2C.c
//---------------------------------------------------------------//
//- 作 者 : ggyy
//---------------------------------------------------------------//
//- 版  本 : V1.0
//---------------------------------------------------------------//
//- 日  期  : 20150313
//---------------------------------------------------------------//
//- 描  述 : 文件实现模拟I2C相关时序操作,单片机为STM32,使用
//- 的是V3.5.0的库
//---------------------------------------------------------------//
#include “I2C.h“
#include “delay.h“





//---------------------------------------------------------------//
//- 函数名称: I2C_Config
//---------------------------------------------------------------//
//- 函数功能: I2C初始化,包括引脚时钟和引脚配置
//---------------------------------------------------------------//
//- 函数参数:
//---------------------------------------------------------------//
//- 返回值  : 无
void I2C_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

//时钟使能
  RCC_APB2PeriphClockCmd(RCC_I2C_SCL ENABLE);
  RCC_APB2PeriphClockCmd(RCC_I2C_SDA ENABLE);

//SCL,配置成推挽输出
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_I2C_SCL;
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;
GPIO_SetBits(GPIO_I2C_SCL GPIO_Pin_I2C_SCL);
GPIO_Init(GPIO_I2C_SCL &GPIO_InitStructure);

//SDA,配置成开漏输出
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_I2C_SDA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;
GPIO_SetBits(GPIO_I2C_SDA GPIO_Pin_I2C_SDA);
GPIO_Init(GPIO_I2C_SDA &GPIO_InitStructure);

}





//---------------------------------------------------------------//
//- 函数名称: I2C_Start
//---------------------------------------------------------------//
//- 函数功能: I2C开始信号
//---------------------------------------------------------------//
//- 函数参数: 无
//---------------------------------------------------------------//
//- 返回值  : 无
void I2C_Start(void)
{
//当SCL为高电平的时候,SDA从高电平跳变到低电平表示开始信号。

I2C_SDA_SET; //拉高SDA,准备在SCL为高电平的状态下拉低形成开始信号
delay_us(4);
I2C_SCL_SET; //拉高SCL,准备让SDA拉低形成开始信号
delay_us(4);
  I2C_SDA_RESET; //拉低SDA,产生开始信号
delay_us(4);
I2C_SCL_RESET;
delay_us(4);
}





//---------------------------------------------------------------//
//- 函数名称: I2C_Stop
//---------------------------------------------------------------//
//- 函数功能: I2C结束信号
//---------------------------------------------------------------//
//- 函数参数: 无
//---------------------------------------------------------------//
//- 返回值  : 无  
void I2C_Stop(void)
{
//当SCL为高电平的时候,SDA从低电平跳变到高电平表示结束信号。

I2C_SCL_RESET; //拉低SCL,防止在SCL为高电平的状态下改变SDA
  delay_us(4);
I2C_SDA_RESET; //拉低SDA,准备在SCL为高电平的状态下拉高形成结束信号
  delay_us(4);
I2C_SCL_SET;  //拉高SCL,准备让SDA拉高形成结束信号
delay_us(4);
I2C_SDA_SET; //拉SDA,产生开始信号
delay_us(4);    
}





//-------------------------------------

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11696  2015-03-13 21:55  STM32_I2C\I2C.c

     文件       4512  2015-03-13 21:54  STM32_I2C\I2C.h

     文件        187  2015-03-13 22:03  STM32_I2C\readme.txt

     目录          0  2015-03-13 22:03  STM32_I2C

----------- ---------  ---------- -----  ----

                16395                    4


评论

共有 条评论