news 2026/6/7 13:55:34

利用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/7 9:01:55

告别AI失忆症!Mem0+Milvus打造AI长期记忆,小白也能快速上手!

简介 文章介绍了Mem0&#xff0c;一个为AI智能体打造的记忆层解决方案&#xff0c;能有效解决AI失忆问题。Mem0通过持久化存储用户偏好和历史对话&#xff0c;使AI能在多轮对话中保持连贯性。文章详细展示了Mem0与传统RAG系统的区别&#xff0c;以及其核心工作流程&#xff1a…

作者头像 李华
网站建设 2026/6/7 4:50:31

Day 28 函数的定义与参数

import mathdef calculate_circle_area(radius):try:if radius < 0:return 0area math.pi * (radius ** 2)return areaexcept:return 0# 测试代码 print(calculate_circle_area(5)) print(calculate_circle_area(0)) print(calculate_circle_area(-1)) def calculat…

作者头像 李华
网站建设 2026/6/6 16:59:34

Wan2.2-T2V-A14B生成金融财经图表动态演示视频的案例

Wan2.2-T2V-A14B生成金融财经图表动态演示视频的案例 在如今信息爆炸的时代&#xff0c;投资者和企业决策者每天面对海量的财务数据与市场报告。然而&#xff0c;传统的静态图表和文字描述越来越难以满足人们对“趋势演化”、“动态对比”和“直观理解”的需求。一张定格的K线图…

作者头像 李华
网站建设 2026/6/7 3:54:07

LangChain

LangChain 是什么&#xff1f;它主要用来解决什么问题? LangChain 是一个用于开发大语言模型应用的开源框架&#xff0c;由 Harrison Chase 在 2022 年创建。简单来说&#xff0c;它就是一个帮你更方便地调用和组合 AI 大模型能力的工具库。 LangChain 主要解决三个核心问题。…

作者头像 李华
网站建设 2026/6/5 22:52:03

Kingbase 一键巡检报告工具试用,官方工具真的是很到位!

KES一键巡检工具试用体验 工具目录&#xff1a;/KingbaseES/V9/KESRealPro/V009R001C002B0014/SupTools [rootnode1 kb_gathertool]# pwd /KingbaseES/V9/KESRealPro/V009R001C002B0014/SupTools/kb_gathertool [rootnode1 kb_gathertool]# ls 2025-12-10_1326 gather.conf g…

作者头像 李华
网站建设 2026/6/6 7:19:57

批量出图神器CAXA CAD:再多的零件,也能一键搞定工程图

在整机设备或复杂产品设计中&#xff0c;项目通常包含几十、上百甚至上千个零件。采用传统单件出图模式时&#xff0c;我们需要重复执行一系列机械性操作&#xff1a;打开一个零件模型 -> 创建工程图文件 -> 进行投影 -> 标注尺寸 -> 填写标题栏 -> 保存文件。然…

作者头像 李华