news 2026/9/2 23:25:18

利用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/9/2 23:05:21

正则表达式

今天我们来讲讲正则表达式&#xff0c;那么什么是正则表达式呢&#xff0c;正则表达式是通过元字符&#xff08;具有特殊含义的字符&#xff09;和普通字符&#xff08;如字母&#xff0c;数字&#xff09;组合而成的“规则字符串”。语法都是各种符号,不好理解,不好记忆&#…

作者头像 李华
网站建设 2026/9/2 7:11:53

Wan2.2-T2V-A14B能否生成股市走势预测动画?金融内容边界探讨

Wan2.2-T2V-A14B能否生成股市走势预测动画&#xff1f;金融内容边界探讨 在短视频与AI技术深度融合的今天&#xff0c;一个看似简单的问题正在挑战行业的认知边界&#xff1a;我们能不能让大模型“画”出明天的股价&#xff1f;更具体地说&#xff0c;像 Wan2.2-T2V-A14B 这样参…

作者头像 李华
网站建设 2026/9/2 4:17:43

十一.递归初阶

一.汉诺塔 题目链接: http://ybt.ssoier.cn:8088/problem_show.php?pid=1205 1.算法解析

作者头像 李华
网站建设 2026/9/2 14:58:20

通用电气F31X111PSHALG1 FR010

通用电气F31X111PSHALG1 FR010产品信息通用电气&#xff08;GE&#xff09;的F31X111PSHALG1 FR010是一款工业级断路器或电气保护设备&#xff0c;通常用于配电系统或电机保护。该型号属于GE的F系列产品线&#xff0c;专为高电流和高电压应用设计。主要技术参数额定电压&#x…

作者头像 李华
网站建设 2026/9/2 6:38:37

Wan2.2-T2V-A14B能否生成婚礼誓词朗诵视频?情感共鸣点捕捉

Wan2.2-T2V-A14B能否生成婚礼誓词朗诵视频&#xff1f;情感共鸣点捕捉 在一场真实的婚礼上&#xff0c;当新人站在亲友面前轻声说出“我愿意”的那一刻&#xff0c;空气仿佛凝固。眼神里的湿润、声音的颤抖、手指不自觉地握紧——这些细微之处构成了最动人的瞬间。而今天&#…

作者头像 李华