一、前言
关于四针OLED的I2C版配置方式,请转至【STM32+HAL】OLED显示初始化配置
二、实现功能:
用SPI通信方式初始化OLED显示(相较于I2C速度更快)
三、方法一:硬件SPI通信
1、打开SPI通信(仅传输)
2、另选三个引脚配置为输出模式
3、移植代码
重写 void OLED_WR_Byte(u8 dat,u8 cmd)函数
void OLED_WR_Byte(u8 dat,u8 cmd)
{
uint8_t RXDATA = 0;
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
HAL_SPI_TransmitReceive(&hspi1,&dat,&RXDATA,1,1000);
OLED_CS_Set();
OLED_DC_Set();
}
3、改写oled.h中的定义
#define OLED_SCLK_Clr() HAL_GPIO_WritePin(OLED_SCK_GPIO_Port,OLED_SCK_Pin,GPIO_PIN_RESET)//SCL
#define OLED_SCLK_Set() HAL_GPIO_WritePin(OLED_SCK_GPIO_Port,OLED_SCK_Pin,GPIO_PIN_SET)
#define OLED_SDIN_Clr() HAL_GPIO_WritePin(OLED_SDA_GPIO_Port,OLED_SDA_Pin,GPIO_PIN_RESET)//DIN
#define OLED_SDIN_Set() HAL_GPIO_WritePin(OLED_SDA_GPIO_Port,OLED_SDA_Pin,GPIO_PIN_SET)
#define OLED_RES_Clr() HAL_GPIO_WritePin(OLED_RES_GPIO_Port,OLED_RES_Pin,GPIO_PIN_RESET)//RES
#define OLED_RES_Set() HAL_GPIO_WritePin(OLED_RES_GPIO_Port,OLED_RES_Pin,GPIO_PIN_SET)
#define OLED_DC_Clr() HAL_GPIO_WritePin(OLED_DC_GPIO_Port,OLED_DC_Pin,GPIO_PIN_RESET)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(OLED_DC_GPIO_Port,OLED_DC_Pin,GPIO_PIN_SET)
#define OLED_CS_Clr() HAL_GPIO_WritePin(OLED_CS_GPIO_Port,OLED_CS_Pin,GPIO_PIN_RESET)//CS
#define OLED_CS_Set() HAL_GPIO_WritePin(OLED_CS_GPIO_Port,OLED_CS_Pin,GPIO_PIN_SET)
4、至此,OLED文件初始化配置完成
商家给的oled文件有些许不足,需要在显示内容的代码之后紧跟一句OLED_Refresh();
要想省略,可在oled.c中对应函数之后复制粘贴OLED_Refresh();
/* USER CODE BEGIN 2 */
OLED_Init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
OLED_ShowString(8,16,(unsigned char *)"LoganLos",16);
// OLED_Refresh();
HAL_Delay(500);
OLED_Clear();
OLED_ShowNum(0,0,55,2,16);
// OLED_Refresh();
HAL_Delay(500);
OLED_Clear();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
四、方法二:软件模拟
1、配置引脚
引脚与方法一相同,但无需开启SPI
2、更改oled.h中的宏定义
同方式一
3、配置完成
若想在主函数中省略OLED_Refresh();,方法同方式一
/* USER CODE BEGIN 2 */
OLED_Init();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
OLED_ShowString(8,16,(unsigned char *)"LoganLos",16);
OLED_Refresh();
// HAL_Delay(500);
// OLED_Clear();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
五、巨人之肩
手撸SPI接口oled屏幕驱动(stm32)
六、源码提供
【STM32+HAL】七针OLED显示初始化配置(SPI版)