news 2026/6/11 11:43:16

[STM32C0] 【STM32C092RC 测评】5、板载外设——IIC

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[STM32C0] 【STM32C092RC 测评】5、板载外设——IIC

IIC也是我们常用的串行接口,我们常用其驱动一些传感器,这次我们用其驱动OLED。
本次采用的是Seeed品牌的一款小型OLED显示模块,其分辨率为128x64像素,屏幕尺寸为0.96英寸,属于单色显示类型。该模块采用SSD1315作为驱动芯片,尽管SSD1306亦是常用之选。OLED屏幕的发光机制与LCD截然不同,上电后需经过初始化流程方能正常显示信息,此特性与IPS彩色液晶屏幕存在相似之处。SSD1315是一款集成的CMOS OLED/PLED驱动控制芯片,能够直接从其内置的128x64像素GDDRAM中读取并显示数据。采用SSD1315作为控制核心的OLED显示屏,在硬件连接上存在两种配置方式,核心差异在于是否启用DC引脚。若采用DC引脚方案,则需由主控芯片负责操控DC引脚,以明确当前传输的是指令信息还是数据内容。反之,若不启用DC引脚,则要求主控在数据发送前,预先传输一个比特位来界定后续内容为指令或数据。鉴于目标模块接口仅包含IIC通信的两根引脚及电源引脚,因此,必须通过非DC引脚方案,即预先传输界定比特的方式,实现对OLED显示屏的控制。
单色显示对于大多数单片机而言,控制上相对充裕,所需资源较少。本次设计采用硬件IIC接口,尽管个人倾向于使用IO口模拟方式控制,但硬件IIC的尝试亦颇具意义,在STM32CubeMX中的配置过程极为简洁:

启动IIC后,直接就可以,采用常规模式100K的速度,什么都不用配置,初始化也不用像定时器那样需要启动,我们直接用一下进行适配就OK了:

复制

  1. <p>void OLED_WR_CMD(uint8_t cmd)</p><p>{</p><p>HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100);</p><p>}</p><p>void OLED_WR_DATA(uint8_t data)</p><p>{</p><p>HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&data,1,0x100);</p><p>}</p>


在SSD1315的驱动编写过程中,核心在于对网络资源的有效利用及寄存器的精确配置。中景园提供的官方例程对于初始化步骤具有指导意义,该步骤是实现显示功能的前提。显示操作本身并不复杂,关键在于完成必要的初始化后,执行固定位置的显示指令。鉴于显示区域的局限性,采用英文内容展示能更有效地利用空间,同时保证显示的连贯性和可读性:

复制

  1. <p>uint8_t CMD_Data[]={</p><p>0xAE, 0xD5, 0x80, 0xA8, 0x3F, 0xD3, 0x00, 0x40,0xA1, 0xC8, 0xDA,</p><p>0x12, 0x81, 0xCF, 0xD9, 0xF1, 0xDB, 0x40, 0xA4, 0xA6,0x8D, 0x14,</p><p>0xAF};</p><p>void OLED_Init(void)</p><p>{</p><p>HAL_Delay(200);</p><p>uint8_t i = 0;</p><p>for(i=0; i<23; i++)</p><p>{</p><p>OLED_WR_CMD(CMD_Data[i]);</p><p>}</p><p>}</p>


请注意,初始化完成后的屏幕将呈现花屏状态,此现象表明显示功能正常。随后需执行清屏操作,将屏幕底色统一设置为单色,非黑即白。接下来进行字符串显示,具体展示内容为“21IC STM32C092”。本章节旨在进行功能演示,简要呈现效果如下:


---------------------
作者:孤独的单行者
链接:https://bbs.21ic.com/icview-3452530-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 0:19:26

【高性能系统必备】:Java实时获取毫秒级时间戳的3种优化策略

第一章&#xff1a;Java获取毫秒级时间戳的核心意义 在现代软件系统中&#xff0c;时间是衡量事件顺序和性能的关键维度。Java获取毫秒级时间戳不仅为日志记录、缓存失效、并发控制等场景提供精确的时间基准&#xff0c;还在分布式系统中支撑着事务排序与数据一致性判断。 毫秒…

作者头像 李华
网站建设 2026/5/29 22:25:21

YOLOv9-s.pt权重使用教程:预下载模型直接调用方法

YOLOv9-s.pt权重使用教程&#xff1a;预下载模型直接调用方法 你是不是也遇到过这种情况&#xff1a;刚想用YOLOv9跑个目标检测&#xff0c;结果第一步下载权重就卡住了&#xff1f;网速慢、链接失效、路径不对……一堆问题接踵而来。别急&#xff0c;这篇教程就是为你准备的。…

作者头像 李华
网站建设 2026/6/5 22:14:56

语音识别开源生态发展:Speech Seaco Paraformer角色与价值分析

语音识别开源生态发展&#xff1a;Speech Seaco Paraformer角色与价值分析 1. 引言&#xff1a;中文语音识别的现实需求与技术演进 在智能办公、会议记录、教育转写、客服质检等场景中&#xff0c;高效准确的中文语音识别能力正变得不可或缺。传统语音识别系统往往依赖昂贵的…

作者头像 李华
网站建设 2026/5/29 1:40:35

别再if嵌套了!用Stream filter实现多条件过滤的终极方案(附源码)

第一章&#xff1a;从if嵌套到Stream过滤的思维跃迁 在传统编程实践中&#xff0c;条件判断常依赖多层 if-else 嵌套来筛选数据。这种方式虽直观&#xff0c;但随着逻辑复杂度上升&#xff0c;代码可读性和维护性急剧下降。现代Java开发中&#xff0c; Stream API 提供了一种声…

作者头像 李华
网站建设 2026/5/28 16:06:26

算法基础不牢?一文搞定Java冒泡排序实现与性能对比分析

第一章&#xff1a;算法基础不牢&#xff1f;一文搞定Java冒泡排序实现与性能对比分析 冒泡排序核心原理 冒泡排序是一种简单的比较类排序算法&#xff0c;其基本思想是重复遍历待排序数组&#xff0c;比较相邻元素并交换顺序错误的元素&#xff0c;直到整个数组有序。每一轮…

作者头像 李华
网站建设 2026/6/10 10:31:53

Z-Image-Turbo反馈闭环设计:用户评分驱动模型迭代

Z-Image-Turbo反馈闭环设计&#xff1a;用户评分驱动模型迭代 1. Z-Image-Turbo_UI界面概览 Z-Image-Turbo 的 UI 界面采用 Gradio 框架构建&#xff0c;整体布局简洁直观&#xff0c;专为图像生成任务优化。主界面分为几个核心区域&#xff1a;提示词输入区、参数调节面板、…

作者头像 李华