[原创] 【NUCLEO-L452RE测评】+管脚驱动1.3寸OLED并用任务显示次数

ddllxxrr   2020-12-27 14:48 楼主

每当我想搞个屏显示的时候我就会找一个管脚少且容易驱动的屏,本来想用真的SPI驱动。但没有管脚来得快。

我想分两步走吧,以后再搞硬件的。。。。。。也不知何时,反正,大约在冬季。

先说说我的屏吧。

SPI的规格书传一下:

怎么加不进来应在附件里边吧。

01-规格书+驱动芯片手册.zip (3.27 MB)
(下载次数: 2, 2020-12-27 14:46 上传)

然后就加上要用的几个管脚:我用的是PA11、PA12、 PB11、PB12,电源和地不算,只要插上就行

eeworldL452_22.jpg

然后,反整个OLED文件作为一个OLED子目录的东东,考到本程序根目录下

在oled.h文件中,改管脚的定义,初始化在STM32CUBEMX中自动完成

//-----------------OLED端口定义----------------  					   
#define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_12)//CLK
#define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_12)

#define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_13)//DIN
#define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_13)

#define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_14)//RES
#define OLED_RST_Set() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_14)

#define OLED_DC_Clr() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pins_15)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pins_15)

然后在主函数中包含这个头文件,在初始化时一定要注意,就是各管脚初始化完了后,一下要接高。这个让我费了半天的时间。

//OLED_CS_Clr();  //打开片选使能
	OLED_SCLK_Set()
	OLED_SDIN_Set()
	OLED_RST_Set();
	HAL_Delay(1);
	 OLED_RST_Clr();
	HAL_Delay(20);
	OLED_RST_Set();
	HAL_Delay(20);
	//OLED_BLK_Set();
	
//************* Start Initial Sequence **********// 
LCD_WR_REG(0x36); 
LCD_WR_DATA8(0x00);

LCD_WR_REG(0x3A); 
LCD_WR_DATA8(0x05);

LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x33);
LCD_WR_DATA8(0x33);

LCD_WR_REG(0xB7); 
LCD_WR_DATA8(0x35);  

LCD_WR_REG(0xBB);
LCD_WR_DATA8(0x19);

LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x2C);

LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x01);

LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x12);   

LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x20);  

LCD_WR_REG(0xC6); 
LCD_WR_DATA8(0x0F);    

LCD_WR_REG(0xD0); 
LCD_WR_DATA8(0xA4);
LCD_WR_DATA8(0xA1);

LCD_WR_REG(0xE0);
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2B);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x54);
LCD_WR_DATA8(0x4C);
LCD_WR_DATA8(0x18);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0B);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x23);

LCD_WR_REG(0xE1);
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2C);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x44);
LCD_WR_DATA8(0x51);
LCD_WR_DATA8(0x2F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x20);
LCD_WR_DATA8(0x23);

LCD_WR_REG(0x21); 

LCD_WR_REG(0x11); 
//Delay (120); 

LCD_WR_REG(0x29); 
 

开始,没有给个管脚的初始值置位,这样就驱动不起来。我搞了半天也没有搞明白,我从管脚定义都改了,把时钟也改成除4后的时钟还是不行。

最后加了个初始值搞定了。

在默认任务里加个变量,然后显示。没有什么意义,就是显示。

再有STM32CUBEMX 有一点不好,一复位以前定义的就没有了。

现在我想要以前的任务还得对照以前的贴子,慢慢建立。

以下是照片:

eeworldL452_23.jpg

 

怎么说呢,以后的贴子就用显示部的的FREERTOS了。这次OLED打包传了,省得下次找不到。

OLED.rar (10.17 KB)
(下载次数: 0, 2020-12-27 14:48 上传)

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论 (2)

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2020-12-28 11:01

谢谢大佬分享,期待后续!

默认摸鱼,再摸鱼。2022、9、28
点赞  2020-12-29 22:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复