IIC作为一种常用的串行接口,广泛应用于传感器驱动等领域。本次项目利用IIC接口驱动一款Seeed品牌的小型OLED显示模块,该模块具备128x64像素的分辨率及0.96英寸的屏幕尺寸,属于单色显示范畴,并采用SSD1315作为驱动芯片(尽管SSD1306更常见)。OLED的发光原理与LCD截然不同,需经过初始化流程方可正常显示,此特性类似于IPS彩色液晶屏幕。SSD1315是一款集成CMOS OLED/PLED驱动控制芯片,能够从其内置的128x64像素GDDRAM中直接读取并显示数据。在硬件连接上,采用SSD1315作为控制核心的OLED显示屏存在两种配置方式:启用DC引脚与不启用DC引脚。鉴于目标模块接口限制(仅包含IIC通信的两根引脚及电源引脚),本项目采用非DC引脚方案,即通过在数据发送前预先传输界定比特的方式,实现对OLED显示屏的控制。 单色显示对于大多数单片机而言,控制上相对充裕,所需资源较少。虽然STM32WL55主攻低功耗,主频只有48M,不过对于驱动这个屏还没什么问题的。 本次设计采用硬件IIC接口,尽管个人倾向于使用IO口模拟方式控制,但硬件IIC的尝试更有意义,毕竟配置硬件IIC的时序控制更加标准,在STM32CubeMX中的配置过程极为简洁: 咱们看一下默认的引脚: 按照当前线序连接设备,启动IIC后,直接就可以,采用常规模式100K的速度,什么都不用配置,初始化也不用像定时器那样需要启动,我们直接用一下进行适配就OK了: void OLED_WR_CMD (uint8_t cmd) { HAL_I2C_Mem_Write (hi2c2 , 0 x78, 0 x00,I2C_MEMADD_SIZE_8BIT,cmd, 1 , 0 x100); } void OLED_WR_DATA (uint8_t data) { HAL_I2C_Mem_Write (hi2c2 , 0 x78, 0 x40,I2C_MEMADD_SIZE_8BIT,data, 1 , 0 x100); } 这里是接口的配置最为关键,其他就都是已经写好的驱动程序就可以了,中景园提供的官方例程对于初始化步骤具有非常好的指导意义。显示操作本身并不复杂,关键在于完成必要的初始化后,执行固定位置的显示指令。鉴于显示区域的局限性,采用英文内容展示能更有效地利用空间,同时保证显示的连贯性和可读性: uint8_t CMD_Data ); } } 接下来我们就在初始化阶段显示内容: OLED_Init (); OLED_Clear (); OLED_ShowString ( 0 , 0 ,"STM32WL55", 12 , 0 ); 请注意,初始化完成后的屏幕将呈现花屏状态,此现象表明显示功能正常。随后需执行清屏操作,将屏幕底色统一设置为单色,非黑即白。接下来进行字符串显示,具体展示内容为“ STM32WL55”,呈现效果如下: 我们展望一下,现在可以说基本的外设用这个M4核都是能完成的,当前的测试开发依然是使用的单核模式进行的,如果要进行无线开发调试就要用双核了,可是LoRa还不想蓝牙、wifi这样的比较常用,很多设备都配备,这就导致了一个尴尬的境地,只有一个板子是没法实现透传的,需要另外一个支持LoRa的板子进行透传测试,这里先留着一个悬念吧,后续我们要找一个透传板子才能进行进一步的测试,比如功率或者距离,这可能需要一段时间以后再进行了。