news 2026/4/11 23:35:46

利用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/4/10 18:38:03

Wan2.2-T2V-A14B模型更新日志解读:v2.2版本带来了什么?

Wan2.2-T2V-A14B模型更新日志解读&#xff1a;v2.2版本带来了什么&#xff1f;在短视频、广告创意和影视预演需求爆炸式增长的今天&#xff0c;内容创作的速度与质量正面临前所未有的挑战。传统视频制作依赖专业团队、高昂成本和漫长周期&#xff0c;而AI生成技术的崛起正在悄然…

作者头像 李华
网站建设 2026/4/10 10:01:58

Wan2.2-T2V-A14B如何实现多角色协同行为的合理编排

Wan2.2-T2V-A14B如何实现多角色协同行为的合理编排 在影视预演、高端广告和数字人协作系统中&#xff0c;一个长期困扰AI生成技术的核心难题是&#xff1a;如何让多个虚拟角色像真实世界一样自然互动&#xff1f;不是简单地把几个人物拼在同一画面里&#xff0c;而是让他们“有…

作者头像 李华
网站建设 2026/4/11 8:34:06

解决C++ Builder中的资源标识符问题

在使用C++ Builder 11.2进行开发时,常常会遇到一些资源文件(.rc文件)中定义的标识符在C++源代码中无法识别的现象。本文将结合实例详细讲解如何解决这一问题,确保你在开发过程中能够顺利使用资源文件中的标识符。 问题描述 假设你有一个名为strings.rc的资源文件,其中包…

作者头像 李华
网站建设 2026/4/12 13:04:42

9 个专科生课堂汇报工具推荐,AI 写作降重神器

9 个专科生课堂汇报工具推荐&#xff0c;AI 写作降重神器 当论文遇上时间&#xff0c;你是否也在挣扎&#xff1f; 对于专科生来说&#xff0c;课堂汇报、论文写作、文献综述这些任务早已成为学习生活中的“常态”。但面对这些任务时&#xff0c;很多人却常常感到力不从心。尤其…

作者头像 李华
网站建设 2026/4/10 22:33:11

高分辨率视频生成难题破解:Wan2.2-T2V-A14B实测报告

高分辨率视频生成难题破解&#xff1a;Wan2.2-T2V-A14B实测报告 在短视频日均播放量突破百亿次的今天&#xff0c;内容生产的速度与质量正面临前所未有的挑战。传统影视制作流程动辄数周、成本高昂&#xff0c;而市场对“即想即得”的创意表达需求却愈发迫切。正是在这种背景下…

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

Wan2.2-T2V-A14B如何处理高速运动物体?运动模糊模拟效果

Wan2.2-T2V-A14B 如何处理高速运动物体&#xff1f;运动模糊模拟效果 在影视级视觉内容日益依赖自动化生成的今天&#xff0c;一个核心挑战逐渐浮出水面&#xff1a;如何让AI生成的视频“动起来”真正像被真实摄像机拍下来的&#xff1f; 早期文本到视频&#xff08;T2V&#x…

作者头像 李华