#蓝桥杯嵌入式#IIC的配置

参考资料:
      蓝桥杯嵌入式备赛手册
总目录:目录

硬件连接

  • 查看电路原理图,里面I2C内容
    在这里插入图片描述
  • 发现有SCL和SDA分别连接到PB6和PB7
  • 进一步查看SCL和SDA
    在这里插入图片描述
  • 参考官方给出的芯片资料,其中的AT24C02即是EPROM的资料
  • 里面关于字节读写部分(figure8和figure11):
    在这里插入图片描述
    在这里插入图片描述

利用官方资料快速编写

  • 官方赛点资源数据包中,底层驱动代码参考里有i2c.c和i2c.h,直接复制来用
  • 在i2c.c中添加E2PROM的读写驱动代码:
void E2PROM_Write(u8 add, u8 data)
{
	I2CStart();
	
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(add);
	I2CWaitAck();
	
	I2CSendByte(data);
	I2CWaitAck();
	
	I2CStop();
}

u8 E2PROM_Read(u8 add)
{
	u8 data;
	
	I2CStart();
	
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(add);
	I2CWaitAck();
	
	I2CStart();
	
	I2CSendByte(0xa1);
	I2CWaitAck();
	
	data = I2CReceiveByte();
	I2CSendAck();
	
	return data;
}
  • 比赛时不仅仅会让读写一个Byte的数据,可能让读写int型或者float型数据
  • 读写一个u32类型的数据如下:
void x24_write_int(u8 add, int data)
{
	x24_write(add,(u8)(data&0xff));
	delay_ms(2);
	x24_write(add+1,(u8)(data>>8&0xff));
	delay_ms(2);
	x24_write(add+2,(u8)(data>>16&0xff));
	delay_ms(2);
	x24_write(add+3,(u8)(data>>24&0xff));
	delay_ms(2);
}

int x24_read_int(u8 add)
{
	int data;
	data=(int)x24_read(add);
	delay_ms(2);
	data+=(int)x24_read(add+1)<<8;
	delay_ms(2);
	data+=(int)x24_read(add+2)<<16;
	delay_ms(2);
	data+=(int)x24_read(add+3)<<24;
	delay_ms(2);
	return data;
}
  • 连续读最好延时2ms,连续写延时5ms(建议都延时5ms)
	u8 data=0;
	data=x24_read(0x01);
	delay_ms(5);
	data++;

main.c编写

#include "stm32f10x.h"
#include "lcd.h"
#include "i2c.h"
#include "stdio.h"

u32 TimingDelay = 0;

void Delay_Ms(u32 nTime);

//Main Body
int main(void)
{
	u8 isLight, tmp[20];
	
	SysTick_Config(SystemCoreClock/1000);
	i2c_init();
	Delay_Ms(200);
	
	STM3210B_LCD_Init();
	LCD_Clear(Blue);
	LCD_SetBackColor(Blue);
	LCD_SetTextColor(White);

	isLight = E2PROM_Read(0x00);
	E2PROM_Write(0x00, ++isLight);
	sprintf((char*)tmp, "Data:%d", E2PROM_Read(0x00));
	LCD_DisplayStringLine(Line4 ,tmp);
	
	while(1);
}

//
void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值