0.96寸OLED(一)基于cubemx的硬件SPI


一、CubeMx配置选项

1.SPI配置

关于时钟和调试的配置就不写了,直接上SPI的配置图。
在这里插入图片描述
主要注意是是上面两个框框,这里选择了SPI只发送不接收,因为SPI驱动OLED只需要发送数据。片选选择硬件片选,这里也可以选择软件片选。在代码做调整即可。然后就是空闲时钟电平和数据沿的选择,具体可以了解SPI协议部分,注意不能错。

2.数据命令和复位引脚配置

在这里插入图片描述
具体的引脚配置根据自己的连线方式来进行选择。

二、代码修改

这里我选择了中景园提供的官方历程进行修改。

1.头文件和关键字修改

代码如下:
需要包含一下main.h头文件

#ifndef  __OLED_H
#define __OLED_H
#include "main.h"
//替换一下官方程序的关键字,我这里使用notepad++进行了批量替换
uint8_t //替换u8
uint16_t //替换u16
uint32_t //替换u32

2.宏定义替换

代码如下:
GPIO函数替换为HAL库函数

#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) 
//其余的时钟和信号和片选可以删除,因为我们使用了硬件SPI

3.OLED初始化和SPI函数替换

初始化函数修改

void OLED_Init(void)
{
//	GPIO_InitTypeDef  GPIO_InitStructure;
// 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);	 //使能A端口时钟
//	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_15;
// 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
//	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
// 	GPIO_Init(GPIOA, &GPIO_InitStructure);	  //初始化GPIOA
// 	GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_15);
  MX_GPIO_Init();
  MX_SPI1_Init();
...................
}

替换软件SPI为硬件SPI

//void OLED_WR_Byte(u8 dat,u8 cmd)
//{	
//	u8 i;			  
//	if(cmd)
//	  OLED_DC_Set();
//	else 
//	  OLED_DC_Clr();		  
//	OLED_CS_Clr();
//	for(i=0;i<8;i++)
//	{			  
//		OLED_SCL_Clr();
//		if(dat&0x80)
//		   OLED_SDA_Set();
//		else 
//		   OLED_SDA_Clr();
//		OLED_SCL_Set();
//		dat<<=1;   
//	}				 		  
//	OLED_CS_Set();
//	OLED_DC_Set();   	  
//}
void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{			  
	if(cmd)
	  OLED_DC_Set();
	else 
	  OLED_DC_Clr();		       
    HAL_SPI_Transmit(&hspi1, &dat, 1, 0x00FF);			 		  
	OLED_DC_Set();   	  
}

三、主函数验证

主函数验证

  OLED_Init();
  OLED_ColorTurn(0);//0正常显示,1 反色显示
  OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
  
  OLED_ShowString(8,16,"ZHONGJINGYUAN",16,1);
  OLED_Refresh();

在这里插入图片描述

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值