蓝桥杯嵌入式学习笔记----基于STM32G431RB---iic

一,蓝桥杯板子上有关iic的外设

挂在iic总线上的外设主要是e2prom-24C02和可编程逻辑电阻MSP4017。有关iic的基本原理个人感觉就是两根总线一条传数据即SDA和时钟线SCL。有关iic的相关文件官方有提供。

 二,24C02芯片

1.写操作(时序图和参考代码)

void iic_24c02_write(unsigned char *pucbuff,unsigned char ucAddr,unsigned char ucNum)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(ucAddr);
	I2CWaitAck();
	
	while(ucNum--)
	{
		I2CSendByte(*pucbuff++);
		I2CWaitAck();
	}
	I2CStop();
	delay1(500);
}

 2.读操作(时序图和源码)

void iic_24c02_read(unsigned char *pucbuff,unsigned char ucAddr,unsigned char ucNum)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(ucAddr);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	while(ucNum--)
	{
  *pucbuff++ = I2CReceiveByte();
		if(ucNum)
		I2CSendAck();
		else
		I2CSendNotAck();	
	}
	I2CStop();
}

3.有关设备地址的值计算

 由原理图可以知道,a2,a1,a0都接地了,所以都为零,所以读地址为a1,写地址为a0。

三,MSP4017可编程逻辑电阻

1,原理

 电阻的阻值和输入的N值是成正相关的,可调节的最大阻值是100k,结合N的取值范围,倍数关系是0.78740。下图是设备地址的计算方法。

2,写操作

void Write_register(unsigned char value)
{
	I2CStart();
	I2CSendByte(0x5E);
	I2CWaitAck();
	
	I2CSendByte(value);
	I2CWaitAck();
	I2CStop();
}

 3,读操作

unsigned char Read_register(void)
{
	unsigned char value;
	I2CStart();
	I2CSendByte(0x5f);
	I2CWaitAck();
	
  value=I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();
	return value;
}

4,与3.3伏电压之间的转换

3.3*((0.7874*RES_4017)/(0.7874*RES_4017+10))

为什么加10,因为涉及到和10k电阻的分压。

猜你喜欢

转载自blog.csdn.net/qq_59320783/article/details/128523366