6.IIC

理论

参考51单片机IIC理论:链接

在起始信号后必须发送一个7位从机地址 + 1位方向位,用“0”表示主机发送数据,“1”表示主机接收数据

代码编写

IIC三个模式配置

IIC(阻塞模式)配置

主要方式

IIC(阻塞模式)配置

IIC(中断模式)配置

IIC(中断模式)配置

IIC(DMA模式)配置

IIC(DMA模式)配置

阻塞模式

mian.c

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();	//75行
MX_I2C1_Init();
/* USER CODE BEGIN Init */
OLED_Init();			//初始化OLED
OLED_Clear();
OLED_ShowCHinese(0,0,0);	//�?
OLED_ShowCHinese(18,0,1);	//�?
OLED_ShowCHinese(36,0,2);	//�?
OLED_ShowCHinese(54,0,3);	//�?
OLED_ShowCHinese(72,0,4);	//�?
OLED_ShowCHinese(90,0,5);	//�?
OLED_ShowCHinese(108,0,6);	//�?
OLED_ShowCHinese(0,2,6);	//�?
/* USER CODE END Init */

olde.c

/**********************************************
// IIC Write Command命令
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)	//10行
{
//   IIC_Start();
//   IIC_Write_Byte(0x78);            //Slave address,SA0=0
//   IIC_Write_Byte(0x00);			//write command
//   IIC_Write_Byte(IIC_Command);
//   IIC_Stop();
	 uint8_t IIC_Send_Cmd[]={0x00,IIC_Command};	//将两个数据放进数组
	 /* 参数1:指向 I2C_HandleTypeDef 结构的指针,该结构包含指定 I2C 的配置信息
	  * 参数2:设备地址,参数3:
	  * 参数4:要发送的数据量,参数5:超时持续时间
	  */
	 HAL_I2C_Master_Transmit(&hi2c1, 0x78, IIC_Send_Cmd, 2, 100);	//调用库函数阻塞发送IIC

}
/**********************************************
// IIC Write Data数据
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
//   IIC_Start();
//   IIC_Write_Byte(0x78);			//D/C#=0; R/W#=0
//   IIC_Write_Byte(0x40);			//write data
//   IIC_Write_Byte(IIC_Data);
//   IIC_Stop();
   uint8_t IIC_Send_Data[]={0x40,IIC_Data};	//将两个数据放进数组
   /* 参数1:指向 I2C_HandleTypeDef 结构的指针,该结构包含指定 I2C 的配置信息
	* 参数2:设备地址,参数3:
	* 参数4:要发送的数据量,参数5:超时持续时间
	*/
   HAL_I2C_Master_Transmit(&hi2c1, 0x78, IIC_Send_Data, 2, 100);

}

中断模式

mian.c与阻塞相同

oled.c

/**********************************************
// IIC Write Command命令
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)	//10行
{
//   IIC_Start();
//   IIC_Write_Byte(0x78);            //Slave address,SA0=0
//   IIC_Write_Byte(0x00);			//write command
//   IIC_Write_Byte(IIC_Command);
//   IIC_Stop();
	 uint8_t IIC_Send_Cmd[]={0x00,IIC_Command};	//将两个数据放进数组
	 /* 参数1:指向 I2C_HandleTypeDef 结构的指针,该结构包含指定 I2C 的配置信息
	  * 参数2:设备地址,参数3:
	  * 参数4:要发送的数据量
	  */
	 HAL_I2C_Master_Transmit_IT(&hi2c1, 0x78, IIC_Send_Cmd, 2);
	 HAL_Delay(1);	//如果不延时发太快不显示,但OLED显示太慢
}
/**********************************************
// IIC Write Data数据
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
//   IIC_Start();
//   IIC_Write_Byte(0x78);			//D/C#=0; R/W#=0
//   IIC_Write_Byte(0x40);			//write data
//   IIC_Write_Byte(IIC_Data);
//   IIC_Stop();
   uint8_t IIC_Send_Data[]={0x40,IIC_Data};	//将两个数据放进数组
   /* 参数1:指向 I2C_HandleTypeDef 结构的指针,该结构包含指定 I2C 的配置信息
	* 参数2:设备地址,参数3:
	* 参数4:要发送的数据量
	*/
   HAL_I2C_Master_Transmit_IT(&hi2c1, 0x78, IIC_Send_Data, 2);
   HAL_Delay(1);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星仔_X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值