当前位置: 首页 > 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.jsqmd.com/news/74224/

相关文章:

  • Wan2.2-T2V-A14B如何实现多角色协同行为的合理编排
  • 第八章: 滤波模块 —— 给你的数据“洗个澡”!
  • 十一.递归初阶
  • Wan2.2-T2V-A14B在航空航天科普视频中的应用前景
  • DownKyi终极指南:快速掌握B站视频下载全技巧
  • 突破数学推理瓶颈:DeepSeek-Prover-V1.5开创形式化反馈训练新范式
  • 每日学习python(十)
  • GLM-4.5系列开源模型发布:重新定义智能体基座的技术边界与商业价值
  • Wan2.2-T2V-A14B模型在视频广告A/B测试中的快速迭代优势
  • 代码智能新纪元:Qwen3-Coder国产大模型技术架构与开发实战全攻略
  • Day 28 函数的定义与参数
  • Wan2.2-T2V-A14B生成金融财经图表动态演示视频的案例
  • 高分辨率视频生成难题破解:Wan2.2-T2V-A14B实测报告
  • DevUI modal 弹窗表单联动实战:表格编辑功能完整实现
  • 模板生成能力终极对决:ERNIE-4.5与DeepSeek技术深度测评报告
  • 深度学习中 z-score 标准化理解
  • 9 个专科生课堂汇报工具推荐,AI 写作降重神器
  • 别再乱装工具了!7 款最佳渗透测试工具(超详细),收藏这篇就够了
  • 救命!网安技能不用瞎找了:渗透 / 运维 / 应用安全详细图谱 + 工具包
  • 深度解析HiPO:大语言模型动态推理的革命性突破——从AutoThink范式到混合策略优化的技术演进
  • IwaraDownloadTool 2025终极指南:零基础快速下载Iwara视频的完整教程
  • Transformer 面试题
  • 251212
  • LangChain
  • B站视频下载新纪元:DownKyi如何重新定义你的内容收藏体验
  • 比话降AI适合哪些人使用?为什么比话的降ai效果这么好?
  • 比话降AI的效果为什么这么好?去除ai痕迹的原理是什么?
  • Wan2.2-T2V-A14B在古生物复原动画中的科学复现水平
  • VSCode远程调试量子服务实战手册(从入门到精通)
  • 大模型应用:语音转文本(ASR)实践:OpenAI Whisper精准转录解析.21