本帖最后由 jinglixixi 于 2020-12-11 22:20 编辑
ART-Pi开发板在外设资源方面,尤其是人机交互方面急需补充,为此我们为它配置了一个彩色OLED屏来作为显示的窗口。 该彩色OLED屏与MCU的连接关系为: SCLK---PH11 SDA---PH12 RST---PH13 DC ---PH15 CS ---PH7 BLK ---PH9 为便于进行快速的移植,这里采用I/O口模拟SPI通信的方式来进行驱动。 在驱动时,相关引脚输出高低电平的引脚定义为: #define OLED_SCLK_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET)//CLK #define OLED_SCLK_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET)
#define OLED_SDIN_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET)//DIN #define OLED_SDIN_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET)
#define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_RESET) //RES #define OLED_RST_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_SET)
#define OLED_DC_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_RESET) //DC #define OLED_DC_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_SET)
#define OLED_CS_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_RESET) //CS #define OLED_CS_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_SET)
#define OLED_BLK_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_RESET) //BLK #define OLED_BLK_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_SET)
为使相关引脚配置为输出功能其功能函数为: - void app_oled_init()
- {
- GPIO_InitTypeDef GPIO_Initure;
- __HAL_RCC_GPIOH_CLK_ENABLE();
- GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_15;
- GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
- GPIO_Initure.Speed=GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOH,&GPIO_Initure);
- }
复制代码
使OLED屏显示图1和图2显示效果的主程序为: - int main(void)
- {
- u8 i;
- Cache_Enable();
- HAL_Init();
- Stm32_Clock_Init(160,5,2,4);
- delay_init(400);
- LED_Init();
- Lcd_Init();
- LCD_Clear(BLACK);
- BACK_COLOR=BLACK;
- LCD_ShowChinese(28,0,0,32,YELLOW);
- LCD_ShowChinese(60,0,1,32,YELLOW);
- LCD_ShowChinese(92,0,2,32,YELLOW);
- LCD_ShowChinese(20,40,0,16,YELLOW);
- LCD_ShowChinese(36,40,1,16,YELLOW);
- LCD_ShowChinese(52,40,2,16,YELLOW);
- LCD_ShowChinese(68,40,3,16,YELLOW);
- LCD_ShowChinese(84,40,4,16,YELLOW);
- LCD_ShowChinese(100,40,5,16,YELLOW);
- LCD_ShowChinese(116,40,6,16,YELLOW);
- LCD_ShowString(0,60,"0.96 TFT SPI",YELLOW);
- delay_ms(1000);
- LCD_Clear(BLACK);
- LCD_ShowString(10,0,"LCD_W:",RED);
- LCD_ShowNum(70,0,LCD_W,3,RED);
- LCD_ShowString(10,20,"LCD_H:",RED);
- LCD_ShowNum(70,20,LCD_H,2,RED);
- for(i=0;i<4;i++)
- {
- LCD_ShowPicture(i*40,40,39+i*40,79);
- }
- delay_ms(1000);
- while(1)
- {
- LED2(1);
- delay_ms(500);
- LED2(0);
- delay_ms(500);
- }
- }
复制代码图1 显示字符
图2 显示图案
在完成了OLED屏的显示驱动后,再有显示的问题就无需完全依赖串口通信了,况且它的表现形式也是串口所无法替代的。
|