前言
- 开发平台:Keil + 标准库
- 硬件平台:STM32F103RCT6
- 显示器件:OLED 128 * 64(中景园) 驱动SH1106
- 通信方式:硬件SPI
1. 准备
- u8g2代码获取:链接
- 确保OLED屏和板卡正确连接
2. 移植步骤
2.1 建立有效的通信
OLED支持多种通信方式(80xx、I2C和SPI),从速度来说,80xx > SPI > I2C。考虑引脚数量问题这里选择了硬件SPI。
硬件SPI的配置使用了CubeMx,根据生成的LL库代码顺序用标准库对SPI进行初始化。我使用了SPI2,初始化代码如下:
/*OLED管脚初始化 SPI2初始化*/
{
SPI_InitTypeDef SPI_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_OLED, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_Init(OLED_PORT, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_14;
GPIO_Init(OLED_PORT, &GPIO_InitStruct);
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_CRCPolynomial