news 2026/4/16 13:41:03

[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/4/4 5:18:01

为什么你的unique_ptr转shared_ptr导致内存泄漏?1个错误引发的灾难

第一章&#xff1a;为什么你的unique_ptr转shared_ptr导致内存泄漏&#xff1f;1个错误引发的灾难 在现代C开发中&#xff0c;智能指针是管理动态内存的核心工具。然而&#xff0c;当开发者尝试将 std::unique_ptr 转换为 std::shared_ptr 时&#xff0c;一个看似无害的操作可能…

作者头像 李华
网站建设 2026/4/16 12:47:01

Node.js用readable.read(size)精准控流

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 精准控流的艺术&#xff1a;Node.js中Readable Streams的read(size)深度解析目录精准控流的艺术&#xff1a;Node.js中Readable …

作者头像 李华
网站建设 2026/4/16 13:32:52

初学者必看,冒泡排序Java实现全流程拆解,一步到位掌握算法精髓

第一章&#xff1a;冒泡排序算法的核心思想与适用场景冒泡排序是一种基础而直观的比较排序算法&#xff0c;其核心思想在于**重复遍历待排序序列&#xff0c;逐对比较相邻元素&#xff0c;若顺序错误则交换位置&#xff0c;使较大&#xff08;或较小&#xff09;的元素如气泡般…

作者头像 李华
网站建设 2026/4/16 10:17:38

(冒泡排序终极优化方案) 20年经验总结的Java高效排序技巧

第一章&#xff1a;冒泡排序的基本原理与Java实现 算法核心思想 冒泡排序是一种简单的比较排序算法&#xff0c;其基本思想是重复遍历待排序数组&#xff0c;依次比较相邻元素&#xff0c;若顺序错误则交换它们。这一过程如同气泡上浮&#xff0c;较大的元素逐步“浮”到数组…

作者头像 李华
网站建设 2026/4/16 10:16:09

Emotion2Vec+ Large心理咨询进度管理:来访者情绪演变图表生成

Emotion2Vec Large心理咨询进度管理&#xff1a;来访者情绪演变图表生成 1. 引言&#xff1a;用AI看懂情绪变化&#xff0c;让心理咨询更科学 你有没有想过&#xff0c;一个人说话时的情绪波动&#xff0c;其实可以用一张图完整记录下来&#xff1f;在心理咨询过程中&#xf…

作者头像 李华
网站建设 2026/4/15 19:27:02

FSMN-VAD表格输出乱码?Markdown格式化修复实战

FSMN-VAD表格输出乱码&#xff1f;Markdown格式化修复实战 1. 问题背景&#xff1a;当语音检测结果变成“乱码” 你有没有遇到过这种情况——明明模型已经成功识别出音频中的语音片段&#xff0c;但最终在网页界面上看到的 Markdown 表格却显示异常&#xff0c;内容错位、排版…

作者头像 李华