AD5272基于STM32的I2C通讯代码示例

本文介绍了基于STM32的AD5272 I2C通信,详细讲解了I2C协议的基础概念,并提供了相关函数的代码示例,包括IIC初始化、读写操作等,帮助理解并实现两者间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AD5272 IIC通讯基于STM32

一、IIC介绍

IIC的概念:I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。IIC总线时序如图所示:

二、代码示例

IIC Set

//IO方向设置
#define SDA_IN()  {GPIOC->CRL&=0X0FFFFFFF;GPIOC->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOC->CRL&=0X0FFFFFFF;GPIOC->CRL|=(u32)3<<28;}

//IO操作函数 
#define IIC_SCL    PCout(6) 		//SCL
#define IIC_SDA    PCout(7) 		//SDA	 
#define READ_SDA   PCin(7) 	 		//输入SDA

//调试IIC延迟时间
int delay_I2C=2;

IIC init

//初始化IIC
void IIC_Init(void)
{
   
      
    RCC->APB2ENR|=1<<4;		//先使能外设IO PORTC时钟					
    GPIOC->CRL&=0X00FFFFFF;	//PC6/7 清空
    GPIOC->CRL|=0X33000000;	//PC6/7 推挽输出
    GPIOC->ODR|=3<<6;     	//PC6、7输出高
}

IIC Start

//产生IIC起始信号
void IIC_Start(void)
{
   
   
    SDA_OUT();     //sda输出
    IIC_SDA=1;	  	  
    IIC_SCL=1;
    delay_us(delay_I2C*2);
    IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
    delay_us(delay_I2C*2);
    IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
}

IIC Stop

//产生IIC停止信号
void IIC_Stop(void)
{
   
   
	SDA_OUT();//sda线输出
	IIC_SCL=0;
	IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
 	delay_us(delay_I2C*2);
	IIC_SCL=1; 
	IIC_SDA=1;//发送IIC总线结束信号
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值