STM32——OLED外设库的讲解(1/2)

引言

本来我是不打算说OLED这个外设的,但我发现好多教程只是在教你原理,而不教你如何构建库。也正是这个原因出现了很多C/V工程师。

目的

在这个章节中我会让你知道这个库如何建立,为什么要这么建立,我自己的库我该如何使用!

注意

当你了解IIC协议,OLED工作原理后再去看!不了解你甚至都不知道在干什么!

一个合格的OLED库

OLED初始化

void OLED_GPIO_Init(void)
{
	uint32_t i, j;
	
	for (i = 0; i < 1000; i ++)
	{
		for (j = 0; j < 1000; j ++);
	}
	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
 	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

首先解决第一个问题,为什么我要写一个循环,因为在某些硬件上,当OLED或其他设备刚上电时,需要一些时间让其稳定工作。因此,加入这样的延时可以确保在初始化GPIO之前,OLED或其他设备已经准备好。(其实是在给OLED上的VCC引脚充足的时间为其供电)但请注意,这种延时方式并不是最精确的,并且其实际延时时间取决于CPU的速度和编译器优化。但对于我们小工程来说完全可以了哈!

IIC协议设定

void OLED_W_SCL(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)BitValue);
}

void OLED_W_SDA(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)BitValue);
}

IIC协议就是控制SCL,SDA两线程的高低电平变化从而达到控制数据的收发功能。所以IIC对高低电平的控制函数就OLED库构建的地基。OLED所有显示函数都少不了对SCL,SDA电平的控制。

具体我就不说了,明天我会主要讲讲IIC协议。

直接看代码!

GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)BitValue);我觉得大家应该都知道,这其实就是将(BitAction)BitValue写入GPIOB的引脚6。这里的问题就是(BitAction)BitValue是什么意思。

(BitAction)BitValue

这里将BitValue强制转换为BitAction枚举类型。BitAction是一个枚举类型,通常定义在STM32的GPIO库中,它有两个可能的值:Bit_RESET(通常为0)和Bit_SET(通常为1)。

直接看我们的固件库。

typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;

含义是设定一个枚举类型,名字叫BitAction。它的取值分为0(Bit_RESET)/1(Bit_SET)。

所以说,我这样使用OLED_W_SCL(1)意思就是将SCL拉成高电平!下一个操作SDA的函数同理。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值