news 2026/8/16 10:08:42

利用cubemx和HAL库重写江科协的oled驱动程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
利用cubemx和HAL库重写江科协的oled驱动程序

I2C配置

将PB6、PB7设置为SCL和SDA引脚(硬件I2C)

OLED.c

void OLED_I2C_SendByte(uint8_t Byte) { HAL_I2C_Master_Transmit(&hi2c1, 0x78, &Byte, 1, HAL_MAX_DELAY); } void OLED_WriteCommand(uint8_t Command) { uint8_t buf[]={0x00, Command}; HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, HAL_MAX_DELAY); } void OLED_WriteData(uint8_t Data) { uint8_t buf[]={0x40, Data}; HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, HAL_MAX_DELAY); }

将原有的这三个函数替换为上面这些

void OLED_Init(void) { uint32_t i, j; for (i = 0; i < 1000; i++) //上电延时 { for (j = 0; j < 1000; j++); } OLED_WriteCommand(0xAE); //关闭显示 OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 OLED_WriteCommand(0x80); OLED_WriteCommand(0xA8); //设置多路复用率 OLED_WriteCommand(0x3F); OLED_WriteCommand(0xD3); //设置显示偏移 OLED_WriteCommand(0x00); OLED_WriteCommand(0x40); //设置显示开始行 OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置 OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置 OLED_WriteCommand(0xDA); //设置COM引脚硬件配置 OLED_WriteCommand(0x12); OLED_WriteCommand(0x81); //设置对比度控制 OLED_WriteCommand(0xCF); OLED_WriteCommand(0xD9); //设置预充电周期 OLED_WriteCommand(0xF1); OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别 OLED_WriteCommand(0x30); OLED_WriteCommand(0xA4); //设置整个显示打开/关闭 OLED_WriteCommand(0xA6); //设置正常/倒转显示 OLED_WriteCommand(0x8D); //设置充电泵 OLED_WriteCommand(0x14); OLED_WriteCommand(0xAF); //开启显示 OLED_Clear(); //OLED清屏 }

删除OLED_Init中的I2C初始化代码,I2C和GPIO的初始化已经在cubemx完成。

然后在main.c的MX_I2C1_Init()后面添加OLED_Init(),后续即可正常使用代码中显示数字字符等的函数。

完整的测试main如下(有一些不相关的代码,不用管)

int main(void) { /* USER CODE BEGIN 1 */ int16_t duty=999; uint8_t commands[] = {0x00, 0x8d, 0x14, 0xaf, 0xa5}; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ OLED_Init(); /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); //MX_TIM3_Init(); MX_I2C1_Init(); /* USER CODE BEGIN 2 */ OLED_Init(); //HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); //HAL_I2C_Master_Transmit(&hi2c1, 0x78, commands, sizeof(commands)/sizeof(commands[0]), HAL_MAX_DELAY); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(duty<0)duty=999; duty-=100; OLED_ShowNum(1,1,duty, 8); //__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, duty); HAL_Delay(500); } /* USER CODE END 3 */ }

显示效果如下

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

Wan2.2-T2V-A14B如何应对‘先因后果’的时间逻辑关系?

Wan2.2-T2V-A14B如何应对“先因后果”的时间逻辑关系&#xff1f; 在AI生成内容迈向影视级叙事的今天&#xff0c;一个看似简单却长期困扰行业的难题浮出水面&#xff1a;为什么AI生成的视频里&#xff0c;“爆炸”总比“点火”来得更快&#xff1f; 这并非玩笑。许多文本到视频…

作者头像 李华
网站建设 2026/8/16 8:06:55

DevUI modal 弹窗表单联动实战:表格编辑功能完整实现

最近在做一个用户管理模块&#xff0c;需要在表格中点击"编辑"按钮弹出表单弹窗来修改数据。刚开始用 d-modal 组件直接写&#xff0c;结果各种问题&#xff0c;后来发现官方推荐用 DialogService&#xff0c;这才算解决了。记录一下踩坑过程。前言 弹窗表单是后台管…

作者头像 李华
网站建设 2026/8/15 20:00:57

Wan2.2-T2V-A14B生成太空失重环境下人体运动的真实性

Wan2.2-T2V-A14B生成太空失重环境下人体运动的真实性 在航天任务日益频繁、公众对宇宙探索兴趣高涨的今天&#xff0c;如何真实还原宇航员在太空中的动作细节&#xff0c;成为科学传播与影视制作共同面临的挑战。传统的三维动画依赖专业团队逐帧调整姿态和物理参数&#xff0c;…

作者头像 李华
网站建设 2026/8/16 9:52:21

通用电气 DS3820HSMD1C1D

DS3820HSMD1C1D 模块概述DS3820HSMD1C1D 是通用电气&#xff08;GE&#xff09;生产的一款工业控制模块&#xff0c;常用于燃气轮机或蒸汽轮机的控制系统。该模块属于 Mark VI 或 Mark VIe 系列的一部分&#xff0c;负责信号处理、通信或控制功能。主要功能与特点信号处理&…

作者头像 李华
网站建设 2026/8/6 8:26:15

比话降AI的效果为什么这么好?去除ai痕迹的原理是什么?

一、比话降AI是什么? 比话降AI是基于10亿文本数据打造的论文AIGC痕迹优化工具&#xff0c;它通过学习人类写作的方式技巧&#xff0c;深度理解论文的语义与上下文&#xff0c;对内容进行智能重构&#xff0c;降低内容的AI率。 正如其名&#xff0c;比话降AI通过对比人类写作…

作者头像 李华