news 2026/6/10 18:10:20

利用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/6/10 4:39:59

前端技术的下一次跃迁:从工程化到智能化的全面演进

过去十年&#xff0c;前端技术经历了史无前例的高速演化&#xff1a;从页面切图到组件化框架&#xff0c;从手工构建到高度工程化体系&#xff0c;从简单交互到复杂 Web 应用。如今&#xff0c;我们正站在新一代技术浪潮的门口——前端正在从“工程驱动”迈向“智能驱动”。这一…

作者头像 李华
网站建设 2026/6/10 10:08:43

DownKyi终极指南:快速掌握B站视频下载全技巧

DownKyi终极指南&#xff1a;快速掌握B站视频下载全技巧 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 …

作者头像 李华
网站建设 2026/6/10 13:18:17

Flutter 基础组件实战:Text 与 Container 组件快速上手

一、引言基础的Text和Container组件是 Flutter 界面开发的 “基石”&#xff0c;但仅掌握基础用法不足以应对实际开发中的复杂场景。本文在基础用法之上&#xff0c;补充进阶属性、多场景实战案例、常见问题解决方案&#xff0c;所有代码均可直接复制运行&#xff0c;帮助你从 …

作者头像 李华
网站建设 2026/6/10 17:49:51

17、树莓派:多功能项目与实用资源指南

树莓派:多功能项目与实用资源指南 1. 树莓派人脸识别保险箱 拥有一个保险箱是存放贵重物品的好方法,现在借助免费软件、树莓派和树莓派相机,你可以打造一个 DIY 人脸识别保险箱。免费软件基于 OpenCV,这是一个能在树莓派上良好运行的小程序,相机则使用合适的树莓派相机模…

作者头像 李华
网站建设 2026/6/9 23:15:16

【单片机】orange prime pi开发板与单片机的区别

单片机与Orange Pi的核心差异体现在硬件架构、功能定位和系统支持上&#xff0c;以下是具体区别&#xff1a;一、单片机&#xff08;MCU&#xff09;的特点- 硬件架构&#xff1a;集成CPU、RAM、ROM、I/O接口于单一芯片&#xff0c;资源有限&#xff08;如8位/16位CPU&#xff…

作者头像 李华
网站建设 2026/6/9 21:10:41

Spring7指南(三)之Bean的生命周期

项目工程完整地址&#xff1a;https://github.com/YiyiCoding/Spring7Guides Bean的单例说明多例Bean&#xff08; Scope(“prototype”) &#xff09;每次都由IOC容器New一个新对象&#xff0c;此处之外跟容器没有太多的联系性单例才具有生命周期的概念单例有懒加载的概念&…

作者头像 李华