**

0.96寸OLED显示屏标准库移植HAL库,使用模拟IIC

**

由于项目的需要使用OLED屏显示,并且现有的项目程序是基于HAL库编写的,而手头能找到的程序是标准库的驱动程序,大概看了一下代码,比较简单,涉及到不同库之间需要改动的代码很少。

代码下载链接:点击此处下载驱动代码

首先去LCDWiKi网站( 链接)下载基于0.96寸OLED屏的IIC驱动代码,这个网站包含了常用显示模块的驱动代码,十分方便,本次我选择的是0.96inch OLED Module SKU:MC096GX

下载后只需要oled屏的oled.c、oled.h和oledfont.h代码,但是需要改动如下几个地方的代码
首先是oled.c:
1.将oled.c文件中的所有包含“delay_ms”的函数改为HAL库延时函数"HAL_Delay";

2.将oled.c文件中的所有包含“u8”和“u32”的函数改为"uint8_t"和"uint32_t";

3.删除#include "sys.h"和#include “delay.h”,增加#include “stm32g4xx_hal.h”(这里根据自身使用的32芯片定义,我这里用到的是stm32g4系列芯片)。

其次改动oled.h:
1.首先改GPIO定义,原驱动代码的IIC时钟线为PB13,IIC数据线为PB14,我这里用到的是PA11和PA12,所以
将时钟线

#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_13);
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_13)

改为

#define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_RESET);
#define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_11,GPIO_PIN_SET)

将数据线

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_14)//DIN
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_14)

改为

#define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET)//DIN
#define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET)

2.同oled.c一样,将oled.h文件中的所有包含“u8”和“u32”的函数改为"uint8_t"和"uint32_t";

3.删除#include “sys.h”,增加#include “stm32g4xx_hal.h”(这里根据自身使用的32芯片定义,我这里用到的是stm32g4系列芯片)。

经过以上步骤,所有移植就完成了,使用CUBEMX创建工程,配置好时钟线和数据线,生成代码,使用keil打开工程,将oled.c放入src文件夹,oled.h文件和oledfont.h文件放入inc文件夹,在主函数main.c中初始化OLED,我的测试函数如下:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN 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();/* USER CODE BEGIN 2 */OLED_Init();          //初始化OLED  OLED_Clear(0)    ; /* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */OLED_ShowCHinese(6,0,0);//全OLED_ShowCHinese(26,0,1);//动OLED_ShowCHinese(46,0,2);//电OLED_ShowCHinese(66,0,3);//子OLED_ShowCHinese(86,0,4);//技OLED_ShowCHinese(106,0,5);//术OLED_ShowString(6,3,"0.96' OLED TEST",16);OLED_ShowString(0,6,"ASCII:",16);  OLED_ShowString(63,6,"CODE:",16);  }/* USER CODE END 3 */
}

最后的显示效果如下,移植成功:

OLED屏的驱动电路是自己画的,没用到模块,顺便附上原理图:

0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32相关推荐

  1. 0.96寸OLED显示屏介绍续

    0.96 寸OLED 显示屏使用方法 (以中景园电子的0.96 寸OLED 显示屏为例) 0.96寸OLED显示屏实物图 七针SPI/IIC 0.96寸OLED显示屏使用方法: 七针SPI/IIC 0 ...

  2. STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)

    STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库 文章目录 STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库 一.O ...

  3. 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用

    目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...

  4. 0.96寸OLED显示屏介绍

    OLED显示屏简介 OLED,即有机发光二极管(Organic Light Emitting Diode).OLED 由于同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲性 ...

  5. 【室内温度+树莓派性能监控】树莓派+DS18B20温度传感器+0.96寸OLED显示屏使用及安装经验分享

    以下内容为本人原创 原文链接:https://blog.csdn.net/Yhen1/article/details/113760948 作者:@Yhen 发布网站:CSDN 未经本人同意禁止转载,如 ...

  6. 3.2 0.96寸OLED显示屏的使用

    0.96寸OLED显示屏:4线的串行SPI接口方式.IIC 接口方式,128*64像素. OLED每次控制8个点阵,垂直方向扫描控制,所以垂直方向坐标可选为0~7:水平方向可选坐标0~127 接线图: ...

  7. 基于STM32的0.96寸OLED显示屏显示数据和滚动显示

    文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...

  8. 基于STM32F103C8T6的0.96寸OLED显示屏显示数据

    一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...

  9. 关于基于stm32的0.96寸oled显示屏的学习理解心得。

    关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...

最新文章

  1. ESXi6.5环境搭建(三:vSphere Client6.0安装)
  2. Python判断文件、文件夹是否存在,不存在则创建
  3. java删除指定的文件夹_java脚本删除指定目录下的所有指定名称的文件夹
  4. linux 验证邮箱账号,linux邮件服务器的身份验证(sasl)
  5. 星益云聚合收银台系统源码
  6. 基于Jquery的图片自动分组且自适应页面的缩略图展示特效
  7. linux mmu的实现的讲解_Linux_MMU
  8. 时刻牢记“我是谁、为了谁、依靠谁” 始终践行党的群众观点和群众路线
  9. 【文学欣赏】《卖米》北京大学首届校园原创文学大赛一等奖
  10. 遇见Linux系统CPU使用率过高怎么办?
  11. The forked VM terminated without properly saying goodbye. VM crash or System
  12. WPS WORD 项目符号和编号,继续前一列表
  13. W3Cschool从零开始学C语言笔记(1-2)位、字节及排列组合
  14. NVIDIA系列显卡与AMD系列显卡性能对比,以及购买显卡的时候应该看哪些性能指标,NVIDIA显卡与AMD显卡的区别
  15. 大学里的网络安全专业为什么没多少人就读?
  16. Linux 服务器上传下载文件到阿里网盘
  17. 如何确定IP在同一网段
  18. php 获取当前IP地址
  19. 软件自学成才到公司要学历吗_来自7位自学成才的编码人员的经验教训,他们现在全职从事软件开发人员的工作...
  20. 爱尔兰哨笛教程(瑞恩牧师)

热门文章

  1. 软件工程大作业——设计阶段
  2. input输入框输入中文时,需要计数input输入的汉字数,解决拼音输入的时候计数问题
  3. Java——万字总结网络编程
  4. git diff与linux diff的输出格式之unified format
  5. 小明身高180cm,小刚身高165cm,计算两人的身高差
  6. deepin 下 WPS for linux字体显示问题[已解决]
  7. Mos结电容Cgd、Cgs、Cds与分布参数Ciss、Crss、Coss
  8. 讲明白——K8S各核心架构组件
  9. android+删除相片代码,android删除手机照片
  10. C# 制作贪吃蛇小游戏,最简单的实现