news 2026/6/23 11:27:27

利用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/23 20:24:33

LAMMPS分子动力学模拟技术与应用

LAMMPS是一款经典的分子动力学软件&#xff0c;免费开源&#xff0c;可以模拟液态、固态或气态的粒子的系综。目前LAMMPS计算主要应用于&#xff1a;&#xff08;1&#xff09;研究金属材料的力学性能&#xff0c;LAMMPS可以模拟金属材料的塑性变形和断裂行为&#xff0c;从而研…

作者头像 李华
网站建设 2026/6/23 20:24:42

深度学习中 z-score 标准化理解

深度学习中 z-score 标准化 在深度学习中&#xff0c;z-score&#xff08;标准分数&#xff09; 是核心的数据预处理工具&#xff0c;用于将数据标准化为「均值 0、标准差 1」的分布&#xff0c;本质是衡量单个数据点相对于数据集整体的偏离程度。它不仅能提升模型训练效率&a…

作者头像 李华
网站建设 2026/6/23 20:25:06

硬件测试面试题 - 模拟面试|AI面试官

易途AI面试官 – AI 模拟面试助你提升拿到 Offer 的成功率 点击开始模拟练习 &#x1f449; ms.laixiai.com 必备技能 电子工程基础知识&#xff1a;扎实的模拟电路、数字电路、信号处理、电路原理和半导体物理知识是基石。能够深入理解电子元器件的工作原理、电路设计与分析技…

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

QCoreApplication::aboutToQuit 可以链接多个槽函数吗

是的&#xff0c;QCoreApplication::aboutToQuit 信号可以连接多个槽函数。以下是详细解析&#xff1a;1. 信号槽机制特性Qt的信号槽机制支持“一对多”&#xff1a;一个信号&#xff08;如aboutToQuit&#xff09;可连接多个槽函数。当信号触发时&#xff0c;所有已连接的槽函…

作者头像 李华
网站建设 2026/6/23 12:42:55

VLAN实验

搭建拓扑图&#xff1a;创建VLAN&#xff1a;在trunk干道上放行VLAN&#xff1a;查看交换机接口与VLAN的对应关系&#xff1a;路由器接口配置&#xff1a;配置dhcp&#xff1a;主机获取IP地址&#xff1a;测试&#xff1a;经测试全网可通。实验总结&#xff1a;实验核心收获1. …

作者头像 李华
网站建设 2026/6/23 11:13:56

Wan2.2-T2V-A14B模型对不同肤色人种的表现公平性评估

Wan2.2-T2V-A14B模型对不同肤色人种的表现公平性评估 在影视广告、社交媒体和数字内容工厂日益依赖AI生成视频的今天&#xff0c;一个看似技术中立的系统&#xff0c;是否真的能平等地“看见”所有人&#xff1f;当用户输入“一位非洲裔女性在阳光下跳舞”&#xff0c;模型生成…

作者头像 李华