STM32CUBEMX开发GD32F303(14)----IIC之配置OLED

发布者:幸福如意最新更新时间:2024-09-13 来源: elecfans关键字:STM32CUBEMX  GD32F303  IIC 手机看文章 扫描二维码
随时随地手机看文章

概述

本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 使用IIC进行驱动SSD1306的12864OLED。 最近在弄ST和GD的课程,需要GD样片的可以加群申请:615061293 。

视频教学

https://www.bilibili.com/video/BV1Q8411t7sK/

csdn课程

课程更加详细。 https://download.csdn.net/course/detail/37152

样品申请

https://www.wjx.top/vm/mB2IKus.aspx

生成例程

这里准备了自己绘制的开发板进行验证。在这里插入图片描述查看原理图,PB8和PB9设置为开发板的IIC。在这里插入图片描述

配置时钟树

配置时钟为64M。在这里插入图片描述

IIC配置

本次实验使用的IIC与显示屏通信,配置如下。在这里插入图片描述

OLED

查看文档可以知道地址为b0111100或者b0111101,当R/W位置写0的时候,才能进行写的操作,那么地址默认为0x78(b01111000)或者0x7A(b01111010)

在这里插入图片描述

参考程序

这里使用0.96OLED显示屏_STM32F103C8_IIC_V1.0来进行移植在这里插入图片描述在这里插入图片描述查看工程可以知道主要是有3个文件来进行OLED的驱动,移入OLE.h .c 、oledfont.h 、 bmp.h 移入文件之后要注意导入C文件。在这里插入图片描述

删除没有用的头文件 删除sys.h文件在这里插入图片描述

删除delay.h文件在这里插入图片描述

可以查看stdint.h在这里插入图片描述

在oled.h中添加u8 u32定义 也可以直接修改

typedef unsigned          char u8;

typedef unsigned           int u32;


在这里插入图片描述先把oled.h添加主程序中。在这里插入图片描述

查看oled.h,可以看到IIC定义,同时也是模拟IIC,可以注释掉在这里插入图片描述

查看oled.c,可以看到是模拟iic,这些都可以注释不要,我们使用的是iIC,不是模拟。

在这里插入图片描述

HAL_I2C_Mem_Write()

IIC写固定的设备写入数据。 记得导入#include 'i2c.h'在这里插入图片描述

将HAL_I2C_Mem_Write函数放入oled.c中。 例如将Write_IIC_Command函数修改为HAL_I2C_Mem_Write发送方式。在这里插入图片描述

向0x78设备写命令0x00的IIC_Command指令。

/**********************************************

// IIC Write Command

**********************************************/

void Write_IIC_Command(unsigned char IIC_Command)

{

//   IIC_Start();

//   Write_IIC_Byte(0x78);            //Slave address,SA0=0

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(0x00);            //write command

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(IIC_Command); 

//    IIC_Wait_Ack();    

//   IIC_Stop();



     HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&IIC_Command,1,0x100);


}

IIC写数据 向0x78设备写数据0x40的IIC_Data指令。


/**********************************************

// IIC Write Data

**********************************************/

void Write_IIC_Data(unsigned char IIC_Data)

{

//   IIC_Start();

//   Write_IIC_Byte(0x78);            //D/C#=0; R/W#=0

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(0x40);            //write data

//    IIC_Wait_Ack();    

//   Write_IIC_Byte(IIC_Data);

//    IIC_Wait_Ack();    

//   IIC_Stop();

     HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&IIC_Data,1,0x100);



}


在oled.c中,OLED_Init初始化可以注释掉gpio初始化在这里插入图片描述

在oled.c中,OLED_Init初始化中有个延时800ms。 导入

#include 'stm32f1xx_hal.h' 可以使用HAL_Delay(800);

在这里插入图片描述

取模

在这里插入图片描述

在这里插入图片描述

在oledfont.h中放入字库在这里插入图片描述

char Hzk[][32]={


// 记(0) 帖(1) 年(2) 月(3) 日(4)


{0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00},

{0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*'记',0*/

/* (16 X 16 , 宋体 )*/


{0x00,0xF8,0x08,0xFF,0x08,0xF8,0x00,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00},

{0x00,0x0F,0x00,0xFF,0x08,0x0F,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00},/*'帖',1*/

/* (16 X 16 , 宋体 )*/


{0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00},

{0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*'年',2*/

/* (16 X 16 , 宋体 )*/


{0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},

{0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*'月',3*/

/* (16 X 16 , 宋体 )*/


{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00},

{0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*'日',4*/

/* (16 X 16 , 宋体 )*/





};


在main.c中添加显示


OLED_Init();            //初始化OLED  

        OLED_Clear()      ; 

        OLED_ShowCHinese(0,0,0);//记

        OLED_ShowCHinese(16,0,1);//帖



        OLED_ShowNum(0,2,2022,4,16);//显示ASCII字符的码值             

        OLED_ShowCHinese(32,2,2);//年    

        OLED_ShowNum(48,2,9,1,16);//显示ASCII字符的码值         

        OLED_ShowCHinese(64,2,3);//月

        OLED_ShowNum(80,2,10,2,16);//显示ASCII字符的码值                 

        OLED_ShowCHinese(96,2,4);//日


字体大小只有2个在这里插入图片描述显示字符

OLED_ShowString(40,2,'ZXY',8);

在这里插入图片描述

图片放在bmp.h中。


#ifndef __BMP_H

#define __BMP_H        


unsigned char BMP1[]={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF,

0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x0F,0x0F,

0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,

0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xC4,0x04,0x04,0x04,0x07,0xFF,

0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x80,0x80,

0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xE3,0xE3,0xE3,0xE3,0xE3,

0xE3,0xE3,0xE3,0xE3,0xE3,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x1F,

0x1F,0x1F,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x8F,0x8F,

0x8F,0x8F,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,

0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x06,0x06,0x07,0x0F,

0xFF,0xFF,0xFF,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,

0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,

0x00,0xC7,0xC7,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,

0xFF,0x00,0x00,0x00,0xFF,0xFF,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0xE3,0xE0,0xE0,0xE0,

0xE0,0xE3,0xE3,0x03,0x03,0x03,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,

0xFF,0xF0,0xF0,0xF0,0xFF,0xFF,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,

0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF1,0xF1,0xF1,0xF1,

0xF1,0xF1,0xF1,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*'D:GD32F303GD32F30x_Firmware_Library_V2.1.4_iic_oled记帖.bmp',0*/

/* (64 X 64 )*/


};



#endif


显示图片

delay_1ms(2000);

        OLED_Clear();      

        OLED_DrawBMP(0,0,64,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)


在这里插入图片描述


OLED.C

//////////////////////////////////////////////////////////////////////////////////     

//  功能描述   : 0.69寸OLED 接口演示例程(STM32F103ZE系列IIC)

//              说明: 

//              ----------------------------------------------------------------

//              GND   电源地

//              VCC   接5V或3.3v电源

//              SCL   接PA5(SCL)

//              SDA   接PA7(SDA)            

//              ----------------------------------------------------------------

//All rights reserved

//////////////////////////////////////////////////////////////////////////////////

#include 'oled.h'

#include 'stdlib.h'

#include 'oledfont.h'       

//#include 'delay.h'

#include 'stm32f1xx_hal.h'

#include 'i2c.h'


//OLED的显存

//存放格式如下.

//[0]0 1 2 3 ... 127    

//[1]0 1 2 3 ... 127    

//[2]0 1 2 3 ... 127    

//[3]0 1 2 3 ... 127    

//[4]0 1 2 3 ... 127    

//[5]0 1 2 3 ... 127    

//[6]0 1 2 3 ... 127    

//[7]0 1 2 3 ... 127                

/**********************************************

//IIC Start

**********************************************/

/**********************************************

//IIC Start

**********************************************/

//void IIC_Start()

//{


//    OLED_SCLK_Set() ;

//    OLED_SDIN_Set();

//    OLED_SDIN_Clr();

//    OLED_SCLK_Clr();

//}


///**********************************************

////IIC Stop

//**********************************************/

//void IIC_Stop()

//{

//OLED_SCLK_Set() ;

////    OLED_SCLK_Clr();

//    OLED_SDIN_Clr();

//    OLED_SDIN_Set();

//    

//}


//void IIC_Wait_Ack()

//{


//    //GPIOB- >CRH &= 0XFFF0FFFF;    //设置PB12为上拉输入模式

//    //GPIOB- >CRH |= 0x00080000;

////    OLED_SDA = 1;

////    delay_us(1);

//    //OLED_SCL = 1;

//    //delay_us(50000);

///*    while(1)

//    {

//        if(!OLED_SDA)                //判断是否接收到OLED 应答信号

//        {

//            //GPIOB- >CRH &= 0XFFF0FFFF;    //设置PB12为通用推免输出模式

[1] [2] [3] [4]
关键字:STM32CUBEMX  GD32F303  IIC 引用地址:STM32CUBEMX开发GD32F303(14)----IIC之配置OLED

上一篇:在STM32CubeIDE中创建工程
下一篇:基于stm32单片机的通用定时器配置

推荐阅读最新更新时间:2024-11-09 10:22

EEPROM IIC
1. 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化 2. 起始和终止信号 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号 起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态 接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好
[单片机]
EEPROM <font color='red'>IIC</font>
14.STC15W408AS单片机IIC驱动OLED
一、OLED显示屏 STC15W408AS单片机并没有提供IIC总线的接口,但是我们可以通过模拟IIC的方式实现。关于IIC总线的只是大家可以自行上网搜索。这里以驱动SSD1306芯片的0.96寸的128*64的OLED显示屏为例。下图为OLED的外观图。 二、SSD1306芯片的IIC时序图 这里我们需要看清楚START信号和STOP信号。关于时间,芯片的数据手册也有说明。 IIC数据传输格式 这个是芯片的数据传输格式。 2) The slave address is following the start condition for recognition use. For the SSD13
[单片机]
14.STC15W408AS单片机<font color='red'>IIC</font>驱动<font color='red'>OLED</font>
STM32CubeMx基本使用方法
第一步:安装STM32CubeMx软件,详细安装步骤若有不清楚的可以自行百度,或私聊我,这里不做详细介绍! 第二步:安装完成后,打开STM32CubeMx软件,需要先下载需要使用到的库文件,操作如下:Help-- Manage embedded software packages 选择你需要用到的单片机系列的库文件下载,一般选择最新版本就可以! 选择好后点击: Install Now 第三步:开始建立工程: 文件-- 新项目 选择你所使用到的单片机准确的型号; 这里以STM32F103RE LQFP64为例; 直接双击就可以! 第四步:这是非常重要的一部,务必注意; 这里选择你的所用的调试接口,默认是No De
[单片机]
<font color='red'>STM32CubeMx</font>基本使用方法
STM32CUBEMX(14)--SPI,TLC5947外部PWM移植
概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如 EEPROM,FLASH,实时时钟,AD转换器。 TLC5947是一款SPI接口的PWM脉宽调制24路LED驱动模块/RGB LED驱动器芯片,它能驱动24路的PWM。 硬件准备 首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 外部PWM模块就是淘宝上SPI接口的TLC5947模块。 选择芯片型号 使用STM32C
[单片机]
<font color='red'>STM32CUBEMX</font>(14)--SPI,TLC5947外部PWM移植
[ESP32][esp-idf][LVGL7.9] 使用oled iic编译失败
编译失败如图: 这是官方失误导致的,修改如下,删除LV字符 看下正确cfg配置:
[单片机]
[ESP32][esp-idf][LVGL7.9] 使用<font color='red'>oled</font> <font color='red'>iic</font>编译失败
MSP430F5529 DriverLib 库函数学习笔记(十一)I2C / IIC
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 硬知识 USCI的I2C模式 I2C概述 MSP430单片机的USCI_B模块能够支持I2C通信,能够为MSP430单片机与具有I2C接口的设备互连提供条件。软件上只需要完成I2C功能的配置,硬件能够完全实现I2C通信的功能。相比较利用GPIO软件模拟实现I2C操作,能够减少CPU的负荷。 MSP430单片机I2C模块特征及结构框图 (1)MSP430单片机I2C模块的主要特征  与Philips半导体I2C规范V2.1兼容;  7位
[单片机]
MSP430F5529 DriverLib 库函数学习笔记(十一)I2C / <font color='red'>IIC</font>
STM32CubeMX介绍、 下载与安装
Ⅰ、写在前面 相信很多人都知道STM32CubeMX这个工具,也是近年来开发STM32比较流行的一个工具。这个工具从两年前第一版到现在已经有多个版本了,功能也从简单越来越强大了。 STM32CubeMX是一个配置STM32代码的工具,它把很多东西封装的比较好,硬件抽象层、中间层、示例代码等。 现在ST公司升级和维护的库主要就是STM32CubeMX的HAL库和标准外设库,使用这两种库开发STM32各有各的好处,下面简单描述一下。 如果你是一名刚学STM32的初学者,想要把硬件底层相关的东西搞明白,不建议使用STM32CubeMX这个工具,建议使用之前经典的标准外设库来开发(先学习标准外设库,但有必要抽时间了解STM32
[单片机]
<font color='red'>STM32CubeMX</font>介绍、 下载与安装
爱芯元智荣获IIC“年度新锐初创IC设计公司”奖,并入选TOP10 AI芯片公司
爱芯元智荣获IIC“年度新锐初创IC设计公司”奖,并入选TOP10 AI芯片公司 中国 上海 2021年8月18日——昨日, 2022中国IC领袖峰会暨中国IC设计成就奖颁奖典礼成功举办,人工智能视觉芯片研发及基础算力平台公司“爱芯元智”出席峰会 。会上,围绕“20年,砥砺前行”峰会主题,半导体业界专家和企业领袖、中国电子和IC设计行业资深工程师、技术和供应链专业人士,以及企业高管们共同回顾了中国半导体产业20 年来的发展历程,并一齐探讨中国半导体下一个十年的发展之路。 爱芯元智凭借在AI视觉芯片赛道的强大自研实力和突出落地成果,荣获“2022中国IC设计成就奖之年度新锐初创IC设计公司”奖。 由AspenCor
[嵌入式]
爱芯元智荣获<font color='red'>IIC</font>“年度新锐初创IC设计公司”奖,并入选TOP10 AI芯片公司
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved