[STM32WB] 【STM32WB09KE测评】+彩色LCD屏显示驱动

[复制链接]
 楼主| jinglixixi 发表于 2024-10-31 11:35 | 显示全部楼层 |阅读模式
<
#申请原创#
STM32WB09KE开发板除了配接的无线扩展板外,它近于一款最小系统型的开发板,因此在实际应用中要借助扩展接口来自行丰富外设资源。当然这其中最主要的就是为它添加显示功能,以便进行人机间的交互。
为此,这里为它添加了一款LCD屏,该显示屏采用SPI接口的工作发送,其显示分辨率为160*80像素点。
为驱动该显示屏,它是使用图1所示的接口来连接显示屏。
310626722fa17af1a3.png
1 扩展接口
比较惊奇的是,尽管引脚的名称被冠以GPIO28D15,但在实际编程时却是要以PB6的形式来使用,为此就需要借助一张变换表来转换处理。
经转换处理,所使用的引脚分别为PB6PB7PB3PA8PA11PA9
为便于以GPIO口来模拟SPI接口工作,对各引脚输出高低电平的语句定义如下:
#define OLED_SCLK_Set   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET)  //CLK
#define OLED_SCLK_Clr   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET)
#define OLED_SDIN_Set   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET)  //DIN
#define OLED_SDIN_Clr   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET)
#define OLED_RST_Set    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET) //RES
#define OLED_RST_Clr    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET)
#define OLED_DC_Set     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET)  //DC
#define OLED_DC_Clr     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET)
#define OLED_CS_Set     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET)  //CS
#define OLED_CS_Clr     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET)
#define OLED_BLK_Set    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET) //BLK
#define OLED_BLK_Clr    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET)
SPI方式方式字节数据的函数为:
  1. static void  LCD_Writ_Bus(u8 dat)
  2. {
  3.     u8 i;
  4.     OLED_CS_Clr;
  5.     for(i=0;i<8;i++)
  6.     {
  7.         OLED_SCLK_Clr;
  8.         if(dat&0x80)
  9.            OLED_SDIN_Set;
  10.         else
  11.            OLED_SDIN_Clr;
  12.         OLED_SCLK_Set;
  13.         dat<<=1;
  14.     }
  15.     OLED_CS_Set;
  16. }

实现指定色彩清除屏幕的函数为:
  1. static void LCD_Clear(u16 Color)
  2. {
  3.     u16 i,j;
  4.     LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
  5.     for(i=0;i<LCD_W;i++)
  6.     {
  7.         for (j=0;j<LCD_H;j++)
  8.         {
  9.              LCD_WR_DATA(Color);
  10.         }
  11.     }
  12. }

在字库的配合下,实现字符串显示的函数为:
  1. static void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
  2. {
  3.     while(*p!='\0')
  4.     {
  5.         if(x>LCD_W-16)
  6. {
  7. x=0;
  8. y+=16;
  9. }
  10.         if(y>LCD_H-16)
  11. {
  12. y=x=0;
  13. LCD_Clear(RED);
  14. }
  15.                 LCD_ShowChar(x,y,*p,1,color);
  16.         x+=8;
  17.         p++;
  18.     }
  19. }

在以上函数的配合下,实现测试显示的主程序为:
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   PeriphCommonClock_Config();
  6.   MX_GPIO_Init();
  7.   LD1_GPIO_CLK_ENABLE();
  8.   LD2_GPIO_CLK_ENABLE();
  9.   GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  10.   GPIO_InitStruct.Pull  = GPIO_NOPULL;
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  12.   GPIO_InitStruct.Pin = LD1_PIN;
  13.   HAL_GPIO_Init(LD1_GPIO_PORT, &GPIO_InitStruct);
  14.   GPIO_InitStruct.Pin = LD2_PIN;
  15.   HAL_GPIO_Init(LD2_GPIO_PORT, &GPIO_InitStruct);
  16. GPIO_InitStruct.Pin = GPIO_PIN_6;
  17.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  18.   GPIO_InitStruct.Pin = GPIO_PIN_7;
  19.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  20. GPIO_InitStruct.Pin = GPIO_PIN_3;
  21.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  22. __HAL_RCC_GPIOA_CLK_ENABLE();
  23.   GPIO_InitStruct.Pin = GPIO_PIN_8;
  24.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  25.   GPIO_InitStruct.Pin = GPIO_PIN_11;
  26.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);       
  27. GPIO_InitStruct.Pin = GPIO_PIN_9;
  28.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);       
  29. Lcd_Init();
  30.   LCD_Clear(RED);
  31.   LCD_ShowString(10,10,"STM32WB09KE",YELLOW);
  32.   LCD_ShowString(10,30,"jinglixixi",YELLOW);
  33.   while (1)
  34.   {
  35.     HAL_GPIO_TogglePin(LD1_GPIO_PORT, LD1_PIN);
  36.     HAL_Delay(100);
  37.     HAL_GPIO_TogglePin(LD2_GPIO_PORT, LD2_PIN);
  38.   HAL_Delay(100);
  39.   }
  40. }

经程序的编译和运行,其显示效果如图2所示,说明对该LCD屏的显示驱动有效,可以凭借它完成显示工作。
800516722fac71a3bd.png
2 显示效果

plsbackup 发表于 2024-11-12 11:35 | 显示全部楼层
STM32WB09KE性能不错
zhuomuniao110 发表于 2024-11-15 18:42 | 显示全部楼层
IO模拟的,不如用SPI硬件的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部