国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32F103ZET6 驅(qū)動 OLED

這篇具有很好參考價值的文章主要介紹了STM32F103ZET6 驅(qū)動 OLED。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

STM32F103ZET6 驅(qū)動 OLED

目錄
  • 前言
  • OLED模塊的基本了解
  • OLED驅(qū)動程序的開發(fā)
前言

? 大家好,這是我第一次發(fā)帖,由于,我的技術并不成熟,程序難免有編寫不規(guī)范的地方,希望讀者能夠指正,也希望這篇帖子能夠讓讀者對OLED模塊有個大致的了解。很高興能與大家交流。

OLED模塊的基本了解

OLED模塊的引腳:

? oled 驅(qū)動程序,stm32,單片機,嵌入式硬件

? 圖片轉(zhuǎn)載自淘寶商家

? 我使用的OLED模塊有以下幾個引腳:

引腳名 功能 驅(qū)動電壓 相連接MCU的端口
GND 接地 GND
VCC 電源電壓 3.3v ~ 5v 3.3v
DO 時鐘線 2.2v ~ 5v SCLK(PA5)
D1 數(shù)據(jù)線 2.2v ~ 5v MOSI(PA7)
RES 復位線 2.2v ~ 5v PC5
DC 數(shù)據(jù)/命令控制線 2.2v ~ 5v PC4
CS 片選線 2.2v ~ 5v PA4
  • RES 為復位線,低電平復位
  • 當GPIO向DC端口輸出高電平時,MCU會通過GPIO向D1端口發(fā)送數(shù)據(jù),使其顯示在OLED屏上。當GPIO向DC端口輸出低電平時,MCU會通過GPIO向D1端口發(fā)送命令,通過這些命令,可以配置OLED模塊。

以上是對OLED模塊引腳的簡要了解,在編寫驅(qū)動程序之前,我們還需要了解OLED模塊的尋址方式。

OLED模塊的尋址方式:

OLED有三種尋址模式:

  • 水平尋址

  • 垂直尋址

  • 頁尋址

    最常用的尋址模式是頁尋址模式,本驅(qū)動程序所使用的尋址方法也是頁尋址。我會重點介紹頁尋址和水平尋址,簡要地介紹垂直尋址。

在介紹尋址模式之前,我們需要了解一些預備知識:

0.96寸的OLED顯示屏有128列,64行,即128x64,64行被分為8組,每個128x8的區(qū)域被稱為頁,如下圖:
oled 驅(qū)動程序,stm32,單片機,嵌入式硬件

可以看到COM0~COM7,也就是0 ~ 7行從屬于Page0,也就是第0頁,依此類推。

通過這種劃分,可以把整個屏幕劃為8份。

通過這樣的劃分,當我們往某頁某一列中寫入數(shù)據(jù)0x5A時,就能控制哪一列的哪個格子是亮或者滅的,如下圖:

oled 驅(qū)動程序,stm32,單片機,嵌入式硬件

0x5A

1
0
1
0
0
1
0
1

(注:從頂行到底行,由地位到高位)

?

? 在OLED模塊中,我們會通過指令來設置OLED模塊,假設,我們通過WriteCmd(uint8_t command)函數(shù)向OLED模塊發(fā)送指令。你會發(fā)現(xiàn),有一條就會生效的指令,有多條配合使用才會生效的指令。

void OLED_Init(void) {
	
	// 使能相關的GPIO口 配置SPI外設
	OLED_SPI_Init();	
	
	OLED_SPI_RES_HIGH;
	// 延時200ms
	Delay_us(200);
	/**************************************** 以下是官方的代碼******************************/
	WriteCmd(0xAE); //display off
	WriteCmd(0x20);	//Set Memory Addressing Mode	
	WriteCmd(0x10);	//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
	WriteCmd(0xb0);	//Set Page Start Address for Page Addressing Mode,0-7
	WriteCmd(0xc8);	//Set COM Output Scan Direction
	WriteCmd(0x00); //---set low column address
	WriteCmd(0x10); //---set high column address
	WriteCmd(0x40); //--set start line address
	WriteCmd(0x81); //--set contrast control register
	WriteCmd(0xff); //亮度調(diào)節(jié) 0x00~0xff
	WriteCmd(0xa1); //--set segment re-map 0 to 127
	WriteCmd(0xa6); //--set normal display
	WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
	WriteCmd(0x3F); //
	WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
	WriteCmd(0xd3); //-set display offset
	WriteCmd(0x00); //-not offset
	WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
	WriteCmd(0xf0); //--set divide ratio
	WriteCmd(0xd9); //--set pre-charge period
	WriteCmd(0x22); //
	WriteCmd(0xda); //--set com pins hardware configuration
	WriteCmd(0x12);
	WriteCmd(0xdb); //--set vcomh
	WriteCmd(0x20); //0x20,0.77xVcc
	WriteCmd(0x8d); //--set DC-DC enable
	WriteCmd(0x14); //
	WriteCmd(0xaf); //--turn on oled panel
}

以上面官方提供的初始化代碼片段為例子:

WriteCmd(0xAE); //display off 關閉顯示
WriteCmd(0x81); //--set contrast control register
WriteCmd(0xff); //亮度調(diào)節(jié) 0x00~0xff
// 以上兩條命令是設置對比度控制
// 通過0x81命令選擇相應的寄存器,然后,設置范圍0x00 ~ 0xff的亮度大小,控制OLED屏的亮度

如果想熟悉命令,請參考相應的官方手冊。

下面簡要介紹幾條命令:

WriteCmd(0x00);  // 設置為水平尋址
WriteCmd(0x01);  // 設置為垂直尋址
WriteCmd(0x10);  // 設置為頁尋址
WriteCmd(0x8D); // 設置電荷泵
WriteCmd(0x14); // 開啟電荷泵
WriteCmd(0xAF); // OLED喚醒
WriteCmd(0xAE); // 關閉OLED

設置頁地址:

0xby

7 6 5 4 3 2 1 0
1 0 1 1 Y3 Y2 Y1 Y0

這就是設置頁地址命令的格式,[7:4]位是固定的,而[3:0]位可以通過寫入0000b ~ 0111b,這個值域的二進制數(shù)來指定程序在屏幕顯示時的起始地址。

設置列地址:

關于設置列地址,有兩條指令0x1[x7:x4]0x0[x3:x0]。

高四位的值為1的指令表示的是設置列地址的高四位,高四位的值為0的指令表示設置列地址的第四位。

然后,指令**0x1[x7:x4]的值左移四位,然后與0x0[x3:x0]**的值相加,組成一個8位二進制數(shù),來決定選擇的是0 ~127行中的第幾行為初始地址

7 6 5 4 3 2 1 0
0 0 0 1 x7 x6 x5 x4
7 6 5 4 3 2 1 0
0 0 0 0 x3 x2 x1 x0

所以下面的一個函數(shù),大家應該看得懂:

// 設置起始坐標
void SetPos(uint8_t x, uint8_t y) {
	
	// 設置頁地址
	WriteCmd(0xb0 + y);
	// 取列高位
	WriteCmd((x & 0xf0)>>4 | 0x10);
	// 取列低位
	WriteCmd((x & 0x0f) | 0x01);
}

// 以上代碼的意思是,將每個頁地址的起始地址設置為0列

對以上的知識有個基本了解之后,下面將介紹幾種尋址模式:

  • 首先是頁尋址

oled 驅(qū)動程序,stm32,單片機,嵌入式硬件
? 如上圖所示,頁尋址的辦法是,橫向?qū)γ啃羞M行讀和寫,當?shù)竭_每行的末尾的時候,會立即返回每行的開頭。

如果到達該行的末尾時,我們不想返回該行的開頭,那么我們就需要坐標的起始值。

  • 水平尋址
    oled 驅(qū)動程序,stm32,單片機,嵌入式硬件
    ? 如上圖所示,當完成對一行的遍歷后,頁地址值會自增1,然后,會跳到下一頁進行遍歷,當對0 ~7 頁都遍歷之后,會返回0頁0列。
OLED驅(qū)動程序的開發(fā)

本次實驗使用了STM32F103ZET6最小系統(tǒng)板,面包板,以及一個電源模塊和JLINK OB仿真器,如下圖:
oled 驅(qū)動程序,stm32,單片機,嵌入式硬件

SPI模塊的程序如下:

#ifndef _SPI_H
#define _SPI_H

#include "stm32f10x.h"

// DO SCLK 
#define OLED_SPI_DO_Pin			GPIO_Pin_5
#define OLED_SPI_DO_Port		GPIOA
#define OLED_SPI_DO_CLK			RCC_APB2Periph_GPIOA
#define OLED_SPI_DO_CLK_FUN		RCC_APB2PeriphClockCmd

// D1 MOSI 
#define OLED_SPI_MOSI_Pin		GPIO_Pin_7
#define OLED_SPI_MOSI_Port		GPIOA
#define OLED_SPI_MOSI_CLK		RCC_APB2Periph_GPIOA
#define OLED_SPI_MOSI_CLK_FUN	RCC_APB2PeriphClockCmd

// CS NSS
#define OLED_SPI_CS_Pin			GPIO_Pin_4
#define OLED_SPI_CS_Port		GPIOA
#define OLED_SPI_CS_CLK			RCC_APB2Periph_GPIOA
#define OLED_SPI_CS_CLK_FUN		RCC_APB2PeriphClockCmd

// DC Data or Cammand 數(shù)據(jù)或者命令選擇
#define OLED_SPI_DC_Pin			GPIO_Pin_4
#define OLED_SPI_DC_Port		GPIOC
#define OLED_SPI_DC_CLK			RCC_APB2Periph_GPIOC
#define OLED_SPI_DC_CLK_FUN		RCC_APB2PeriphClockCmd

// RES RESET
#define OLED_SPI_RES_Pin		GPIO_Pin_5
#define OLED_SPI_RES_Port		GPIOC
#define OLED_SPI_RES_CLK		RCC_APB2Periph_GPIOC
#define OLED_SPI_RES_CLK_FUN	RCC_APB2PeriphClockCmd

#define OLED_SPI				SPI1
#define OLED_SPI_CLK			RCC_APB2Periph_SPI1
#define OLED_SPI_CLK_FUN		RCC_APB2PeriphClockCmd
#define OLED_SPI_GPIO_CLK_FUN	RCC_APB2PeriphClockCmd

// 復位引腳的高低電平的輸出
#define OLED_SPI_RES_HIGH		GPIO_SetBits(OLED_SPI_RES_Port, OLED_SPI_RES_Pin)		
#define OLED_SPI_RES_LOW		GPIO_ResetBits(OLED_SPI_RES_Port, OLED_SPI_RES_Pin)

// DC命令選擇的高低電平的輸出
#define OLED_SPI_DC_HIGH		GPIO_SetBits(OLED_SPI_DC_Port, OLED_SPI_DC_Pin)
#define OLED_SPI_DC_LOW			GPIO_ResetBits(OLED_SPI_DC_Port, OLED_SPI_DC_Pin)

void OLED_SPI_Init(void);
void OLED_SPI_Write(uint8_t data);

#endif


#include "spi.h"

void OLED_SPI_Init(void) {

	SPI_InitTypeDef SPI_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	// 打開時鐘
	OLED_SPI_CLK_FUN(OLED_SPI_CLK, ENABLE);
	OLED_SPI_GPIO_CLK_FUN(OLED_SPI_DO_CLK | OLED_SPI_MOSI_CLK | OLED_SPI_CS_CLK | OLED_SPI_DC_CLK
		| OLED_SPI_RES_CLK, ENABLE);
	
	// DO SCLK
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = OLED_SPI_DO_Pin;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(OLED_SPI_DO_Port, &GPIO_InitStructure);
	
	// D1 MOSI
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = OLED_SPI_MOSI_Pin;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(OLED_SPI_MOSI_Port, &GPIO_InitStructure);
	
	// CS NSS
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = OLED_SPI_CS_Pin;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(OLED_SPI_CS_Port, &GPIO_InitStructure);
	
	// DC 命令數(shù)據(jù)選擇
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = OLED_SPI_DC_Pin;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(OLED_SPI_DC_Port, &GPIO_InitStructure);
	
	// RES RESET 低電平復位
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = OLED_SPI_RES_Pin;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(OLED_SPI_RES_Port, &GPIO_InitStructure);
	
	// 初始化 SPI結構體
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // 軟件控制
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // 主機模式
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 大端數(shù)據(jù)先行
	SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; // 單線發(fā)送
	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 數(shù)據(jù)長度為8
	SPI_InitStructure.SPI_CRCPolynomial = 7;
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // 空閑時為高電平,偶數(shù)邊沿
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
	
	// 初始化SPI
	SPI_Init(OLED_SPI, &SPI_InitStructure);
	
	// 使能SPI
	SPI_Cmd(OLED_SPI, ENABLE);
}

void OLED_SPI_Write(uint8_t data) {
	
	// 判斷 SPI的 發(fā)送緩沖區(qū)是否為空?
	while(SPI_I2S_GetFlagStatus(OLED_SPI, SPI_I2S_FLAG_TXE) == RESET);
	
	SPI_I2S_SendData(OLED_SPI, data);
}


SPI模塊的配置如上面的代碼所示,關于SPI協(xié)議,在本貼中,不會提及,請感興趣的讀者去閱讀STM32的參考手冊。要提及的一點是,SPI_InitStructure.SPI_NSS需要設置成軟件控制,如果有硬件控制,可能OLED無法顯示數(shù)據(jù),我個人認為,可能是如果通過硬件控制,NSS端口可能以極快的頻率在高低電平之間來回切換,導致采集數(shù)據(jù)時,OLED無法被作為從設備選中,這是一家之言,如果有不正確之處,請大家指正。

OLED模塊如下:

#ifndef __OLED_H
#define	__OLED_H

#include "stm32f10x.h"

#define OLED_ADDRESS	0x78 //通過調(diào)整0R電阻,屏可以0x78和0x7A兩個地址 -- 默認0x78
#define OLED_CMD		0
#define OLED_DATA		1

void WriteCmd(uint8_t SPI_Command);
void WriteData(uint8_t SPI_Data);
void OLED_Init(void);
void OLED_ON(void);
void OLED_OFF(void);
void SetPos(uint8_t x, uint8_t y);
void OLED_Fill(uint8_t Fill_Data);
void OLED_Clean(void);
void OLED_ShowStr(uint8_t x, uint8_t y, char ch[], uint8_t TextSize);

#endif
#include "spi.h"
#include "oled.h"
#include "bsp_systick.h"
#include "codetab.h"

// 設置oled的顯存
// 存放格式如下
// [0] 0 1 2 3 ... 127
// [1] 0 1 2 3 ... 127
// [2] 0 1 2 3 ... 127
// [3] 0 1 2 3 ... 127
// [4] 0 1 2 3 ... 127
// [5] 0 1 2 3 ... 127
// [6] 0 1 2 3 ... 127
// [7] 0 1 2 3 ... 127
uint8_t OLED_GRAM[128][8];

// 初始化 OLED模塊0
void OLED_Init(void) {
	
	// 使能相關的GPIO口 配置SPI外設
	OLED_SPI_Init();	
	
	OLED_SPI_RES_HIGH;
	// 延時200ms
	Delay_us(200);
	
	WriteCmd(0xAE); //display off
	WriteCmd(0x20);	//Set Memory Addressing Mode	
	WriteCmd(0x10);	//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
	WriteCmd(0xb0);	//Set Page Start Address for Page Addressing Mode,0-7
	WriteCmd(0xc8);	//Set COM Output Scan Direction
	WriteCmd(0x00); //---set low column address
	WriteCmd(0x10); //---set high column address
	WriteCmd(0x40); //--set start line address
	WriteCmd(0x81); //--set contrast control register
	WriteCmd(0xff); //亮度調(diào)節(jié) 0x00~0xff
	WriteCmd(0xa1); //--set segment re-map 0 to 127
	WriteCmd(0xa6); //--set normal display
	WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
	WriteCmd(0x3F); //
	WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
	WriteCmd(0xd3); //-set display offset
	WriteCmd(0x00); //-not offset
	WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
	WriteCmd(0xf0); //--set divide ratio
	WriteCmd(0xd9); //--set pre-charge period
	WriteCmd(0x22); //
	WriteCmd(0xda); //--set com pins hardware configuration
	WriteCmd(0x12);
	WriteCmd(0xdb); //--set vcomh
	WriteCmd(0x20); //0x20,0.77xVcc
	WriteCmd(0x8d); //--set DC-DC enable
	WriteCmd(0x14); //
	WriteCmd(0xaf); //--turn on oled panel
}

void WriteCmd(uint8_t SPI_Command) {
	
	OLED_SPI_DC_LOW;
	
	OLED_SPI_Write(SPI_Command);
}

void WriteData(uint8_t SPI_Data) {
	
	OLED_SPI_DC_HIGH;
	
	OLED_SPI_Write(SPI_Data);
}

// 打開OLED
void OLED_ON(void) {
	
	WriteCmd(0x8D); // 設置電荷泵
	WriteCmd(0x14); // 開啟電荷泵
	WriteCmd(0xAF); // OLED喚醒
}

// 關閉OLED
void OLED_OFF(void) {

	WriteCmd(0x8D); // 設置電荷泵
	WriteCmd(0x10); // 關閉電荷泵
	WriteCmd(0xAE); // 關閉OLED
}

// 設置起始坐標
void SetPos(uint8_t x, uint8_t y) {
	
	// 設置頁地址
	WriteCmd(0xb0 + y);
	// 取列高位
	WriteCmd((x & 0xf0)>>4 | 0x10);
	// 取列低位
	WriteCmd((x & 0x0f) | 0x01);
}

// 全屏填充
void OLED_Fill(uint8_t Fill_Data) {
	
	uint8_t m, n;
	// 設置起始地址
	for (m = 0; m < 8; m++) {
		WriteCmd(0xb0 + m);
		WriteCmd(0x00);
		WriteCmd(0x10);
	}
	
	// 填充數(shù)據(jù)
	for (n = 0; n < 128; n++) {
		WriteData(Fill_Data);
	}
}

// 清屏
void OLED_Clean(void) {
	
	OLED_Fill(0x00);
}

// 顯示字符串
void OLED_ShowStr(uint8_t x, uint8_t y, char ch[], uint8_t TextSize) {
	
	uint8_t c = 0, i =0, j = 0;	
	switch(TextSize) {
		
		// 模式1:6x8點陣
		// 6列 1組
		case 1: {
			while(ch[j] != '\0') {
				
				c = ch[j] - 32;
				if (x > 126) {
					x = 0;
					y++;
				}
				SetPos(x, y);
				for (i = 0; i < 6; i++) {
					WriteData(F6x8[c][i]);
				}
				x += 6;
				j++;
			}
		}break;
		
		// 模式2: 8x16點陣 兩頁
		case 2: {
			
			while(ch[j] != '\0') {
				
				c = ch[j] - 32; // 字符偏移量,字庫上的字體序號和ASCII碼表上相差32
				if (x > 120) {
					x = 0;
					y++;
				}
				SetPos(x, y);
				for (i = 0; i < 8; i++) {
					WriteData(F8X16[c*16+i]);
				}
				SetPos(x,y+1);
				for(i=0;i<8;i++) {
					WriteData(F8X16[c*16+i+8]);
				}
				x += 8;
				j++;
			}
		}break;
	}
}

對于OLED模塊中的相關函數(shù),重點介紹一下OLED_ShowStr(uint8_t x, uint8_t y, char ch[], uint8_t TextSize),這是官方提供的函數(shù)。

對于OLED_ShowStr函數(shù),它的參數(shù)x, y代表在屏幕中進行寫操作時的起始坐標值,如果我們選擇的是6x8模式,也就是6列,8行來表示一個字符,那么0 ~ 127中,最大能整除6的數(shù)字是126,即x的最大值是125(包括0),當x大于126時,便會開啟下一頁的寫操作,如下:

if (x > 126) {
	x = 0;
	y++;
}

那么問題來了,如何理解下面的表達式:

c = ch[j] - 32;

比如要想顯示A字母,A字母的ASCII碼值是65,那么65 - 32 = 33,33就對應著字庫(注:字庫文件在codetab.h文件中定義,因為篇幅原因,我就不貼出來了,大家可以通過淘寶廠家提供的百度網(wǎng)盤鏈接找到)中A字母的編號33,那么我們可以通過找到A的編號,從而找到它的編碼,從而在屏幕中打印出來。

以此類推,F(xiàn)8X16是一個數(shù)組,每個元素是一個8位的char類型,字庫中將其分行,每行有16個字符,A在33行,所以,33*16能取到A的第一個編碼值,然后按順序,從1 ~ 16,一列列地將A字母從屏幕上打印出來。

#include "stm32f10x.h"
#include "led.h"
#include "bsp_systick.h"
#include "spi.h"
#include "oled.h"


int main() {
	
	SysTick_init();
	
	LED_Init();
	
	OLED_Init();
	
	OLED_Clean();
	
	OLED_ShowStr(0, 1, "hello world", 1);
	OLED_ShowStr(0, 2, "hello world", 2);
	
	while(1) {
	
	}
}
c = ch[j] - 32;

比如要想顯示A字母,A字母的ASCII碼值是65,那么65 - 32 = 33,33就對應著字庫(注:字庫文件在codetab.h文件中定義,因為篇幅原因,我就不貼出來了,大家可以通過淘寶廠家提供的百度網(wǎng)盤鏈接找到)中A字母的編號33,那么我們可以通過找到A的編號,從而找到它的編碼,從而在屏幕中打印出來。

以此類推,F(xiàn)8X16是一個數(shù)組,每個元素是一個8位的char類型,字庫中將其分行,每行有16個字符,A在33行,所以,33*16能取到A的第一個編碼值,然后按順序,從1 ~ 16,一列列地將A字母在屏幕上打印出來。文章來源地址http://www.zghlxwxcb.cn/news/detail-627896.html

#include "stm32f10x.h"
#include "led.h"
#include "bsp_systick.h"
#include "spi.h"
#include "oled.h"


int main() {
	
	SysTick_init();
	
	LED_Init();
	
	OLED_Init();
	
	OLED_Clean();
	
	OLED_ShowStr(0, 1, "hello world", 1);
	OLED_ShowStr(0, 2, "hello world", 2);
	
	while(1) {
	
	}
}

到了這里,關于STM32F103ZET6 驅(qū)動 OLED的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • AD7606與STM32F103ZET6的串行通信

    AD7606與STM32F103ZET6的串行通信

    ??本文是AD7606與STM32的串行通信的學習心得,可幫助你快速入門AD7606。 ??圖一 ??圖二 ??圖三 ??圖四 ??根據(jù)圖一,一些引腳在置高或置低時的上升或下降沿會受時間影響,因此在編寫代碼時,一些對引腳的操作需要放在一起,且延時函數(shù)不能隨意使用。 ??圖

    2024年02月08日
    瀏覽(32)
  • STM32F103ZET6 封裝 LQFP-144 ST意法 單片機芯片

    STM32F103ZET6 封裝 LQFP-144 ST意法 單片機芯片

    STM32F103ZET6 是意法半導體(STMicroelectronics)生產(chǎn)的一款基于 ARM Cortex-M3 內(nèi)核的 32 位微控制器。它具有高性能、低功耗的特點,廣泛應用于各種嵌入式系統(tǒng)和工業(yè)應用中。STM32F103ZET6 的主要特點如下: 內(nèi)核:ARM Cortex-M3,工作頻率最高可達 72MHz。 存儲器:64KB SRAM,512KB FLASH。 外

    2024年04月22日
    瀏覽(27)
  • 用正點原子STM32F103ZET6精英板控制舵機轉(zhuǎn)動實驗保姆教程

    用正點原子STM32F103ZET6精英板控制舵機轉(zhuǎn)動實驗保姆教程

    正點原子精英板一塊 Jlink4線SWD下載線一根 精英板usb供電/下載線一根(負責給開發(fā)板供電) SG90舵機一個(三線:其中紅線接5V電壓,棕線接GED,橙黃色為信號線接開發(fā)板PB5引腳,舵機所給為3pin杜邦線母頭,可用單根杜邦線(一頭子一頭母)將舵機線飛開接到精英板上)。 以

    2023年04月15日
    瀏覽(90)
  • STM32F103ZET6【標準庫函數(shù)開發(fā)】------04五個串口的詳細配置

    STM32F103ZET6【標準庫函數(shù)開發(fā)】------04五個串口的詳細配置

    正點原子戰(zhàn)艦開發(fā)板 STM32F103ZET6有5個串口,查看引腳圖可以找到對應的IO口分別如下 串口 USART1 USART2 USART3 UART4 UART5 輸入/輸出方式 USARTx_TX PA9 PA2 PB10 PC10 PC12 復用推挽輸出 USARTx_RX PA10 PA3 PB11 PC11 PD2 浮空輸入 USART1掛在APB2下 USART2,USART3,USART4,USART5掛在APB1下 串口調(diào)試助手設置波特率

    2024年02月03日
    瀏覽(24)
  • STM32---stm32f103c8t6與stm32f103zet6之間的代碼移植轉(zhuǎn)換

    STM32---stm32f103c8t6與stm32f103zet6之間的代碼移植轉(zhuǎn)換

    目錄 一、將c8t6轉(zhuǎn)換為zet6 1、修改啟動文件 2、修改芯片 3、將MD修改為HD ?4、下載器的修改 5、修改完成,編譯成功 ?二、將zet6轉(zhuǎn)換為c8t6 最終結果如下:? ?將STM32F103C8改為STM32F103ZE ? 基本相同,反向即可。 ? ?

    2024年02月06日
    瀏覽(45)
  • MDK Keil5 創(chuàng)建Stm32工程-理論篇(這里以Stm32F103Zet6為例)

    MDK Keil5 創(chuàng)建Stm32工程-理論篇(這里以Stm32F103Zet6為例)

    整個工程可以粗略的劃分為幾個文件夾: BSP 底層驅(qū)動比如GPIOTimer等驅(qū)動文件 CMSIS 內(nèi)核相關的文件 Firmware 生成的固件下載文件 Mycode 用戶編寫的相關文件,主要編寫的文件都在這個文件夾里 Project 工程文件 startup 芯片啟動文件 STM32F10x_FWLib 標準庫文件 USER 主函數(shù)等文件 readm

    2023年04月24日
    瀏覽(95)
  • 【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植過程成功

    【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植過程成功

    STM32F103ZET6——LVGL_GUI_GUIDER移植過程 STM32F103ZET6——LVGL_GUI_GUIDER移植過程 使用工具: 1.LVGL庫8.02 2.GUI_GUIDER 3.keil5 設計出來的總體是這樣 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 這部分有很多大佬已經(jīng)寫的很成熟了,我就不贅述了 安裝包在這里硬件資源 右上角可將

    2024年02月12日
    瀏覽(54)
  • 正點原子stmf103zet6代碼移植為stm32f103c8t6(庫函數(shù)版)

    目錄 1、打開正點原子的工程模板template, 點擊魔術棒 ?2、 修改芯片型號 為stm32f103c8

    2024年02月01日
    瀏覽(29)
  • STM32F103ZET6 GPIO工作模式介紹+使用寄存器點亮第一個LED燈

    STM32F103ZET6 GPIO工作模式介紹+使用寄存器點亮第一個LED燈

    目錄 ?GPIO的工作模式介紹 1.輸入模式(模擬、上拉、下拉、浮空) 2.輸出模式(推挽/開漏) 3.復用功能(推挽/開漏) 4.模擬輸入輸出(上下拉無影響) 如何使用寄存器點亮第一個LED燈 ? ? ? ? 在輸入模式時,施密特觸發(fā)器打開,輸出被禁止??赏ㄟ^輸入數(shù)據(jù)寄存器 GPIOx_

    2024年02月06日
    瀏覽(91)
  • 基于STM32F103ZET6的(單/三)路HC-SR04超聲波測距+TFTLCD實時顯示+距離報警

    基于STM32F103ZET6的(單/三)路HC-SR04超聲波測距+TFTLCD實時顯示+距離報警

    一、成果圖 說明:本程序的源碼地址: https://github.com/Lfy-YF/Campus-Project ?????????? CSDN下載連接:https://download.csdn.net/download/weixin_58849239/87829470 源碼包含四個版本,涉及單路測距、三路測距、增加外部中斷(用來版本記錄的~) 運行效果: 本程序?qū)崿F(xiàn)脫機測距,共左中右

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包