基于3线spi通信的oled(cubemx图形化编程软件)
简介
spi通信原理
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如flash闪存芯片W25Q64等。
多NSS片选图如下(还有其他方式,如菊花链等)
模式编号
- CPOL代表的是SCK时钟线闲置状态下的电平,如CPOL为0时,SCK时钟线,闲置时为0,反之为1。如下图所示。
- CPHA代表的是SCK在奇数边沿采样还是在数边沿采样,如下图,当CPHA=0时,在奇数边沿采样,也就是绿色画线的地方;当CPHA=1时,在偶数边沿采样,就是上面标着2、4、6……的地方。
spi线的种类
一般的SPI为4-wire模式
芯片的管脚上只占用四根线。
MISO(Master Input Slave Output): 主器件数据输出,从器件数据输入。
MOSI(Master Output Slave Input):主器件数据输入,从器件数据输出。
SCK(Slava Clock): 时钟信号,由主设备控制发出。
NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。
SPI还有3-wire模式
芯片的管脚只占用3根(我们的OLED正是用的这个模式)
MISO/MOSI: 主从双向通信。
SCK(Slava Clock): 时钟信号,由主设备控制发出。
NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。
其实质就是把MISO和MIOSI合成一条了,如下图所示。
其实SPI还有很多知识没有讲完,主要是现在的时间已经接近凌晨了,后面的以后再补,直接进入下一环节
OLED介绍
OLED的基础介绍
OLED的定义和优势
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电 激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。
LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。
ALINETEK的0.96寸OLED模块
模块有单色和双色两种可选,单色为纯蓝色,而双色则为黄蓝双色。单色模块每个像素点只有亮与不亮两种情况,没有颜色区分;
尺寸小,显示尺寸为0.96寸,而模块的尺寸仅为27mm26mm大小;
高分辨率,该模块的分辨率为12864;多种接口方式,该模块提供了总共5种接口包括:6800、8080两种并行接口方式、 4线的串行SPI接口方式、 3线的串行SPI接口方式、IIC接口方式;
不需要高压,直接接3.3V就可以工作了。
OLED模块工作模式选择
4种模式通过模块的BS1/BS2设置(通过硬件来设置),BS1/BS2的设置与模块接口模式的关系如表所示:
而我的OLED是这种样式的,是SPI通信方式的,他在内部把MOSI和MISO两条线连接在一起了,并且他默认片选NSS被拉低。
对于其他引脚的描述如下所示:VCC:电源3.3V供电。
GND:地线,和VCC一起同时接到同一个单片机上,才有3.3的压差,接到其他地方去,就不敢保证是不是3.3V的了,可能会烧坏。
SCL:OLED从时钟信号;
SDA:数据线,在硬件内部已经把MISO和MOSI连接在一起了,但这里只作为MOSI数据线使用
RST(RES):硬复位OLED;
D/C(RS):命令/数据标志(0,读写命令;1,读写数据)。
我的这个OLED是128x64的,也就是横向有128个像素发光点,纵向有64个像素发光点, 而纵向的发光点又被分成8页,每一页都是128x8的,如下图所示
我们要向里面写数据点亮里面的像素点,必须找到对应的页位置和列位置,再把一个字节的数据,以纵向8点下高位的形式填充进去,哪我们如何运用oled的命令来锁定位置呢?如下表所示
我们只需要用后三个命令来锁定对应的位置 :
- 设置页地址命令:在命令模式下对ssd1306发送B0就是第一页,发B7就是第8页。
- 对于找到列地址,需要设置同时两个命令,一个是列地址低4位命令,一个是列地址高4位命令,假如我当前要锁定第125列,125对应的16进制是0x7D,那么我只需要同时发0x17和0x0D就可以了(其中没有先后顺序)
cubemx的配置
新建工程
1. 打开 STM32CubeMX 软件,点击“新建工程”
2. 选择 MCU 和封装
3.配置时钟
RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz
修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置
4. 配置调试模式
非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器
SYS 设置,选择 Debug 为 Serial Wire
5.1 SPI参数配置
- 在 Connectivity 中选择 SPI1 设置
- 并选择 Transmit Only Master 只发送主模式(因为我们只需要向OLED写指令与数据就能使用OLED了,不需要从OLED接收数据)
- 不开启 NSS 即不使用硬件片选信号(NSS直接选择外部引出的任意引脚为输出模式即可)
- 配置成时钟4分频
这些配置从上到下分别是:
- Frame Format:主从模式选择
- Data Size:一次传输数据大小
- First Bit:数据是高位在先还是低位在先
- prescaler(for Baud Rate):分频值
- Clock Polarity(CPOL):时钟空闲时的电平
- Clock Phase(CPHA):数据取样是在奇数取样还是在偶数取样(1Edge是奇数取样,2Edge是偶数取样)
对于正点原子的nano板子(STM32F103RBT6)来说,配置之后就会锁定两个引脚,一个是PA5(SCK),一个是PA7(MOSI),具体如下图所示。
5.2 GPIO参数配置
还有RST引脚和D/C引脚直接配置成推挽输出模式,如图:
5.3.1 工程配置1
5.3.2 工程配置2
这里要注意,工程名一定不能有中文,并且路径下也一定不能有中文
5.4 生成工程
6 软件编写
6.1 keil内工程配置
先建立oled.c和oled.h两个文件
在魔术棒这里面
点击这里把oled.h文件的路劲包含进工程里面
这个User文件是我在外面创建的文件
Debug这里配置成DAP烧录(针对正点nano最新的板子,旧板子用ST-Link即可)
进入右边的Settings里面,配置Flash Download中的下载后自动复位勾上
检查这里是否连上,若未显示这个只需在左下脚的Connect下拉框中选择under Reset(前先复位再烧录)即可,若还是没有连上则还有其他问题,检查硬件连接(是否连上,是否供电不足),软件ch340、st-link驱动是否安装等。
6.1 代码编写
oled.h
#ifndef __OLED_H__
#define __OLED_H__#include "main.h"
#include "spi.h"
#include "gpio.h"//修改对应的SPI句柄
#define OLED_SPI hspi1//数据、命令引脚
#define Data_Cmd_Pin GPIO_PIN_4
#define Data_Cmd_GPIO_Port GPIOA//复位脚
#define OLED_RST_Pin GPIO_PIN_6
#define OLED_RST_GPIO_Port GPIOA//对该位写1或0
#define Data_Cmd_State(__D_C_State__) HAL_GPIO_WritePin(Data_Cmd_GPIO_Port, Data_Cmd_Pin, (GPIO_PinState)(__D_C_State__))
#define OLED_RST_State(__RST_State__) HAL_GPIO_WritePin(OLED_RST_GPIO_Port, OLED_RST_Pin, (GPIO_PinState)(__RST_State__))/*OLED初始化*/
void OLED_Init(void);/*清屏*/
void OLED_Clear(void);/*
显示一个数字或英文
x位置,y时页位置(注意这里字符默认是高2页,宽8位的),
data是数据,type是类型是数字还是字符
*/
void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t data);/*显示字符串*/
void OLED_ShowString(uint8_t x, uint8_t y, const char *fmt, ...);#endif
oled.c
#include "oled.h"
#include "stdarg.h"
#include "stdio.h"#define OLED_CMD 0
#define OLED_DAT 1const unsigned char F8x16[];//初始化命令
uint8_t CMD_Data[]={0xAE, 0x00, 0x10, 0x40, 0xB0, 0x81, 0xFF, 0xA1, 0xA6, 0xA8, 0x3F,
0xC8, 0xD3, 0x00, 0xD5, 0x80, 0xD8, 0x05, 0xD9, 0xF1, 0xDA, 0x12,
0xD8, 0x30, 0x8D, 0x14, 0xAF};//向设备写控制命令
void OLED_WR_CMD(uint8_t cmd)
{Data_Cmd_State(OLED_CMD);//低电平是命令HAL_SPI_Transmit(&OLED_SPI, &cmd, 1, 0xff);Data_Cmd_State(1);//恢复
}//向设备写数据
void OLED_WR_DATA(uint8_t data)
{Data_Cmd_State(OLED_DAT);//高电平是数据HAL_SPI_Transmit(&OLED_SPI, &data, 1, 0xff);Data_Cmd_State(1);//恢复
}//初始化oled屏幕
void OLED_Init(void)
{OLED_RST_State(0); HAL_Delay(200);OLED_RST_State(1);for(int16_t i=0; i<sizeof(CMD_Data); i++){OLED_WR_CMD(CMD_Data[i]);}OLED_Clear();
}//清屏
void OLED_Clear(void)
{ for(int i=0;i<8;i++) { OLED_WR_CMD(0xb0+i);OLED_WR_CMD (0x00); OLED_WR_CMD (0x10); for(int n=0;n<128;n++)OLED_WR_DATA(0x00);}
}//设置光标坐标
void OLED_Set_Pos(uint8_t x, uint8_t y)
{//0xb0~0xb7共8页//每一页,128列,一列1个字节,共128个字节//第一页的地址加上后面的y就是,对应的y页地址OLED_WR_CMD(0xb0+y);//设置列地址高4位OLED_WR_CMD((x>>4)|0x10);//取x的高4位//设置列地址低4位OLED_WR_CMD(x&0x0f);//取x的低4位
}//写一个字节到指定坐标
void WriteByte(uint8_t x, uint8_t y, uint8_t data)
{OLED_Set_Pos(x, y);OLED_WR_DATA(data);
}//显示一个数字或英文
//x位置,y时页位置,data是数据
void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t data)
{//一个英文字符占8个列,16个行。#define Echar (16*8/8) + 1int num = 0;while(data != F8x16[num])//找到对应的字符在数组中的位置{num += Echar;}for(int i=0; i<2; i++){for(int j=0; j<8; j++){//拿出data对应数组的字符WriteByte(x+j, y+i, F8x16[num+1 + (i*8) + j]);}}
}/* OLED显示一串字符 */
static char dat[128]; //16*8
void OLED_ShowString(uint8_t x, uint8_t y, const char *fmt, ...)
{//printf方法va_list args;va_start(args, fmt);vsnprintf(dat, sizeof(dat) - 1, fmt, args);//把从args中得到的字符加入dat数组中va_end(args);int i=0;while(dat[i] != '\0'){OLED_ShowChar(x, y, dat[i++]);x += 8;//x的坐标移动到下一个字符的位置去}
}/*英文字符*/
const unsigned char F8x16[] =
{' ',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0'!',0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1'\'',0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 2'#',0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3'$',0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4'%',0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5'&',0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6'\'',0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7'(',0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8')',0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9'*',0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10'+',0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11',',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12'-',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13'.',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14'/',0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15'0',0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16'1',0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17'2',0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18'3',0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19'4',0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20'5',0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21'6',0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22'7',0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23'8',0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24'9',0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25':',0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26';',0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27'<',0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28'=',0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29'>',0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30'?',0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31'@',0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32'A',0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33'B',0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34'C',0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35'D',0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36'E',0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37'F',0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38'G',0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39'H',0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40'I',0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41'J',0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42'K',0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43'L',0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44'M',0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45'N',0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46'O',0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47'P',0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48'Q',0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49'R',0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50'S',0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51'T',0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52'U',0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53'V',0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54'W',0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55'X',0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56'Y',0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57'Z',0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58'[',0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59'\\',0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60']',0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61'^',0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62'_',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63'`',0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64'a',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65'b',0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66'c',0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67'd',0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68'e',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69'f',0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70'g',0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71'h',0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72'i',0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73'j',0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74'k',0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75'l',0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76'm',0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77'n',0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78'o',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79'p',0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80'q',0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81'r',0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82's',0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83't',0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84'u',0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85'v',0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86'w',0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87'x',0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88'y',0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89'z',0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90'{',0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91'|',0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92'}',0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93'~',0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};
main.c
头文件包含
主函数代码试用
效果图
7 参考资料
- wise师傅网站: http://www.wisemcu.cn/2022/01/03/OLED/
———————————————————————————————— - 半导小芯 ssd1306芯片资料: https://www.semiee.com/file/Solomon/Solomon-SSD1306.pdf
———————————————————————————————— - 淘宝商家资料: https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-23633313809.15.3733546egaKxJn&id=41332203002&qq-pf-to=pcqq.c2c
———————————————————————————————— - 简书cubemx配置: https://www.jianshu.com/p/09da99c5305b
———————————————————————————————— - CSDN spi博客 https://blog.csdn.net/m0_61298445/article/details/124181396
———————————————————————————————— - 知乎SPI讲解: https://zhuanlan.zhihu.com/p/290620901
———————————————————————————————— - CSDN oled博客: https://blog.csdn.net/weixin_43872149/article/details/104712248?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165038454816782248596789%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165038454816782248596789&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-104712248.142v9control,157v4control&utm_term=oled&spm=1018.2226.3001.4187
———————————————————————————————— - CSDN oled博客: https://blog.csdn.net/qq_38410730/article/details/80033873
———————————————————————————————— - 野火视频: https://www.bilibili.com/video/BV1yW411Y7Gw?p=55
在这里插入代码片
基于3线spi通信的oled(cubemx图形化编程软件)相关推荐
- 洋桃电子STM32物联网入门30步笔记三、CubeMX图形化编程、设置开发板上的IO口
此文档作为对杨桃电子视频的整理,B站链接:第四集 一.开启RCC的外部时钟.包括外部高速时钟HSE和外部低速时钟LSE 时钟配置三个选项的含义: 选择禁用的话就只能使用内部时钟 旁路时钟源一般是有源晶 ...
- 洋桃电子(4)—cubeMX图形化编程
- TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出
一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...
- STM32—4线SPI驱动SSD1306 OLED
文章目录 一.OLED简介 二.驱动SSD1306所需知识 1.引脚介绍 2.通信时序 3.显存GRAM 4.字库 5.SSD1306基本命令 三.代码讲解 1.相关引脚配置 2.模拟SPI通信 3. ...
- 麦昆mciro:bit开发板机器人小车——支持makecode图形化编程,支持基于Mind+的图形化编程及python编程
麦昆4.0中文版 随着时代发展的趋势,以及各个政策的出台,市场上的机器人兴趣班.编程兴趣班越来越火爆,编程课也慢慢走进了学校的课堂.但是作为工薪阶层的普通家庭来说连续数年的学习一定有很大的经济压力.所 ...
- 基于SpringBoot2.0 实现的jvm远程监工图形化工具
项目介绍 基于SpringBoot2.0 实现的jvm远程监工图形化工具,可以同时监控多个web应用 该项目是借鉴另个一开源项目 ( JavaMonitor) https://gitee.com/zy ...
- 基于FPGA的 SPI通信 设计(1)
引言 低速通信目前搞过 UART串口通信.IIC通信.其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记 ...
- 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——第2章 图形化建模 2.1开始...
本节书摘来自华章出版社<信息物理融合系统(CPS)设计.建模与仿真--基于 Ptolemy II 平台>一书中的第2章,第2.1节,作者:[美]爱德华·阿什福德·李(Edward Ashf ...
- 基于IIC和SPI协议的OLED显示(STM32)
文章目录 一.介绍SPI 二.使用OLED显示屏显示数据 1.介绍OLED 2.连接开发板和显示屏 3.运行结果 三.修改程序实现显示 四.结果展示 五.参考 一.介绍SPI SPI(Serial P ...
- TLE5012的使用和3线SPI通信(SSC)说明
一.TLE5012介绍 TLE5012是采用巨磁阻原理的15位绝对磁编码器,支持SSC.PWM.IIF.HSM.SPC通信接口,其中SSC是兼容传统SPI的3线接口,通讯频率可达8M.安装方式如下: ...
最新文章
- 软件工程结对作业02
- ECCV 2018 | Pixel2Mesh:从单帧RGB图像生成三维网格模型
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- Mysql之数据库锁(表锁和行锁)详解
- 函数二的变量作用域,多函数执行,返回值,函数参数,拆包,引用
- 树状数组相关应用之二元变量结构体组队问题
- Tp5.0 PHPMailer邮件发送
- c#textBox控件限制只允许输入数字及小数点
- Redis Zadd 命令 Redis 有序集合(sorted set)Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,那么更新
- 分享积累5年的人工智能网站,很大帮助
- LPDDR4协议规范之 (一)地址映射和容量计算
- java+mysql 基于ssm的高校毕业生就业管理系统
- 关于脑电波的黑科技,离我们生活还有多远。
- 浏览器打开网页但找不到服务器ip地址 DNS错误 解决办法
- java货郎担问题求解_货郎担问题(TSP)
- 【web前端(九)】html_行高设置
- java使用pinyin4j实现汉字到拼音转换
- 如何安全地嵌入第三方js – FBML/caja/sandbox/ADsafe简介
- vsftp客户端_Vsftp使用
- 【计算机视觉】MAE:Masked Autoencoder
热门文章
- Node.js meitulu图片批量下载爬虫1.03版
- 高职大学计算机专业老师试讲面试,毫无经验应聘高职院校教师怎么准备试讲和面试...
- python 京东签到_Python实战—京东用户行为分析
- 防火墙和IPS有什么区别
- 浅谈渗透中的黑盒测试白盒测试
- SQL如何本地数据库连接服务器的数据库
- echarts设置标题样式_EChart 标题 title 样式,x轴、y轴坐标显示,调整图表位置等...
- 3D打印:我的打印机使用经验技巧记录
- 普通链接二维码打开小程序实现动态传递参数
- 抖音怎样做伪原创视频 抖音短视频去水印之后怎么保存