目录
7、主或从模式下(BIDIMODE=0并且RXONLY=0)全双工发送和接收过程模式
一、什么SPI?
串行外设接口(Serial Peripheral Interface ,SPI)是由美国摩托罗拉公司提出的一种高速全双工串行同步通信接口,首先出现在M68HC系列处理器中,由于其简单方便,成本低廉,传输速度快,因此被其他半导体厂商广泛使用,从而成为事实上的标准。
1、通信原理
作为全双工同步串行通信接口,SPI采用主/从模式(master/slave),支持一个或多个从设备,能够实现主设备和从设备之间的快速数据通信。SPI存在无法检查纠错、不具备寻址能力和接收方没有应答信号等缺点,不适合复杂或者可靠性要求较高的场合。
2、连接方式
SPI在物理层体现为4条信号线:SCK、MOSI(SDI)、MISO(SDO)、SS
支持一主一从和一主多从互连方式
一主一从:将主设备的SS置高电平,从设备的SS接地,主从设备的两条数据线直连
一主多从:其他从设备的时钟和数据线都应该保持高阻态,避免影响数据的传输。
3、SPI接口特性
4、SPI时序图
5、SPI特征
6、配置主从模式
配置从模式:
7、主或从模式下(BIDIMODE=0并且RXONLY=0)全双工发送和接收过程模式
二、1.5寸SSD1327OLED屏
1、控制接口
VCC(电源正)、GND(电源地)、DIN(数据输入)、CLK(始终信号输入)、CS(片选)、DC(数据/命令,低电平表示命令,高电平表示数据)、RST(复位,低电平有效)
2、硬件连接
SCK引脚(SCL) B13
MOSI引脚(SDA) B15
CS(NSS) B12
DC A9
RST A8
外加 3.3V 和 GND
3、产品参数
支持接口4线SPI/IIC,分辨率128*128,显示尺寸1.5寸,显示颜色16位灰度,工作电压3.3V/5v
4、工作原理
支持8bit 8080并行、8bit 6080并行、三线SPI、四线SPI以及I2C控制,由于并行控制会浪费IO口,三线SPI不常用,因此模块可选择四线SPI以及I2C控制
5、OLED写命令
static void OLED_WriteReg(u8 Reg) { OLED_DC_0; OLED_CS_0; SPIWriteByte(Reg); OLED_CS_1; }
6、OLED写数据
static void OLED_WriteData(u8 Data) { OLED_DC_1; OLED_CS_0; SPIWriteByte(Data); OLED_CS_1; }
7、引脚初始化
void OLED_Pin_Init(){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA , ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12 ; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9; GPIO_Init(GPIOA,&GPIO_InitStructure); }
8、OLED初始化
/*初始化1.5寸128 128带灰阶spi串口,驱动芯片SSD1327*/ void OLED_Init(){ //让时钟线输出高电平 OLED_RST_1; delay_ms(100); OLED_RST_0; delay_ms(100); OLED_RST_1; delay_ms(200); OLED_WriteReg(0xae);//--turn off oled panel OLED_WriteReg(0x15); // set column address OLED_WriteReg(0x00); // start column 0 OLED_WriteReg(0x7f); // end column 127 OLED_WriteReg(0x75); // set row address OLED_WriteReg(0x00); // start row 0 OLED_WriteReg(0x7f); // end row 127 OLED_WriteReg(0x81); // set contrast control OLED_WriteReg(0x80); OLED_WriteReg(0xa0); // gment remap OLED_WriteReg(0x51); //51 OLED_WriteReg(0xa1); // start line OLED_WriteReg(0x00); OLED_WriteReg(0xa2); // display offset OLED_WriteReg(0x00); OLED_WriteReg(0xa4); // rmal display OLED_WriteReg(0xa8); // set multiplex ratio OLED_WriteReg(0x7f); OLED_WriteReg(0xb1); // set phase leghth OLED_WriteReg(0xf1); OLED_WriteReg(0xb3); // set dclk OLED_WriteReg(0x00); //80Hz:0xc1 90Hz:0xe1 100Hz:0x00 110Hz:0x30 120Hz:0x50 130Hz:0x70 01 OLED_WriteReg(0xab); // OLED_WriteReg(0x01); // OLED_WriteReg(0xb6); // set phase leghth OLED_WriteReg(0x0f); OLED_WriteReg(0xbe); OLED_WriteReg(0x0f); OLED_WriteReg(0xbc); OLED_WriteReg(0x08); OLED_WriteReg(0xd5); OLED_WriteReg(0x62); OLED_WriteReg(0xfd); OLED_WriteReg(0x12); }
9、更新显示
三、显示字符、字符串、汉字
1、显示字符
2、显示字符串
3、显示汉字
4、取模软件
const CH_CN Font12CN_Table[] = { {"团", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02, 0x40,0x42,0x40,0x42,0x5F,0xFA,0x40,0xC2, 0x41,0x42,0x46,0x42,0x4C,0x42,0x70,0x42, 0x43,0xC2,0x40,0x02,0x7F,0xFE,0x40,0x02, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }, {"源", 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x00,0x27,0xFF,0x14,0x10, 0x04,0x20,0x44,0xFE,0x24,0x82,0x14,0xFE, 0x04,0x82,0x24,0xFE,0x24,0x10,0x24,0x54, 0x28,0x92,0x49,0x13,0x5A,0x11,0x50,0x70, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }, }; cFONT Font12CN = { Font12CN_Table, sizeof(Font12CN_Table)/sizeof(CH_CN), /*size of table*/ 11, /* ASCII Width */ 16, /* Width */ 21, /* Height */ };