STM32 IIC通用程序
STM32开发之STM32硬件IIC操作
STM32 开发之STM32 硬件IIC 操作STM32 具有IIC 接口,接口有以下主要特性
多主机功能:该模块既可做主设备也可做从设备
主设备功能
C 地址检测
产生和检测7 位/10 位地址和广播呼叫
支持不同的通讯速度
状态标志:
发送器/接收器模式标志
字节发送结束标志
总线忙标志
错误标志
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通信例程
文档说明:本文档仅提供最基础的操作函数,包含四个函数分别为: 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程序代码
最近用到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上使用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实例代码
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读写程序的详细讲解
一、概述
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源代码
* 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总线通讯原理及程序设计
版本号: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应⽤
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系列是意法半导体公司推出的一款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程序
听说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从机代码例程
以下是一个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实验
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,全称为Inter-Integrated Circuit,是一种常见的串行通信协议,用于在电子设备之间进行数据传输。在很多电子产品中,IIC总线被广泛应用,比如各种传感器、存储器芯片、显示屏等等。IIC总线有两种设备,即主机和从机,主机负责控制总线上的通信,而从机则被动地响应主机的命令。
在本文中,我们将重点讨论IIC从机代码例程的制作。从机代码是指实现IIC通信协议的一组程序,用于从机设备与主机设备进行数据传输。在制作IIC从机代码例程时,需要考虑一系列因素,包括从机设备的特性、通信协议的格式、数据传输的安全性等等。
制作IIC从机代码例程需要了解从机设备的硬件特性。不同的从机设备在硬件上有不同的接口结构和通信要求,因此需要根据具体的从机设备来编写相应的代码。通常来说,从机设备会有一个IIC接口或是IIC引脚,通过这个接口来进行数据传输。在编写从机代码例程时,需要注意从机设备的接口类型、通信速率、寄存器地址等硬件相关的信息。
制作IIC从机代码例程需要了解通信协议的格式。IIC通信协议有以下几个重要的部分:起始信号、地址和数据传输、应答位、停止信
号。在编写从机代码时,需要按照这个格式来进行通信。起始信号是
一个特定的电平变化,表示通信的开始;地址和数据传输是主机向从
机发送命令或数据;应答位是从机设备返回的一个应答信号,表示是
否成功接收数据;停止信号是一个特定的电平变化,表示通信的结
束。
制作IIC从机代码例程需要考虑数据传输的安全性。在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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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