使用DMA 的 i2c 0.96寸OLED驱动

1.打开I2c,使用默认参数

2.打开i2c的DMA,保持默认

3.打开i2c的中断

4.在项目管理里将DMA的初始化放到i2c初始化之前(很重要

之后生成项目。

在oled的驱动中修改以下函数:

#define SSD1302_ADDR 						0x78	//IIC通讯地址
#define WRITE_CMD 							0x80	//控制字节指定下一个字节为命令 1000 0000b
#define WRITE_DATA 							0x40	//控制字节指定下一个字节为数据 0100 0000b


void SSD1306_WriteCmd(uint8_t cmd)
{
	uint8_t i2c_count = 0;
	
	while(__HAL_I2C_GET_FLAG(&hi2c1, I2C_FLAG_BUSY))  //I2C忙
	{
		HAL_Delay(1);
		i2c_count++;
		
		if(i2c_count > 100)
			break;
	} 
	
	if(i2c_count < 100)
	{	
		HAL_I2C_Mem_Write(&hi2c1, SSD1302_ADDR, WRITE_CMD, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 10);
	}    
}
 

uint8_t OLED_GRAM[128*8+1];	

//更新图像到oled		 
void OLED_Refresh_Gram(void)
{
	OLED_GRAM[0] = WRITE_DATA; 
	HAL_I2C_Master_Transmit_DMA(&hi2c1, SSD1302_ADDR, OLED_GRAM, 128*8+1);
}

//清屏函数  
void OLED_Clear(void)  
{  
	memset(OLED_GRAM,0,128*8+1);
	
	OLED_Refresh_Gram();
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在STM32 HAL库下实现硬件IIC DMA控制0.96OLED屏,可以按照以下步骤进行: 1. 配置IIC接口:使用HAL库提供的I2C功能函数,初始化IIC接口并配置相关参数,例如时钟频率、地址等等。可以通过HAL_I2C_Init()函数完成此步骤。 2. 配置DMA使用HAL库提供的DMA功能函数,初始化DMA控制器,并配置相应的通道和数据传输方向。可以通过HAL_DMA_Init()函数完成此步骤。 3. 配置OLED屏:根据OLED屏的规格和数据手册,设置正确的OLED屏地址和显示模式等参数。 4. 编写DMA传输函数:使用HAL库提供的DMA传输函数,编写发送和接收数据的函数。可以通过HAL_DMA_Transmit()和HAL_DMA_Receive()函数来实现。 5. 编写显示函数:根据OLED屏的规格和显示方式,编写显示函数。可以使用HAL库提供的IIC发送函数,将相关数据发送给OLED屏进行显示。 6. 调用相关函数:在主函数中,调用初始化函数和显示函数,完成整个过程。可以使用HAL库提供的循环发送函数,实现周期性的OLED屏数据显示。 需要注意的是,在实现过程中,需要合理配置DMA传输的通道和缓冲区大小,保证数据的正确传输。并且,应遵循相应的时序规范,确保数据传输的准确性和稳定性。 总结:以上是一种实现硬件IIC DMA控制0.96OLED屏的简要步骤。通过使用STM32 HAL库提供的相关功能函数,结合正确的配置和调用,可以实现相应的功能。具体的实现过程中,可能还需要根据具体的硬件和使用环境进行一些适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值