STM32 IIC通用程序

合集下载

STM32开发之STM32硬件IIC操作

STM32开发之STM32硬件IIC操作

STM32 开发之STM32 硬件IIC 操作STM32 具有IIC 接口,接口有以下主要特性

多主机功能:该模块既可做主设备也可做从设备

主设备功能

C 地址检测

产生和检测7 位/10 位地址和广播呼叫

支持不同的通讯速度

状态标志:

发送器/接收器模式标志

字节发送结束标志

总线忙标志

错误标志

stm32IIC程序

stm32IIC程序

#include "IIC.h"
#include "delay.h"
/**************************************************************************
函数名称:IIC_Init(void)

能:初始化IIC使用的引脚。此处使用stm32的PB10/PB11来模拟IIC通信

明:IIC通信时,接收到数据,从机(Slave)会发出ACK信号,一般是一个低电

信号出现在SDA线上,若主机检测到,则认为此次通信成功

意:应答信号是在SCL为高电平器件,SDA一直为低电平表示应答
***************************************************************************/
GPIOB->ODR|=3<<10;
//PB10 11输出高
}
/**************************************************************************
函数名称:IIC_Start(void)
功 能:产生IIC起始信号(ST)

数:无
返回值 : 无
IIC_Stop(); return 1; } } IIC_SCL=0; return 0; }

STM32系列 的IIC通信例程

STM32系列 的IIC通信例程
关于 STM32F103RC 芯片对 EEPROM 芯片 AT24C6 4 的 II C 通信 AT24C64 IIC
文档说明:本文档仅提供最基础的操作函数,包含四个函数分别为: M (1)void I2C_EEPROM_WriteByte(unsigned short WordAddress), 此函数是对 EEPRO EEPROM 进行一次随机地址写一个字节数据操作。 (2)void I2C_EEPROM_WritePage(unsigned short WordAddress, unsigned char *data, unsigned int length),此函数是对 EEPROM 进行指定起始地址连续写 N 个数据。 (3)unsigned char I2C_EEPROM_ReadByte(unsigned short WordAddress) ,此函数是对 EEPROM 进行随机地址读取一个字节数据。 (4)void I2C_EEPROM_SeqReadByte(unsigned short WordAddress, unsigned char* array, unsigned int number),此函数是对 EEPROM 进行随机首地址连续读取 N 个数据。 #define I2C1_SLAVE_ADDRESS7 #define I2C_Speed 100000 0xA0 // AT24C64 Device address //IIC 速率为 100K

STM32模拟IIC读写24C02程序代码

STM32模拟IIC读写24C02程序代码

STM32模拟IIC读写24C02程序代码

STM32 模拟IIC读写24C02程序代码

最近用到STM32F103V来读写A T24C02 EEPROM 于是从原来51单片机的程序代码的基础上修改了下,移植到了STM32,测试工作正常。

引脚定义和配置:

#define SCL GPIO_Pin_6 //24C02 SCL

#define SDA GPIO_Pin_7 //24C02 SDA

void GPIO_Configuration(void)

{

RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |

RCC_APB2Periph_GPIOE, ENABLE);

GPIO_InitStructure.GPIO_Pin = SCL; //24C02 SC L

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = SDA; //24C02 SDA 作为输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

stm32 i2c 读写波形

stm32 i2c 读写波形

stm32 i2c 读写波形

STM32的I2C通信是一种串行通信协议,用于在微控制器和外围设备之间进行数据传输。下面是一个简单的示例,说明如何在STM32上使用HAL 库进行I2C读写操作。

首先,确保你已经配置了I2C的时钟和引脚。以下代码示例是在STM32 HAL库中实现的,用于向特定的I2C地址写入数据并从中读取数据。

写操作:

```c

include "stm32f1xx_"

I2C_HandleTypeDef hi2c1;

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_I2C1_Init(void);

int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_I2C1_Init();

uint8_t WriteBuffer[2] = {0x00, 0x01}; // 写入的数据

HAL_I2C_Master_Transmit(&hi2c1, WriteBuffer, 2, 1000); // 发送数据 while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY); // 等待传输完成

// ...

}

```

读操作:

```c

include "stm32f1xx_"

I2C_HandleTypeDef hi2c1;

void SystemClock_Config(void);

stm32实例代码

stm32实例代码

stm32实例代码

1.点亮LED:使用STM32控制IO口,实现LED灯的点亮与熄灭。

2. 定时器中断:使用STM32的定时器模块,实现定时器中断功能,并通过中断实现LED灯的闪烁。

3. PWM波输出:使用STM32的定时器模块,实现PWM波的输出,并控制LED灯的亮度。

4. ADC采集:使用STM32的ADC模块,实现模拟信号的采集,并将采集到的数据转换为数字信号。

5. UART通信:使用STM32的UART模块,实现与PC机之间的串口通信,并实现数据的传输和接收。

6. IIC总线通信:使用STM32的IIC模块,实现STM32与其他设备之间的IIC总线通信,并实现数据的传输和接收。

7. SPI总线通信:使用STM32的SPI模块,实现STM32与其他设备之间的SPI总线通信,并实现数据的传输和接收。

8. 蜂鸣器控制:使用STM32控制IO口,实现蜂鸣器的控制,实现不同频率的声音输出。

9. OLED显示:使用STM32的SPI模块,实现OLED屏幕的显示,并实现文字和图像的显示。

10. 无线通信:使用STM32的无线通信模块,实现STM32之间或者与其他设备之间的无线通信,实现数据的传输和接收。

- 1 -

stm32的i2c读写程序的详细讲解

stm32的i2c读写程序的详细讲解

一、概述

STMicroelectronics瑞士意法半导体公司的STM32系列微控制器被

广泛应用于各种嵌入式系统中,其强大的性能和丰富的外设功能受到

了众多开发者的青睐。其中,STM32的I2C总线通信功能在实际应用中具有重要意义,本文将对STM32的I2C读写程序进行详细讲解。

二、I2C总线介绍

I2C(Inter-Integrated Circuit)总线是一种串行通信接口协议,由Philips公司推出。它具有双向传输数据线(SDA)、时钟线(SCL)、起始条件、停止条件、数据传输的应答信号等特点。I2C总线在各种传感器、存储器、外设等设备之间进行通信时,具有简单高效的优势。

三、STM32的I2C外设

1. STM32的I2C外设功能

STM32系列微控制器内置了丰富的外设功能,其中包括了I2C总线通信。STM32的I2C外设支持主机和从机模式,可以实现与各种I2C设备的通信和数据交换。

2. STM32的I2C外设配置

在使用STM32的I2C外设之前,需要对其进行配置,包括设置时钟、GPIO、寄存器参数等。通过正确的配置,可以使STM32的I2C外设

正常工作,并与其他设备进行可靠的通信。

四、STM32的I2C读写程序详解

1. 初始化I2C外设

在使用I2C总线进行读写操作之前,首先需要对STM32的I2C外设进行初始化设置。具体步骤包括设置GPIO管脚为I2C功能模式、配置时钟、设置I2C的工作模式、设定传输速率等。

2. 发送起始信号

当I2C通信开始时,主机会发送起始信号(Start),表明要开始一次通信过程。起始信号的发送方式是通过在SDA线上拉低电平,同时保持SCL线处于高电平状态。

STM32系列芯片I2C源代码

STM32系列芯片I2C源代码

* Input
: - pBuffer1, pBuffer2: buffers to be compared.
*
: - BufferLength: buffer's length
* Output
Байду номын сангаас
: None
file:///C|/Users/ding/Desktop/I2C.txt[2014/9/12 22:53:03]
* Input
: None
* Output
: None
* Return
: None
*******************************************************************************/
void GPIO_Configuration(void)
宏定义:#define I2C_Simulator 若有此定义将使用GPIO模拟实现IIC通讯协议,否则使用芯片内部硬件IIC 协议
使用方法: 1.设定一个芯片型号 在H文件中设定 2.调用void I2C_EE_Init(void);函数初始化端口 3.调用void I2C_EE_BufferWrite(u8* pBuffer, u32 WriteAddr, u32 NumByteToWrite);函数写操作 4.调用void I2C_EE_BufferRead(u8* pBuffer, u32 ReadAddr, u32 NumByteToRead);函数读操作*/

4.21 STM32 外设篇-IIC总线通讯原理及程序设计

4.21 STM32 外设篇-IIC总线通讯原理及程序设计

版本号:V2.2
第 4 页 共 16 页
官方网站:www.zxkjmcu.com
(众想)哈尔滨卓恩科技开发有限公司
STM32 开发板用户使用手册
发送。
在一个字节传输的 8 个时钟后的第 9 个时钟期间,接收器必须回送一个应答
位(ACK)给发送器。参考下图。
图二 I2C 总线协议 4.21.3 实验目的
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK) */ while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL 作为系统时钟 */ } } void delay(u32 nCount) { for(;nCount!=0;nCount--); } /*********************************************************************** * 名 称:delay_us(u32 nus) * 功 能:微秒延时函数 * 入口参数:u32 nus * 出口参数:无 * 说 明: * 调用方法:无 ***********************************************************************/ void delay_us(u32 nus) {
(众想)哈尔滨卓恩科技开发有限公司

stm32之IIC应用

stm32之IIC应用

stm32之IIC应⽤

stm32 之IIC应⽤

iic协议是⽐较简单的双线协议,时钟线CLK和数据线SDA。

⼀般我们常见的还有spi总线,这种总线可以可以根据需要扩展,还有单总线等等

这次还以at240c2为例进⾏操作!

PS:这就是传说中的iic时序图

硬件构造我们不过多的分析,今天⽤到库了!我们先从库函数硬件iic初始化说起!PB6 -- CLK

PB7 -- SDA

[cpp]view plaincopyprint?

1. void i2c_init(u8 addr,u32 clock)

2. {

3. I2C_InitTypeDef i2c;

4. RCC->APB2ENR |= 1<<3;

5. GPIOB->CRL |= (u32)0xff<<(6*4);

6.

7. RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);

8. i2c.I2C_Ack = I2C_Ack_Enable;

9. i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

10. i2c.I2C_ClockSpeed = clock*1000;

11. i2c.I2C_DutyCycle = I2C_DutyCycle_2;

12. i2c.I2C_Mode = I2C_Mode_I2C;

13. i2c.I2C_OwnAddress1 = addr;

14.

15. I2C_Cmd(I2C1,ENABLE);

STM32系列IIC使用总结

STM32系列IIC使用总结

STM32系列IIC使用总结

STM32系列是意法半导体公司推出的一款32位ARM Cortex-M微控制

器系列产品,广泛应用于各类嵌入式系统中。其中,IIC总线是STM32系

列产品中常用的通信接口之一,用于连接各种外部设备,如传感器、存储器、LCD显示屏等。下面是对STM32系列IIC使用的总结。

一、STM32IIC硬件功能

1. IIC接口引脚:STM32的IIC接口引脚有两个,分别是SDA

(Serial Data)和SCL(Serial Clock)。

2.多主机模式支持:STM32的IIC接口支持多主机模式,可以实现多

个主机同时操作同一个从机设备。

3. 速率控制:STM32的IIC接口支持多种速率配置,包括标准模式(100Kbps)、快速模式(400Kbps)和高速模式(1Mbps)等。

4.IIC总线协议支持:STM32的IIC接口遵循I2C总线协议,支持7

位或10位设备地址,支持字节读写、页写、设备寻址等操作。

二、STM32IIC软件开发步骤

1.初始化IIC接口:使用STM32提供的库函数,配置IIC引脚为复用

功能,并初始化IIC控制器的寄存器,包括速率设置、硬件过滤器配置等。

2.开启IIC总线:调用库函数,使能IIC总线,准备进行通信。

3.生成起始位和停止位:调用库函数,发送起始位和停止位信号,控

制IIC总线的起始和停止状态。

4.发送器件地址:调用库函数,发送要操作的设备的地址信息,用于

将总线上的控制权交给该设备。

5.发送数据或接收数据:调用库函数,根据需要发送数据或接收数据,并处理数据的传输错误等异常情况。

STM32F10X--模拟IIC程序

STM32F10X--模拟IIC程序

STM32F10X--模拟IIC程序

听说STM32的IIC硬件做的很鸡肋,所以在这⾥通过模拟的⽅式实现IIC协议。此程序能成功对AT24C02操作。程序中的带参数宏 IIC_DELAY(time)的功能是延时time us,在实际中具体场合具体分析。

宏定义⽂件--IIC.h

#ifndef _IIC_

#define _IIC_

#include "SysTick.h"

#include "stm32f10x.h"

#include "SystemConfig.h"

/* 配置IIC的SDA、SCL两个端⼝ */

#define IIC_SCL_IO GPIO_Pin_6

#define IIC_SDA_IO GPIO_Pin_7

/* SDA端⼝动态改变输⼊输出状态定义 */

#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0X80000000;} //配置上拉输⼊

#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0X30000000;} //配置推挽输出

/* IIC 操作定义 */

#define IIC_SDA PBOUT(7) //定义的STM32位操作

#define READ_SDA PBIN(7)

#define IIC_SCL PBOUT(6)

#define IIC_DELAY(time) delay(time)

/* 定义的函数原型 */

void IIC_IOInit(void);

iic从机代码例程

iic从机代码例程

iic从机代码例程

以下是一个STM32单片机作为从设备(Slave)发送数据给另一个STM32单片机作为主设备(Master)进行接收的IIC通信例程:

```c

#include "stm32f10x.h"

#include "stdio.h"

#include "string.h"

// IIC 总线定义

#define I2C_SCL_Pin_6 // SCL 引脚

#define I2C_SDA_Pin_7 // SDA 引脚

#define I2C_SCL_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_6) // 将 SCL 拉低

#define I2C_SCL_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_6) // 将 SCL 拉高

#define I2C_SDA_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_7) // 将 SDA 拉低

#define I2C_SDA_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_7) // 将 SDA 拉高

// IIC 总线初始化

void I2C_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

// 开启GPIOB 时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

// SCL、SDA 复用推挽输出

GPIO_initStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

stm32实验 IIC实验

stm32实验 IIC实验
KEY_Init();//按键初始化
AT24CXX_Init();//IIC初始化
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"IIC TEST");
while(AT24CXX_Check())//检测不到24c02
{
LCD_ShowString(60,150,200,16,16,"24C02 Check Failed!");
delay_ms(500);
LCD_ShowString(60,150,200,16,16,"Please Check! ");
LCD_ShowString(60,190,200,16,16,datatemp);//显示读到的字符串
}
i++;
delay_ms(10);
if(i==20)
{
LED0=!LED0;//提示系统正在运行
i=0;
}
}
}
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/9/9");

iic从机代码例程

iic从机代码例程

iic从机代码例程

全文共四篇示例,供读者参考

第一篇示例:

IIC,全称为Inter-Integrated Circuit,是一种常见的串行通信协议,用于在电子设备之间进行数据传输。在很多电子产品中,IIC总线被广泛应用,比如各种传感器、存储器芯片、显示屏等等。IIC总线有两种设备,即主机和从机,主机负责控制总线上的通信,而从机则被动地响应主机的命令。

在本文中,我们将重点讨论IIC从机代码例程的制作。从机代码是指实现IIC通信协议的一组程序,用于从机设备与主机设备进行数据传输。在制作IIC从机代码例程时,需要考虑一系列因素,包括从机设备的特性、通信协议的格式、数据传输的安全性等等。

制作IIC从机代码例程需要了解从机设备的硬件特性。不同的从机设备在硬件上有不同的接口结构和通信要求,因此需要根据具体的从机设备来编写相应的代码。通常来说,从机设备会有一个IIC接口或是IIC引脚,通过这个接口来进行数据传输。在编写从机代码例程时,需要注意从机设备的接口类型、通信速率、寄存器地址等硬件相关的信息。

制作IIC从机代码例程需要了解通信协议的格式。IIC通信协议有以下几个重要的部分:起始信号、地址和数据传输、应答位、停止信

号。在编写从机代码时,需要按照这个格式来进行通信。起始信号是

一个特定的电平变化,表示通信的开始;地址和数据传输是主机向从

机发送命令或数据;应答位是从机设备返回的一个应答信号,表示是

否成功接收数据;停止信号是一个特定的电平变化,表示通信的结

束。

制作IIC从机代码例程需要考虑数据传输的安全性。在IIC通信中,数据的正确传输是非常重要的。为了确保数据的安全性,可以采用一

STM32配置IIC接口通信方式参考源码

STM32配置IIC接口通信方式参考源码

STM32配置IIC接口通信方式参考源码

全部分类移动开发与应用WEB前端架构与运维程序设计数据库操作系统热点技术综合STM32配置IIC 接口通信方式参考源码90阅读0评论2016-11-30 zhuimengcanyang

分类:嵌入式最近在读取SHT3x系列sensor的温度和湿度,用到的是IIC接口。

顺便写了一下STM32的IIC接口。这次配置的是STM32内部的IIC接口。注意:读的时候,怎么发送Ack, 和NAck 信号,参考stm的设计文档。点击(此处)折叠或打开

#include 'Dev_SHT3X.h'

#include 'globalDef.h'

#include stdio.h>

#define I2C1_OWN_ADDRESS7 0x0A

#define I2C_Speed 40000

#define SHT3X_ADDRESS 0x44

/* read out command */

#define CMD_READH_SHX 0x2c

#define CMD_READL_SHX 0x06

/**

* SHX device: IIC1

* PB6 - SCL

* PB7 - SDA

*/

static void IIC_gpioConfig(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* 使能与I2C1 有关的时钟*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,E NABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,EN ABLE);

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#ifndef __I2C_Configuration_H
#define __I2C_Configuration_H
#include
#include"GPIO_Configuration.h"
#include"RCC_Configuration.h"
#include"Delay_Configuration.h"

typedef struct
{GPIO_TypeDef* GPIOx;
u16 GPIO_Pin;
}I2C_SCL;
I2C_SCL SCL;

typedef struct
{GPIO_TypeDef* GPIOx;
u16 GPIO_Pin;
}I2C_SDA;
I2C_SDA SDA;

/*IIC总线启动*/
void I2C_Start ()//I2C开始
{GPIO_Output_I2C_Configuration(SCL.GPIOx,SCL.GPIO_Pin); //SCL置输出
GPIO_Output_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输出
GPIO_SetBits(SDA.GPIOx, SDA.GPIO_Pin);//SDA=1;
delay_us(10);
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=1;
delay_us(10);
GPIO_ResetBits(SDA.GPIOx, SDA.GPIO_Pin);//SDA=0;
delay_us(10);
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
delay_us(10);
}

/*IIC总线结束*/
void I2C_Stop () //I2C结束
{
GPIO_Output_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输出
GPIO_ResetBits(SDA.GPIOx, SDA.GPIO_Pin);//SDA=0;
delay_us(10);
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=1;
delay_us(10);
GPIO_SetBits(SDA.GPIOx, SDA.GPIO_Pin);//SDA=1;
delay_us(10);
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
delay_us(10);
}

/*主机检查从机的响应信号*/
bool I2C_Slave_ACK(void) // 检查从机应答信号,返回0有ACK,返回1无ACK
{ bool ACK;
u8 s1;
GPIO_Input_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输入
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=1;
s1=GPIO_ReadInputDataBit(SDA.GPIOx,SDA.GPIO_Pin);
if (s1)
{ACK = TRUE;}
else
{ACK = FALSE;}
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
return(ACK);
}

/*主机发送IIC总线上一个字节数据*/
void I2C_SendByte(u8 data) //发送一个字节
{u8 bitcount=8; //发送8位
GPIO_Output_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输出
do
{ if((data&0x80)==0x80)
{GPIO_SetBits(SDA.GPIOx, SDA.GPIO_Pin);}//SDA=1,写 1
else
{GPIO_ResetBits(SDA.GPIOx, SDA.GPIO_Pin);}//SDA=0,写 0
data=data<<1;
delay_us(10);
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
delay_us(10);
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin); //SCL=1;
delay_us(10); //在时钟大于4u秒期间写数据
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
bitcount--;
} while(bitcount);
}

/*主机接收IIC总线上一个字节数据*/
u8 I2C_ReciveByte(void) //接受一个字节
{
u8 s1=0,temp1=0;
u8 bitcount1=8;
GPIO_Input_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输入
GPIO

_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
do
{delay_us(10); //在时钟大于4u秒期间读数据
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin); //SCL=1;

s1=GPIO_ReadInputDataBit(SDA.GPIOx, SDA.GPIO_Pin);
if(s1) //读 1
{temp1=temp1|0x01;}
else //读 0
{temp1=temp1&0xfe;}
delay_us(10);
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
if(bitcount1-1)
{temp1=temp1<<1;}
bitcount1--;
}while(bitcount1);
return(temp1);
}

/*主机向IC总线发送连续读信号*/
void I2C_ack(void) // 发送连续读信号
{
GPIO_Output_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输出;
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
delay_us(5);
GPIO_ResetBits(SDA.GPIOx, SDA.GPIO_Pin);//SDA=0;
delay_us(5);
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin); //SCL=1;
delay_us(5);
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
}

/*主机向IC总线发送不连续读信号*/
void I2C_nack(void) // 发送不连续读信号
{
GPIO_Output_I2C_Configuration(SDA.GPIOx,SDA.GPIO_Pin); //SDA置输出 ;
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
delay_us(5);
GPIO_SetBits(SDA.GPIOx, SDA.GPIO_Pin);//SDA=1;
delay_us(5);
GPIO_SetBits(SCL.GPIOx, SCL.GPIO_Pin); //SCL=1;
delay_us(5);
GPIO_ResetBits(SCL.GPIOx, SCL.GPIO_Pin);//SCL=0;
}
#endif

相关文档
最新文档