一、模塊來源>>>
產(chǎn)品實(shí)物展示:
資料下載鏈接:https://pan.baidu.com/s/1fKmD5lr4bA0WB54ukonI-A
資料提取碼:1111
二、規(guī)格參數(shù)>>>
以下信息見廠家資料屏幕規(guī)格書。
工作電壓:3~5V
工作電流:最大16mA
模塊尺寸:12(H) x 38(V) MM
像素大?。?28(H) x 32(V)
驅(qū)動芯片:SSD1306
工作電流:最大16mA
模塊尺寸:12(H) x 38(V) MM
像素大?。?28(H) x 32(V)
驅(qū)動芯片:SSD1306
通信協(xié)議:IIC
三、移植過程>>>
我們的目標(biāo)是將例程移植至立創(chuàng)·CW32F030C8T6開發(fā)板上。按照以下步驟,即可完成移植。
將源碼導(dǎo)入工程;根據(jù)編譯報錯處進(jìn)行粗改;修改引腳配置;修改時序配置;移植驗(yàn)證。
3.1查看資料
打開廠家資料例程(例程下載見?例程下載)。具體路徑見?例程路徑。
例程路徑
3.2移植至工程
將廠家資料路徑下的【OLED】文件夾,復(fù)制到自己的工程中。自己的工程至少需要有毫秒級延時函數(shù)。(工程可以參考空白工程下載)
打開自己的工程,將我們剛剛復(fù)制過來的文件導(dǎo)入.c和.h文件。
將 oled.h 文件下的 stm32f0xx.h 改為 board.h。
(在左邊將 oled.c 的工程目錄展開,就發(fā)現(xiàn)有oled.h)
修改oled.h頭文件
將 oled.c 文件下的 delay.h 注釋掉。
修改oled.c頭文件
3.3引腳選擇
模塊為IIC通信協(xié)議的從機(jī),SCL為IIC信號線,SDA為IIC數(shù)據(jù)線。
3.4軟件SPI移植
當(dāng)前廠家源碼使用的是軟件IIC接口,IIC時序部分廠家已經(jīng)完成,我們只需要將引腳和延時配置好即可。所以對應(yīng)接入的屏幕引腳請按照你的需要。這里選擇的引腳見表 軟件IIC接線
選擇好引腳后,進(jìn)入工程開始編寫屏幕引腳初始化代碼。
為了方便后續(xù)移植,我在oled.h?處宏定義了每一個引腳,后續(xù)根據(jù)需要進(jìn)行修改即可。
//-----------------OLED端口移植----------------
//GND - GND
//VCC - 3.3V
//SCL - PA2
//SDA - PA0
#define?RCC_GPIO_ENABLE() ? __RCC_GPIOC_CLK_ENABLE()
#define?PORT_LCD ? ? ? ? ? ?CW_GPIOA
//SCL
#define?GPIO_LCD_SCL ? ? ? ?GPIO_PIN_2
//SDA
#define?GPIO_LCD_SDA ? ? ? ?GPIO_PIN_0
將oled.c源代碼中的?void OLED_Init(void)?修改為如下代碼。
//OLED的初始化
void?OLED_Init(void)
{
? ? ? ? GPIO_InitTypeDef GPIO_InitStruct;?// GPIO初始化結(jié)構(gòu)體
? ? ? ??RCC_GPIO_ENABLE(); ? ? ? ?// 使能GPIO時鐘
? ? ? ? GPIO_InitStruct.Pins?=?GPIO_LCD_SCL|GPIO_LCD_SDA; ? ? ? ?// GPIO引腳
? ? ? ? GPIO_InitStruct.Mode?=?GPIO_MODE_OUTPUT_PP; ? ? ? ? ? ? ?// 推挽輸出
? ? ? ? GPIO_InitStruct.Speed?=?GPIO_SPEED_HIGH; ? ? ? ? ? ? ? ??// 輸出速度高
? ? ? ??GPIO_Init(PORT_LCD, &GPIO_InitStruct); ? ? ? ? ? ? ? ? ??// 初始化
? ? ? ??delay_ms(200);
? ? ? ??OLED_WR_Byte(0xAE,OLED_CMD);?/*display off*/
? ? ? ??OLED_WR_Byte(0x00,OLED_CMD);?/*set lower column address*/
? ? ? ??OLED_WR_Byte(0x10,OLED_CMD);?/*set higher column address*/
? ? ? ??OLED_WR_Byte(0x00,OLED_CMD);?/*set display start line*/
? ? ? ??OLED_WR_Byte(0xB0,OLED_CMD);?/*set page address*/
? ? ? ??OLED_WR_Byte(0x81,OLED_CMD);?/*contract control*/
? ? ? ??OLED_WR_Byte(0xff,OLED_CMD);?/*128*/
? ? ? ??OLED_WR_Byte(0xA1,OLED_CMD);?/*set segment remap*/
? ? ? ??OLED_WR_Byte(0xA6,OLED_CMD);?/*normal / reverse*/
? ? ? ??OLED_WR_Byte(0xA8,OLED_CMD);?/*multiplex ratio*/
? ? ? ??OLED_WR_Byte(0x1F,OLED_CMD);?/*duty = 1/32*/
? ? ? ??OLED_WR_Byte(0xC8,OLED_CMD);?/*Com scan direction*/
? ? ? ??OLED_WR_Byte(0xD3,OLED_CMD);?/*set display offset*/
? ? ? ??OLED_WR_Byte(0x00,OLED_CMD);
? ? ? ??OLED_WR_Byte(0xD5,OLED_CMD);?/*set osc division*/
? ? ? ??OLED_WR_Byte(0x80,OLED_CMD);
? ? ? ??OLED_WR_Byte(0xD9,OLED_CMD);?/*set pre-charge period*/
? ? ? ??OLED_WR_Byte(0x1f,OLED_CMD);
? ? ? ??OLED_WR_Byte(0xDA,OLED_CMD);?/*set COM pins*/
? ? ? ??OLED_WR_Byte(0x00,OLED_CMD);
? ? ? ??OLED_WR_Byte(0xdb,OLED_CMD);?/*set vcomh*/
? ? ? ??OLED_WR_Byte(0x40,OLED_CMD);
? ? ? ??OLED_WR_Byte(0x8d,OLED_CMD);?/*set charge pump enable*/
? ? ? ??OLED_WR_Byte(0x14,OLED_CMD);
? ? ? ??OLED_Clear();
? ? ? ??OLED_WR_Byte(0xAF,OLED_CMD);?/*display ON*/
}
將lcd_init.h中的?OLED端口定義?宏,修改為:
//-----------------OLED端口定義----------------
#define?OLED_SCL_Clr() ? ?GPIO_WritePin(PORT_LCD, GPIO_LCD_SCL, GPIO_Pin_RESET)//SCL
#define?OLED_SCL_Set() ? ?GPIO_WritePin(PORT_LCD, GPIO_LCD_SCL, GPIO_Pin_SET)//SCL
#define?OLED_SDA_Clr() ? ?GPIO_WritePin(PORT_LCD, GPIO_LCD_SDA, GPIO_Pin_RESET)//SDA
#define?OLED_SDA_Set() ? ?GPIO_WritePin(PORT_LCD, GPIO_LCD_SDA, GPIO_Pin_SET)//SDA
源端口定義
修改后端口定義
打開oled.c 文件,找到 void IIC_delay(void) 函數(shù),修改為
//延時
void?IIC_delay(void)
{
? ? ? ??delay_us(2);
}
四移植驗(yàn)證>>>
在main.c中輸入代碼如下
/*
?* Change Logs:
?* Date ? ? ? ? ? Author ? ? ? Notes
?* 2024-06-18 ? ? LCKFB-LP ? ?first version
?*/
#include?"board.h"
#include?"stdio.h"
#include?"bsp_uart.h"
#include?"oled.h"
int32_t?main(void)
{
? ??board_init(); ? ? ? ?// 開發(fā)板初始化
? ??uart1_init(115200); ? ? ? ?// 串口1波特率115200
? ??OLED_Init(); ?//初始化OLED
? ??OLED_Clear();
? ??OLED_Refresh();
? ??while(1)
? ? {
? ? ? ??OLED_ShowString(0,0,(uint8_t?*)"ABC",8,1);//6*8 “ABC”
? ? ? ??OLED_ShowString(10,8,(uint8_t?*)"ABC",12,1);//6*12 “ABC”
? ? ? ??OLED_ShowString(20,18,(uint8_t?*)"ABC",16,1);//8*16 “ABC”
? ? ? ??OLED_ShowString(60,36,(uint8_t?*)"ABC",24,1);//12*24 “ABC”
? ? ? ??OLED_Refresh();
? ? ? ??delay_ms(500);
? ? }
}
上電效果:
移植成功案例代碼:
鏈接:https://pan.baidu.com/s/10HdOiMl6pTdMaBzueuqlNQ?pwd=LCKF
提取碼:LCKF