STM32L4R5ZI NUCLEO开发板 学习日记 点亮0.96OLED灯 CubeMx hal库
一、创建工程
可以参考之前的学习笔记,这里不再累赘,附上链接: 新手点灯参考这里的工程创建,仍然使用开发板默认配置。 可以看到,这里默认配置里已经占用了一些GPIO,在配置OLED时注意不要冲突,开发板原理图和手册可以在主页里自行下载
二、 0.96 oled 代码移植
购买的0.96寸oled屏幕,参考淘宝客服给的例程,进行移植 这里使用的是7针的SPI通信 将例程文件中的 oled.c oled.h 等文件复制到本工程文件下 (oled例程文件可在主页资源中自行下载) 在cubeMx生成的文件夹这里新建一个HAEDWEAR文件夹,用于存放oled.c .h 文件 新建oled文件夹 将例程中的这几个文件粘过来 打开工程进行配置 首先在头文件中包含这两个文件 设置工程路径,不然编译会找不到文件
然后选择刚才设置的oled.h 文件所在的文件夹(HARDWAER——>OLED) 至此工程配置完成 修改oled.h文件中宏定义 我使用的是:PD3 PD4 PD5 PD6 PD7
修改oled.c文件中OLED初始化函数
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
(主要修改这里,其余地方不用改,注意不要与默认配置冲突)
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_15, GPIO_PIN_SET);
OLED_RST_Set();
HAL_Delay(100);
OLED_RST_Clr();
HAL_Delay(200);
OLED_RST_Set();
OLED_WR_Byte(0xAE,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x10,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
OLED_WR_Byte(0x81,OLED_CMD);
OLED_WR_Byte(0xCF,OLED_CMD);
OLED_WR_Byte(0xA1,OLED_CMD);
OLED_WR_Byte(0xC8,OLED_CMD);
OLED_WR_Byte(0xA6,OLED_CMD);
OLED_WR_Byte(0xA8,OLED_CMD);
OLED_WR_Byte(0x3f,OLED_CMD);
OLED_WR_Byte(0xD3,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0xd5,OLED_CMD);
OLED_WR_Byte(0x80,OLED_CMD);
OLED_WR_Byte(0xD9,OLED_CMD);
OLED_WR_Byte(0xF1,OLED_CMD);
OLED_WR_Byte(0xDA,OLED_CMD);
OLED_WR_Byte(0x12,OLED_CMD);
OLED_WR_Byte(0xDB,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
OLED_WR_Byte(0x20,OLED_CMD);
OLED_WR_Byte(0x02,OLED_CMD);
OLED_WR_Byte(0x8D,OLED_CMD);
OLED_WR_Byte(0x14,OLED_CMD);
OLED_WR_Byte(0xA4,OLED_CMD);
OLED_WR_Byte(0xA6,OLED_CMD);
OLED_WR_Byte(0xAF,OLED_CMD);
OLED_Clear();
}
修改main.c
#include "oled.h"
#include "bmp.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_LPUART1_UART_Init();
MX_USART3_UART_Init();
MX_USB_OTG_FS_PCD_Init();
OLED_Init();
uint8_t t=' ';
while (1)
{
OLED_ShowPicture(0,0,128,8,BMP1);
HAL_Delay(500);
OLED_Clear();
OLED_ShowChinese(0,0,0,16);
OLED_ShowChinese(18,0,1,16);
OLED_ShowChinese(36,0,2,16);
OLED_ShowChinese(54,0,3,16);
OLED_ShowChinese(72,0,4,16);
OLED_ShowChinese(90,0,5,16);
OLED_ShowChinese(108,0,6,16);
OLED_ShowString(8,16,"ZHONGJINGYUAN",16);
OLED_ShowString(20,32,"2014/05/01",16);
OLED_ShowString(0,48,"ASCII:",16);
OLED_ShowString(63,48,"CODE:",16);
OLED_ShowChar(48,48,t,16);
t++;
if(t>'~')t=' ';
OLED_ShowNum(103,48,t,3,16);
OLED_Refresh();
HAL_Delay(500);
OLED_Clear();
OLED_ShowChinese(0,0,0,16);
OLED_ShowChinese(16,0,0,24);
OLED_ShowChinese(24,20,0,32);
OLED_ShowChinese(64,0,0,64);
OLED_Refresh();
HAL_Delay(500);
OLED_Clear();
OLED_ShowString(0,0,"ABC",12);
OLED_ShowString(0,12,"ABC",16);
OLED_ShowString(0,28,"ABC",24);
OLED_Refresh();
HAL_Delay(500);
OLED_ScrollDisplay(11,4);
}
}
三、连接并查看oled显示
用杜邦线连接上面定义的对应引脚
烧录查看现象 如有问题还望指正,谢谢!!!
|