文章目录
- 任务要求
-
- SPI协议接口
- 例程改写
- 总结
任务要求
练习通过SPI总线实现OLED屏幕显示。显示自己的学号和姓名。
本人所用开发板:野火STM32F103指南者;
代码编写烧录:KEIL5
所用协议:SPI;
所用例程来源:http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_Module
SPI协议接口
SPI协议(SerialPeripheralInterface),即串行外围设备接口,是一种高速全双工的通信总线。
基本通信过程:
SPI接口位置:
SPI引脚:
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据;
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据;
SCK:串口时钟,作为主设备的输入,从设备的输入;
NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
SPI下的STM32与OLED连接
例程改写
1.在OLED官网下载例程:
http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_Module
下载完成解压后再用KEIL打开SPI对应的OLED显示例程“0.96inch_OLED_Demo_STM32F103ZET6_Hardware_4-wire_SPI”,如下:
2.STM32与OLED的连接依据main.c程序里的注释提示进行连接即可,如下:
注意:此时的OLED的CS接口不用连接,只需要六根线进行STM32与OLED的连接。
完成后,模块显示如下:
此时直接编译烧录例程,不用改动,显示如下:
此时如果OLED屏不显示,可能是接线有问题,检查即可。
3.改写程序:
在oledfont.h头文件里添加个人需要显示的汉字字模,此时需要利用PCtoLCD软件,打开界面如下:
该软件为野火资料包里的开发软件自带。
关于字模软件的使用详见野火自带教程。
此时选取字模,添加进数组。如下:
const typFNT_GB16 cfont16[] =
{
"马",0x00,0x00,0x7F,0xE0,0x00,0x20,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x1F,0xFC,
0x00,0x04,0x00,0x04,0x00,0x04,0xFF,0xE4,0x00,0x04,0x00,0x04,0x00,0x28,0x00,0x10,
"舒",0x10,0x00,0x11,0xF8,0x28,0x08,0x44,0x50,0x82,0x20,0x7C,0x10,0x13,0xFE,0x10,0x22,
0xFE,0x24,0x10,0x20,0x10,0x20,0x7C,0x20,0x44,0x20,0x44,0x20,0x7C,0xA0,0x44,0x40,
"娅",0x20,0x00,0x23,0xFC,0x20,0x90,0x20,0x90,0xF8,0x90,0x48,0x92,0x4C,0x92,0x4A,0x94,
0x8A,0x94,0x4A,0x98,0x30,0x90,0x10,0x90,0x28,0x90,0x48,0x90,0x87,0xFE,0x00,0x00,
注意:此时我选择的是1616的OLED汉字显示,因此在添加字模时,也是添加进1616汉字显示对应的数组。添加后注意保存。
再进入test.c进行修改,将void TEST_MainPage(void)函数修改。如下:
void TEST_MainPage(void)
{
GUI_ShowString(20,0,"631807030324",8,1);
GUI_ShowCHinese(16,20,16,"马舒娅",1);
delay_ms(1500);
}
修改完成,再进入main.c文件进行修改,如下:
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIc中断分组2:2位抢占优先级,2位响应优先级
OLED_Init(); //初始化OLED
OLED_Clear(0); //清屏,全黑
while(1)
{
TEST_MainPage(); //主页面显示姓名与学号
OLED_Clear(0);
}
}
此时全部程序已修改完毕,现在进行编译烧录,即可成功运行。
烧录完成,显示如下:
总结
本次STM32 SPI协议接口下的OLED屏显示主要任务已完成,对于STM32的SPI接口协议的学习还需更加深入。