【STM32F4】HAL库 CubeMX(十一)--------OLED显示实验(模拟iic)


前言

紧接着前文,采用了硬件iic,本次实验将采用模拟iic,以达到没有硬件iic接口同样可以驱动oled。

一、OLED是什么?

OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示,OLED 效果要来得好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。
由于IIC控制的OLED用的比较广泛,所以本节使用模拟IIC控制OLED显示实验。

二、OLED显示实验

1.实验所需配置功能

本款OLED有四个接口,RST、SCL、SDA、DC。由于本节使用的模拟iic,所以SCL和SDA可以任选两个引脚。本节SCL接PC13,SDA接PC14。
1、PC13,PC14输出模式。
2、OLED的文件。

2.功能配置

1、配置PC13、PC14、PC0、PC15为输出模式。(参数不需要配置)
在这里插入图片描述

3.时钟配置

RCC时钟配置如前文一样(此处一般情况是不变的)。
【STM32F4】HAL库 CubeMX(一)--------创建工程(点亮LED)

4.生成代码

1、添加OLED文件
在这里插入图片描述
2、在主函数添加以下代码,即可实现实验
在这里插入图片描述

 OLED_Init();
 OLED_ShowString(0,0,"TEXT");
	  OLED_Refresh_Gram();

(模拟和硬件所用的oled不同,某些操作也不一样,这里Refresh在显示的最后一句是必须加上的,否则不会显示)
到此,该实验已经完成。由于OLED文件过大,所以采用百度网盘分享:

链接:https://pan.baidu.com/s/155f8ggky79OsxG54EDJI9Q
提取码:my1p
复制这段内容后打开百度网盘手机App,操作更方便哦

在这里插入图片描述

  • 15
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
您好!关于使用STM32HAL库控制四针OLED显示器,我可以给您一些基本的指引。 首先,确保您已经连接好了四针OLED显示器到STM32开发板。一般来说,四针OLED显示器的四个引脚分别是VCC(电源正极)、GND(电源负极)、SCL(时钟线)和SDA(数据线)。 在使用HAL库控制四针OLED之前,您需要先初始化I2C总线。在初始化I2C之后,您可以使用HAL库提供的函数来发送命令和数据到OLED显示器。 以下是一个简单的示例代码,演示如何使用HAL库控制四针OLED: ```c #include "stm32f4xx_hal.h" #define OLED_ADDR 0x78 // OLED显示器的I2C地址 I2C_HandleTypeDef hi2c1; void OLED_Init(void) { // 初始化I2C总线 HAL_I2C_Init(&hi2c1); // 向OLED发送初始化命令 uint8_t init_cmd[] = { 0x00, // 控制字节,用于指定后续是命令还是数据 0xAE, // 关闭显示 0xD5, // 设置显示时钟分频因子 0x80, // 默认分频因子 // ... 其他初始化命令 0xAF // 打开显示 }; HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDR, init_cmd, sizeof(init_cmd), HAL_MAX_DELAY); } void OLED_WriteData(uint8_t data) { uint8_t write_data[] = {0x40, data}; // 控制字节为0x40,表示后续是数据 HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDR, write_data, sizeof(write_data), HAL_MAX_DELAY); } void OLED_WriteCmd(uint8_t cmd) { uint8_t write_cmd[] = {0x00, cmd}; // 控制字节为0x00,表示后续是命令 HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDR, write_cmd, sizeof(write_cmd), HAL_MAX_DELAY); } int main(void) { // 初始化HAL库 HAL_Init(); // 初始化I2C总线 __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; HAL_I2C_Init(&hi2c1); // 初始化OLED显示OLED_Init(); // 向OLED写入数据 OLED_WriteData(0x55); // 向OLED发送命令 OLED_WriteCmd(0xA4); while (1) { // 主循环 } } ``` 请注意,以上代码仅作为示例,具体的初始化和数据写入操作可能根据您使用的具体硬件和库版本有所变化。您需要根据实际情况进行适当的修改和调整。 希望这能对您有所帮助!如果您有任何进一步的问题,请随时提问。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值