购买了一片微雪的1.28寸圆形的LCD IPS显示屏模块 主控为GC9A01驱动。屏幕分辨率为240x240,带触摸功能。显示屏使用SPI驱动,触摸部分使用的是I2C通讯。这里使用STM32WBA55CG点亮屏幕,没有连接触摸功能。
一、硬件连接。
参考着微雪提供的wiki文档,这个屏幕使用SPI通讯。SPI有3根线:mosi,miso和sclk。这里有点小小的疑惑,看例程都是单片机给屏幕发送命令,没有屏幕给单片机发送命令的部分,所以应该是只用到了mosi信号线,没有使用到miso线,最后经测试确实如此,miso线可以不接。参考着原理图,将接线图做处理做了个Excel文件,方便操作。屏幕背光线bl可以直接接到3.3v高电平。
CN3 | 1.28寸触摸屏 | CN4 | 1.28寸触摸屏 | |||||||||||||||
1 | GPIO_0 | 2 | GPIO_2 | 1 | GPIO_26 | 2 | GPIO_25 | |||||||||||
3 | GPIO_1 | 4 | GPIO_4 | 3 | GPIO_28 | PB2 | D15 | SCL | 4 | GPIO_27 | ||||||||
5 | VDD | 6 | 5V | 5 | GPIO_29 | PB1 | D14 | SDA | 6 | GPIO_30 | ||||||||
7 | GPIO_3 | 8 | GND | 7 | AVDD | AVDD | 8 | 5V | ||||||||||
9 | GPIO_5 | 10 | 9 | GND | 10 | GPIO_32 | ||||||||||||
11 | GPIO_6 | 12 | IOREF | 11 | GPIO_31 | PB4(LD1) | D13 | SCK | 橙 | sclk | 12 | GPIO_35 | ||||||
13 | GPIO_8 | 14 | NRST | 13 | GPIO_33 | PB3 | D12 | MISO | 14 | GPIO_36 | ||||||||
15 | GPIO_9 | 16 | 3V3 | 15 | GPIO_34 | PA15 | D11 | MOSI | 黄 | mosi | 16 | GPIO_38 | ||||||
17 | GPIO_10 | 18 | 5V | 17 | GPIO_37 | PA12 | D10 | SS | 绿 | cs | 18 | GPIO_40 | ||||||
19 | GND | 20 | GND | 19 | GPIO_39 | PA9 | D9 | 20 | GND | |||||||||
21 | GPIO_13 | 22 | GND | 21 | GPIO_41 | PA15/PA11 | D8 | 22 | GPIO_43 | |||||||||
23 | GPIO_14 | 24 | VIN | 23 | GPIO_42 | PB9/PC13 | D7 | 24 | GPIO_45 | |||||||||
25 | GPIO_15 | 26 | GPIO_7 | 25 | GPIO_44 | PB0 | D6 | 紫 | rst | 26 | GPIO_46 | |||||||
27 | GPIO_16 | 28 | GPIO_11 | PA7 | A0 | 27 | GPIO_47 | PB14 | D5 | 白 | dc | 28 | GPIO_48 | |||||
29 | GPIO_19 | 30 | GPIO_12 | PA6 | A1 | TIM2_CH4 | 棕 | bl | 29 | GPIO_49 | PB13 | D4 | 30 | GPIO_51 | ||||
31 | GPIO_20 | 32 | GPIO_17 | PA2 | A2 | 31 | GPIO_50 | PB6(B2) | D3 | 32 | GND | |||||||
33 | VBAT | 34 | GPIO_18 | PA1 | A3 | 33 | GPIO_52 | PB7(B3) | D2 | 34 | GPIO_53 | |||||||
35 | GPIO_23 | 36 | GPIO_21 | PA5/PA8 | A4 | SDA | 35 | GPIO_54 | PB5 | D1 | 36 | GPIO_56 | ||||||
37 | GPIO_24 | 38 | GPIO_22 | PA0/PA5 | A5 | SCL | 37 | GPIO_55 | PA10 | D0 | 38 | GPIO_57 |
二、STM32CubeMX创建工程。
使用stm32cubemx选择stm32wba55cg芯片创建工程,开启板子的spi功能,使用全双工主机方式,修改一下data size为8bit。
参考着老师的视频,开启PWM输出,用来驱动屏幕背光。最后再开启CS、RST、DC三个管脚。同时还开启了板载的两个LED。
最后选择编译工具,我这里使用的是Keil,将输出代码的这个地方勾选,这样生成的代码会为每个服务单独建立对应的c文件。
三、使用keil在工程中添加驱动屏幕的代码。
在项目中添加一个LCD文件夹,用来存放LCD的驱动文件。在keil中增加一个group,将微雪提供的例程,放到自己的文件夹中,然后添加到keil的group中。
/* USER CODE BEGIN 2 */ printf("hello stm32 LCD\n"); DEV_Module_Init(); printf("LCD_1IN28_ Init and Clear...\r\n"); LCD_1IN28_Init(VERTICAL); LCD_1IN28_Clear(RED); DEV_Delay_ms(3000); LCD_1IN28_Clear(GREEN); DEV_Delay_ms(3000); Paint_NewImage(LCD_1IN28_WIDTH,LCD_1IN28_HEIGHT, 0, BLACK); printf("Set Clear and Display Funtion\r\n"); Paint_SetClearFuntion(LCD_1IN28_Clear); Paint_SetDisplayFuntion(LCD_1IN28_DrawPaint); Paint_Clear(BLUE); DEV_Delay_ms(3000); Paint_DrawCircle(120,120, 120, BLUE ,DOT_PIXEL_2X2,DRAW_FILL_EMPTY); Paint_DrawLine (120, 0, 120, 12,GREEN ,DOT_PIXEL_4X4,LINE_STYLE_SOLID); Paint_DrawLine (120, 228, 120, 240,GREEN ,DOT_PIXEL_4X4,LINE_STYLE_SOLID); Paint_DrawLine (0, 120, 12, 120,GREEN ,DOT_PIXEL_4X4,LINE_STYLE_SOLID); Paint_DrawLine (228, 120, 240, 120,GREEN ,DOT_PIXEL_4X4,LINE_STYLE_SOLID); Paint_DrawString_EN(90, 110, "EEPW",&Font24, BLUE, RED); /* USER CODE END 2 */
四、效果演示。
五、项目源码。