目录
1.软件准备
(1)编程平台:Keil5
(2)CubeMX
(3)中景园移植代码——点我下载 提取码:6666
2.硬件准备
(1)F1的板子,本例使用经典F103C8T6
(2)0.96'/1.3' OLED屏幕模块(7针,SSD1306驱动)
(3)ST-link 下载器
(4)杜邦线若干
3.CubeMX配置
(1)芯片选择
(2)配置RCC、SYS、时钟树
![](https://i-blog.csdnimg.cn/blog_migrate/aa7d9d0c42a1269da2b6d753b9ecb1fa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9d1ec390fb081d15d59d72bfd8f36fa2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/806ab50854cbd96646842b1ca29c9208.png)
(3)配置SPI
![](https://i-blog.csdnimg.cn/blog_migrate/f43883583c39b2cc212decc1a42bb956.png)
(4)配置GPIO
![](https://i-blog.csdnimg.cn/blog_migrate/d57a933c5053758cdaf69ac2279efc53.png)
(5)生成代码工程
![](https://i-blog.csdnimg.cn/blog_migrate/26a3a6344d527fd974f3756a0976bda5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8e3c1cae234f8cebd51459a2a8379d4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fc2ab9bfb5efded4790d911749726a8d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/45a0612acdd98ef21dc88a876a3f8534.png)
![](https://i-blog.csdnimg.cn/blog_migrate/441de9b99e2a686d7739cd51445141bc.png)
4.代码移植
(1)复制文件
![](https://i-blog.csdnimg.cn/blog_migrate/f02da3ea5bc50427d4f9197eba30534f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c8cce6d28d143a183682ead829d9474a.png)
(2)在Keil5里添加文件
(3)修改oled.h文件
![](https://i-blog.csdnimg.cn/blog_migrate/cd6f84b80f7ffc6f463cf77e9d491139.png)
//--------------------------------给各位复制的代码
//--------------------------------给各位复制的代码
//--------------------------------给各位复制的代码
#ifndef __OLED_H
#define __OLED_H
#include "main.h"
#include "stdlib.h"
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
//-----------------OLED端口定义----------------
//#define OLED_SCL_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_0)//SCL
//#define OLED_SCL_Set() GPIO_SetBits(GPIOA,GPIO_Pin_0)
//#define OLED_SDA_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_1)//SDA
//#define OLED_SDA_Set() GPIO_SetBits(GPIOA,GPIO_Pin_1)
//#define OLED_RES_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_2)//RES
//#define OLED_RES_Set() GPIO_SetBits(GPIOA,GPIO_Pin_2)
//#define OLED_DC_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_3)//DC
//#define OLED_DC_Set() GPIO_SetBits(GPIOA,GPIO_Pin_3)
//
//#define OLED_CS_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_4)//CS
//#define OLED_CS_Set() GPIO_SetBits(GPIOA,GPIO_Pin_4)
//****************复位*********************
#define OLED_RES_Clr() HAL_GPIO_WritePin(OLED_RES_GPIO_Port,OLED_RES_Pin, GPIO_PIN_RESET)
#define OLED_RES_Set() HAL_GPIO_WritePin(OLED_RES_GPIO_Port,OLED_RES_Pin, GPIO_PIN_SET)
//****************数据/命令***************
#define OLED_DC_Clr() HAL_GPIO_WritePin(OLED_DC_GPIO_Port,OLED_DC_Pin, GPIO_PIN_RESET)
#define OLED_DC_Set() HAL_GPIO_WritePin(OLED_DC_GPIO_Port,OLED_DC_Pin, GPIO_PIN_SET)
//****************片选*********************
#define OLED_CS_Clr() HAL_GPIO_WritePin(OLED_CS_GPIO_Port,OLED_CS_Pin, GPIO_PIN_RESET)
#define OLED_CS_Set() HAL_GPIO_WritePin(OLED_CS_GPIO_Port,OLED_CS_Pin, GPIO_PIN_SET)
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
(4)修改oled.c文件
添加:
#include "spi.h"
添加:
HAL_SPI_Transmit(&hspi2,&dat,1, 1000);
完成到这里,此时编译不会报错
(5)修改main.c函数
添加:
#include "oled.h"
#include "bmp.h"
添加:
u8 t=' ';
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
//--------------------------给各位复制的代码
//--------------------------给各位复制的代码
//--------------------------给各位复制的代码
OLED_ShowPicture(0,0,128,64,BMP1,1);
OLED_Refresh();
HAL_Delay(200);
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1);//中
OLED_ShowChinese(18,0,1,16,1);//景
OLED_ShowChinese(36,0,2,16,1);//园
OLED_ShowChinese(54,0,3,16,1);//电
OLED_ShowChinese(72,0,4,16,1);//子
OLED_ShowChinese(90,0,5,16,1);//技
OLED_ShowChinese(108,0,6,16,1);//术
OLED_ShowString(8,16,"ZHONGJINGYUAN",16,1);
OLED_ShowString(20,32,"2014/05/01",16,1);
OLED_ShowString(0,48,"ASCII:",16,1);
OLED_ShowString(63,48,"CODE:",16,1);
OLED_ShowChar(48,48,t,16,1);//显示ASCII字符
t++;
if(t>'~')t=' ';
OLED_ShowNum(103,48,t,3,16,1);
OLED_Refresh();
HAL_Delay(200);
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1); //16*16 中
OLED_ShowChinese(16,0,0,24,1); //24*24 中
OLED_ShowChinese(24,20,0,32,1);//32*32 中
OLED_ShowChinese(64,0,0,64,1); //64*64 中
OLED_Refresh();
HAL_Delay(200);
OLED_Clear();
OLED_ShowString(0,0,"ABC",8,1);//6*8 “ABC”
OLED_ShowString(0,8,"ABC",12,1);//6*12 “ABC”
OLED_ShowString(0,20,"ABC",16,1);//8*16 “ABC”
OLED_ShowString(0,36,"ABC",24,1);//12*24 “ABC”
OLED_Refresh();
HAL_Delay(200);
OLED_ScrollDisplay(11,4,1);
(6).代码下载
到这一步,如果编译没有错误就可以自行下载程序了。如果有错,就是哪里自己搞错了,回去重新仔细看一下。
接线: (如引脚未按照上述例程配置,则自行通过自己映射的引脚接线即可)