正点原子学习小组
直播中

张兴照

11年用户 93经验值
擅长:可编程逻辑 电源/新能源 模拟技术 测量仪表 嵌入式技术 存储技术 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【正点原子STM32战舰V4开发板体验】OLED 显示

28f0b33a0b570a15c7aa8fcbe8ccfc0e

1、硬件连接
自制了一个SPI接口的OLED显示板,连接在wireless接口。
WireLess.png
oled除了SPI接口外还需要三只管脚,和MCU GPIO对应关系如下:
片选 CS -> PG7
命令 DC -> PG8
复位 RST -> PG6
其中 PG6和网络中断复用管脚,项目里使用了ETH的话,需要改成其它管脚。

Wireless使用SPI2接口,和板载SPI-FLASH共用,使用RTOS的话需要注意使用互斥信号量进行保护。

2、配置
SPI的初始化使用CUBE生成即可。
本测试程序采用刷画布的方式操作OLED。原理是将屏幕点阵映射至MCU内存,对OLED的所有操作均转换为对内存操作,然后将内存中的数据刷入OLED。这种方法比较消耗内存,但好处是速度快,并且方便进行不对齐页面的操作,文字可以显示在屏幕的任意位置。
画布可以配置大一点,本程序配置为横向320点,纵向192点,使用内存7680字节,对于STM32来说,这点内存毫无压力。刷屏的时候仅将画布的一部分刷入OLED即可。

//硬件配置
  1. #define LCD_BLOCKS            5u   //画布X方向块数,每块64dots
  2. #define LCD_PAGES             24u  //画布页数
  3. unsigned char LcdRam[LCD_BLOCKS*64 * LCD_PAGES + 4]; //画布缓冲
3、演示程序
演示程序切换3个页面,key1按键进行页面切换,并且强制定位显示主屏区域。
key_up键启动、停止文字移动演示,结果如视频所示。

由于OLED和SPI-FLASH使用同一SPI接口,刷屏是需要申请接口互斥量,代码如下:
        // 刷屏
  1. osMutexAcquire(os_obj.mid_nor_spi, INT16_MAX);
  2.         lcd_yl_poll_ext(gui_st.move_site_x, gui_st.move_site_y, 8, lcd_data_write_ext);
  3.         while (lcd_yl_update_cnt_get())
  4.         {
  5.                 lcd_yl_poll_ext(gui_st.move_site_x, gui_st.move_site_y, 8, lcd_data_write_ext);
  6.                 osDelay(1);
  7.         }
  8.         osMutexRelease(os_obj.mid_nor_spi);
代码托管GITEE:
https://gitee.com/aple_sun/opendev-f1-v4.git

更多回帖

发帖
×
20
完善资料,
赚取积分