本帖最后由 jinglixixi 于 2023-7-18 09:01 编辑  
 
#申请原创#  
STM32WBA52是一种面向无线通信的开发板,因此在使用中应配上一款小巧和多用途的显示屏。这里需要的0.96寸LCD显示屏正符合其要求,它不但能显示数值信息,也能显示彩色的图像。 该显示屏以SPI的接口方式工作,其引脚与开发板的连接关系为: CLK---PB4 DIN---PB3 RST ---PA15 DC ---PA12 CS ---PA9 BLK ---PB10  
 
所使用的Arduino接口如图1所示,稍感不便的是LCD屏的电源引脚与接口有所不同,因此无法直接插接使用。 图1  Arduino接口  
  
各引脚输出高低电平的引脚定义为: #define OLED_SCLK_Set()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,GPIO_PIN_SET) #define OLED_SCLK_Clr()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,GPIO_PIN_RESET) #define OLED_SDIN_Set()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3,GPIO_PIN_SET) #define OLED_SDIN_Clr()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3,GPIO_PIN_RESET) #define OLED_RST_Set()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15,GPIO_PIN_SET) #define OLED_RST_Clr()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15,GPIO_PIN_RESET) #define OLED_DC_Set()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12,GPIO_PIN_SET) #define OLED_DC_Clr()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12,GPIO_PIN_RESET) #define OLED_CS_Set()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_SET) #define OLED_CS_Clr()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_RESET) #define OLED_BLK_Set()     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,GPIO_PIN_SET) #define OLED_BLK_Clr()     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,GPIO_PIN_RESET)  
所用引脚的工作模式配置函数为: - void LCD_GPIO_Init(void)
 
 - {
 
 -   __HAL_RCC_GPIOB_CLK_ENABLE();
 
 -   GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
 
 -   GPIO_InitStruct.Pull  = GPIO_NOPULL; //GPIO_PULLUP
 
 -   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
 
 -   GPIO_InitStruct.Pin = GPIO_PIN_4;
 
 -   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
 -   GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_3;
 
 -   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
 -   __HAL_RCC_GPIOA_CLK_ENABLE();
 
 -   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_12|GPIO_PIN_15;
 
 -   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 - }
 
 
  
显示屏的字符串显示的函数为: - void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
 
 - {
 
 -     while(*p!='\0')
 
 -     {
 
 -         if(x>LCD_W-16){x=0;y+=16;}
 
 -         if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
 
 -         LCD_ShowChar(x,y,*p,0,color);
 
 -         x+=8;
 
 -         p++;
 
 -     }
 
 - }
 
 
 显示屏显示图像的函数为: - void LCD_ShowPictureb(u16 x1,u16 y1,u16 x2,u16 y2)
 
 - {
 
 -       int i;
 
 -       LCD_Address_Set(x1,y1,x2,y2);
 
 -       for(i=0;i<12800;i++)
 
 -       {
 
 -             LCD_WR_DATA8(gImage_RW[i*2]);
 
 -             LCD_WR_DATA8(gImage_RW[i*2+1]);
 
 -       }
 
 - }
 
 
 实现显示效果的主程序为: - int main(void)
 
 - {
 
 -     unsigned int i,k,j=0;
 
 -     HAL_Init();
 
 -     SystemClock_Config();
 
 -     MX_GPIO_Init();
 
 -     MX_ICACHE_Init();
 
 -     LD1_GPIO_CLK_ENABLE();
 
 -     LD2_GPIO_CLK_ENABLE();
 
 -     GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
 
 -     GPIO_InitStruct.Pull  = GPIO_NOPULL;
 
 -     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
 
 -     GPIO_InitStruct.Pin = LD1_PIN;
 
 -     HAL_GPIO_Init(LD1_GPIO_PORT, &GPIO_InitStruct);
 
 -     GPIO_InitStruct.Pin = LD2_PIN;
 
 -     HAL_GPIO_Init(LD2_GPIO_PORT, &GPIO_InitStruct);
 
 -     LCD_GPIO_Init();
 
 -     Lcd_Init();
 
 -     BACK_COLOR=RED;
 
 -     LCD_Clear(RED);
 
 -     LCD_ShowString(20,10,"STM32WBA52CG",YELLOW); 
 
 -     LCD_ShowString(20,40,"jinglixixi",YELLOW);
 
 -     HAL_Delay(2000);
 
 -     LCD_ShowPictureb(0,0,159,79);
 
 -     while(1)
 
 -     {
 
 -                  HAL_GPIO_TogglePin(LD2_GPIO_PORT, LD2_PIN);
 
 -                  HAL_Delay(200);
 
 -     }
 
 - }
 
 
  
经程序的编译与下载,其显示效果如图2和图3所示。 图2  文字显示效果  
图3  图片显示效果  
 在RTC的配合,实现计时显示的函数为: - static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
 
 - {
 
 -     RTC_DateTypeDefsdatestructureget;
 
 -     RTC_TimeTypeDefstimestructureget;
 
 -     HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
 
 -     HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
 
 -     sprintf((char *)showtime, "%2d:%2d:%2d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
 
 -     sprintf((char *)showdate, "%2d-%2d-%2d", sdatestructureget.Month, sdatestructureget.Date, 2000 + sdatestructureget.Year);
 
 -         LCD_ShowString(10,30,showtime,YELLOW);
 
 -         LCD_ShowString(10,50,showdate,YELLOW);
 
 - }
 
 
 实现电子时钟显示效果的主程序为: - int main(void)
 
 - {
 
 -     HAL_Init();
 
 -     SystemClock_Config();
 
 -     MX_GPIO_Init();
 
 -     MX_RTC_Init();
 
 -     MX_ICACHE_Init();
 
 -     RTCStatus = 1;
 
 -         LCD_GPIO_Init();
 
 -     Lcd_Init();
 
 -         BACK_COLOR=RED;
 
 -         LCD_Clear(RED);
 
 -         LCD_ShowString(20,10,"STM32WBA52CG",YELLOW);
 
 -     while (1)
 
 -     {
 
 -         RTC_CalendarShow(aShowTime, aShowDate);
 
 -     }
 
 - }
 
 
 经程序的编译与下载,其显示效果如图4和图5所示。 图4  计时效果  
 图5  显示效果  
 
 
 
 
 
 
 
  |