OLED屏幕的使用

该博客详细介绍了如何使用STM32通过模拟4线SPI驱动1.06寸7引脚OLED屏幕。内容包括引脚配置、GPIO初始化、时钟信号及数据传输的模拟过程,并提供了相应的代码实现。实测在72MHz频率下,传输函数My_SPI_Transmit的执行时间为76.4微秒。
摘要由CSDN通过智能技术生成

1. 0.96寸7引脚OLED屏幕

  • 图中文字的缺失部分是因为手机拍照所致,实际是完整的文字。
  • 参考链接:
    https://wenku.baidu.com/view/eb67b928b91aa8114431b90d6c85ec3a87c28b86.html
    https://wenku.baidu.com/view/11e968518d9951e79b89680203d8ce2f00666590.html
  • 引脚解释:
GND  GND
VDD  VCC    3.3V~5V
PE5    D0     CLK时钟信息(SCL)      SPI_CLK
PE6    D1     数据端口(SDA)         SPI_MOSI
PE7    RES    复位                    普通IO
PE8    DC     数据/命令选择(D/C)      普通IO
PE9    CS     片选,低电平有效        SPI_CS

请添加图片描述

  • 电阻的接选方式如下图,对应4线SPI。
    在这里插入图片描述
  • IO模拟4线SPI,驱动OLED
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
	
  GPIOA->BSRR = OLED_DC_Pin;
	GPIOA->BSRR = OLED_RES_Pin;
	GPIOA->BSRR = GPIO_PIN_5;//SCK拉高
	GPIOA->BSRR = GPIO_PIN_7;//拉高
	//CS引脚直接接了GND
	
	
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Pin = OLED_DC_Pin|OLED_RES_Pin;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

	GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

#define MOSI_H  GPIOA->BSRR = GPIO_PIN_7 //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET) //
#define MOSI_L  GPIOA->BRR = GPIO_PIN_7  //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET) //
#define SCK_H   GPIOA->BSRR = GPIO_PIN_5 //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET) //
#define SCK_L   GPIOA->BRR = GPIO_PIN_5  //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET) //

//#define MISO    
#define NSS_H   
#define NSS_L   

void delayUS(uint32_t nus)
{		
  uint16_t i;
	for(i=0;i<nus;i++)
	{
	} 
}


//可以使用SPI的方式 HAL_SPI_Transmit(&hspi1,&data,1,1);
void My_SPI_Transmit(unsigned char data)
{

	unsigned char i;	        //定义变量
	for(i = 0; i < 8; i++)	        //循环8次
	{
		SCK_L;
        delayUS(1);			
	    if(data&0x80)
		    MOSI_H;
		else
			  MOSI_L;
		data<<=1;
		delayUS(1);	
		SCK_H;
		delayUS(1);	
		}
	
}


  • 实测,单片机工作在72MHz的情况下,上述My_SPI_Transmit函数耗费的时间大概是76.4微秒。
    在这里插入图片描述

  • 驱动文件
    https://download.csdn.net/download/Kshine2017/85519013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值