STM32CUBEMX_硬件IIC接口操作OLED屏幕

实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样

本节实验,使用STM32自带的IIC硬件接口,操作OLED屏幕,显示相关信息。实验并不复杂,就是对OLED屏幕卖家提供的代码进行一下移植。因为卖家提供的代码中,使用了GPIO来模拟IIC接口,我们要把模拟的IIC变成硬件IIC。这是板子上的接口:

这是STM32上对应的管脚:

步骤如下:

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

参照实验1,芯片选择“STM32F103C8”。

打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。

选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、配置IIC接口。如图,使能STM32的IIC1,并配置相关参数:

3、时钟配置。参照实验1.

4、参照实验1的步骤7,进行相应配置,生成工程文件。

5、向工程添加文件。参照实验4的步骤6,把屏幕卖家提供的OLED部分的驱动程序添加到工程中,如下:

6、添加头文件。在main.c文件中,把驱动程序中,相关的头文件,包含进工程。

代码:

#include "oled.h"
#include "bmp.h"

7、替换延时函数。OLED驱动过程中需要用到延时函数,把工程内自带的延时函数给它进行替换。

代码:

#define delay_ms(delay) HAL_Delay(delay)

8、定义变量。定义一个变量,用来暂存要显示的字符。

代码:

uint8_t t=' ';

9、OLED工作配置。添加初始化、显示代码。

代码:

		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);//技
		
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
				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_ShowString(6,3,"0.96' OLED TEST",16);
  
		OLED_ShowString(0,6,"ASCII:",16);  
		OLED_ShowString(63,6,"CODE:",16);  
		OLED_ShowChar(48,6,t,16);//显示ASCII字符	   
		t++;
		if(t>'~')t=' ';
		OLED_ShowNum(103,6,t,3,16);//显示ASCII字符的码值 	
		delay_ms(8000);
		OLED_DrawBMP(0,0,128,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
		delay_ms(8000);
		OLED_DrawBMP(0,0,128,8,BMP1);
		delay_ms(8000);
  }

10、修改IIC读写函数。在oled.c文件中,修改下面几个函数,由GPIO模拟,改为硬件IIC操作。

代码:

/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
	HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&IIC_Command,1,0x100);
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
	HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&IIC_Data,1,0x100);
}
void OLED_WR_Byte(unsigned char dat,unsigned cmd)
{
	if(cmd)
	{
		HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&dat,1,0x100);
	}
	else
	{
		HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&dat,1,0x100);
	}
	
}

修改后,保存,编译、下载,重新上电。观察OLED屏幕,显示相关字符。

整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。

《STM32CUBEMX_硬件IIC接口操作OLED屏幕》有4条评论

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据