0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
**
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相关推荐
- 0.96寸OLED显示屏介绍续
0.96 寸OLED 显示屏使用方法 (以中景园电子的0.96 寸OLED 显示屏为例) 0.96寸OLED显示屏实物图 七针SPI/IIC 0.96寸OLED显示屏使用方法: 七针SPI/IIC 0 ...
- STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)
STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库 文章目录 STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库 一.O ...
- 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用
目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...
- 0.96寸OLED显示屏介绍
OLED显示屏简介 OLED,即有机发光二极管(Organic Light Emitting Diode).OLED 由于同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲性 ...
- 【室内温度+树莓派性能监控】树莓派+DS18B20温度传感器+0.96寸OLED显示屏使用及安装经验分享
以下内容为本人原创 原文链接:https://blog.csdn.net/Yhen1/article/details/113760948 作者:@Yhen 发布网站:CSDN 未经本人同意禁止转载,如 ...
- 3.2 0.96寸OLED显示屏的使用
0.96寸OLED显示屏:4线的串行SPI接口方式.IIC 接口方式,128*64像素. OLED每次控制8个点阵,垂直方向扫描控制,所以垂直方向坐标可选为0~7:水平方向可选坐标0~127 接线图: ...
- 基于STM32的0.96寸OLED显示屏显示数据和滚动显示
文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...
- 基于STM32F103C8T6的0.96寸OLED显示屏显示数据
一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...
- 关于基于stm32的0.96寸oled显示屏的学习理解心得。
关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...
最新文章
- ESXi6.5环境搭建(三:vSphere Client6.0安装)
- Python判断文件、文件夹是否存在,不存在则创建
- java删除指定的文件夹_java脚本删除指定目录下的所有指定名称的文件夹
- linux 验证邮箱账号,linux邮件服务器的身份验证(sasl)
- 星益云聚合收银台系统源码
- 基于Jquery的图片自动分组且自适应页面的缩略图展示特效
- linux mmu的实现的讲解_Linux_MMU
- 时刻牢记“我是谁、为了谁、依靠谁” 始终践行党的群众观点和群众路线
- 【文学欣赏】《卖米》北京大学首届校园原创文学大赛一等奖
- 遇见Linux系统CPU使用率过高怎么办?
- The forked VM terminated without properly saying goodbye. VM crash or System
- WPS WORD 项目符号和编号,继续前一列表
- W3Cschool从零开始学C语言笔记(1-2)位、字节及排列组合
- NVIDIA系列显卡与AMD系列显卡性能对比,以及购买显卡的时候应该看哪些性能指标,NVIDIA显卡与AMD显卡的区别
- 大学里的网络安全专业为什么没多少人就读?
- Linux 服务器上传下载文件到阿里网盘
- 如何确定IP在同一网段
- php 获取当前IP地址
- 软件自学成才到公司要学历吗_来自7位自学成才的编码人员的经验教训,他们现在全职从事软件开发人员的工作...
- 爱尔兰哨笛教程(瑞恩牧师)
热门文章
- 软件工程大作业——设计阶段
- input输入框输入中文时,需要计数input输入的汉字数,解决拼音输入的时候计数问题
- Java——万字总结网络编程
- git diff与linux diff的输出格式之unified format
- 小明身高180cm,小刚身高165cm,计算两人的身高差
- deepin 下 WPS for linux字体显示问题[已解决]
- Mos结电容Cgd、Cgs、Cds与分布参数Ciss、Crss、Coss
- 讲明白——K8S各核心架构组件
- android+删除相片代码,android删除手机照片
- C# 制作贪吃蛇小游戏,最简单的实现