一、接线
OLED的四针脚对应接法如下图
GND——GND
3.3V——3.3V
SCL——PB8
SDA——PB9
二、OLED.c代码介绍
#include "stm32f10x.h"
#include "OLED_Font.h"
/*引脚配置*/
//OLED时钟线
//GPIOB8接时钟线接口
//定义一个函数,函数的参数为x,当调用宏时,会执行GPIO_WriteBit()函数,将GPIOB8设置为X
#define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))
//OLED数据线
//GPIOB9接数据线结构
#define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))
/*引脚初始化,这里根据引脚连接可以适当进行修改*/
void OLED_I2C_Init(void)
{
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_8;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB9
//设置为高电平
OLED_W_SCL(1);
OLED_W_SDA(1);
}
/**
* @brief I2C开始
* @param 无
* @retval 无
*/
void OLED_I2C_Start(void)
{
OLED_W_SDA(1);
OLED_W_SCL(1);
OLED_W_SDA(0);
OLED_W_SCL(0);
}
/**
* @brief I2C停止
* @param 无
* @retval 无
*/
void OLED_I2C_Stop(void)
{
OLED_W_SDA(0);
OLED_W_SCL(1);//时钟口为1
OLED_W_SDA(1);//数据口为1
}
/**
* @brief I2C发送一个字节
* @param Byte 要发送的一个字节
* @retval 无
*/
void OLED_I2C_SendByte(uint8_t Byte)
{
//一个字节是8位,逐位发送,从高位到低位
uint8_t i;
for (i = 0; i < 8; i++)
{
//将Byte与一个右移了i位的掩码,即第i位为1,其他位为0的,进行按位与操作
//位与,全1为1,有0为0
//0x80的二进制码是1000 0000
//0x80>>i,表示的是第8-i位为1
//Byte&(0x80>>i)用于判断第8-i为是否为1,即输出该位的电平
//只有两种可能,要不就是全为0,要不就是有值
OLED_W_SD