当前位置: 首页 > news >正文

利用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 */ }

显示效果如下

http://www.rkmt.cn/news/84753.html

相关文章:

  • 十一.递归初阶
  • Wan2.2-T2V-A14B在航空航天科普视频中的应用前景
  • 突破数学推理瓶颈:DeepSeek-Prover-V1.5开创形式化反馈训练新范式
  • Wan2.2-T2V-A14B模型在视频广告A/B测试中的快速迭代优势
  • 代码智能新纪元:Qwen3-Coder国产大模型技术架构与开发实战全攻略
  • DevUI modal 弹窗表单联动实战:表格编辑功能完整实现
  • 模板生成能力终极对决:ERNIE-4.5与DeepSeek技术深度测评报告
  • 9 个专科生课堂汇报工具推荐,AI 写作降重神器
  • 深度解析HiPO:大语言模型动态推理的革命性突破——从AutoThink范式到混合策略优化的技术演进
  • 251212
  • B站视频下载新纪元:DownKyi如何重新定义你的内容收藏体验
  • 比话降AI的效果为什么这么好?去除ai痕迹的原理是什么?
  • Wan2.2-T2V-A14B在古生物复原动画中的科学复现水平
  • VSCode远程调试量子服务实战手册(从入门到精通)
  • 数控立柱滑台采购指南:如何避开价格陷阱选对硬核装备?
  • QCoreApplication::aboutToQuit 可以链接多个槽函数吗
  • Wan2.2-T2V-A14B模型对不同肤色人种的表现公平性评估
  • 基于微信小程序的社区志愿者服务平台毕设
  • 紧急推荐!视频内容检索效率提升10倍的Dify实现方案
  • 【MCP Agent开发考核通关指南】:揭秘续证必过的5大核心技术要求
  • 腾讯混元语音数字人模型开源落地,三大音乐平台率先应用开启内容创作新纪元
  • 人工智能时代:重塑未来的核心驱动力与发展趋势
  • Wan2.2-T2V-A14B在虚拟数字人视频合成中的前沿应用
  • Wan2.2-T2V-A14B在AI剧本预演中的分镜自动生成能力验证
  • Wan2.2-T2V-A14B模型在高校数字媒体教学中的引入方案
  • HBase vs. 传统数据库:大数据时代的存储革命
  • 经典算法题详解之游乐园的迷宫(二)
  • 阿里达摩院Qwen3-VL多模态模型重磅发布:开启视觉-语言交互新纪元
  • Wan2.2-T2V-A14B能否生成微观世界放大动画?生物学教学辅助
  • 基于AI智能客服与AI智能名片商城系统的社群客服培养机制及优化策略研究