8161|12

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【GD32L233C-START评测】五、I2C(硬件I2C驱动OLED) [复制链接]

 

        本次实验使用GD32L233CCT6的I2C通信接口驱动1.3' OLED显示屏。
一、实验资源
1、GD32L233C-START;
2、Keil V5.36.0.0;
3、1.3' OLED模块(自制)


二、知识准备

        GD32L233CCT6有两个I2C通信接口(I2C0、I2C1),接口支持主、从机模式;支持7位和10位的地址模式和广播寻址;支持标速(100kHz),快速(400kHz)和快速+ (1MHz)三种速度模式;支持I2C 多主机;具备可编程的建立时间和保持时间。


三、实验内容
1、硬件连接

I2C1接口已通过“Arduino”引出,对于实验比较方便。


2、程序实现

        I2C 可以工作在从机发送 、从机接收、主机发送、主机接收等四种工作模式,在本实验中仅是利用I2C接口向OLED相关寄存器写入指令及数据用以驱动OLED显示屏进行显示,所以实验中采用的是“主机发送”模式。OLED的主控为SH1106,使用了7位地址模式:

对于工作在主机模式的I2C模块配置在手册已给出了比较详细的说明:

主机做为发送器时根据发送的字节数量不同配置上有点小差别:

配置中还要考虑两个比较重要的参数:数据保持时间和数据建立时间,这两个参数也决定了I2C通信的速率:

 

I2C接口开启所在GPIO的备用功能,实验中I2C1的配置依据:


I2C1配置:

static void i2c_config(void)//I2C端口配置
{
	rcu_periph_clock_enable(RCU_GPIOB);
	rcu_periph_clock_enable(RCU_I2C1);
	
	gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_10);//将SCL复用至PB10脚
	gpio_af_set(GPIOB, GPIO_AF_4, GPIO_PIN_11);//将SDA复用至PB11脚

	gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);//开漏输出,使能上拉
	gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
	gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_11);//开漏输出,使能上拉
	gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

	i2c_timing_config(I2C1, 0, 0x3, 0);//配置I2C1时序0分频;数据建立时间0X3;数据保持时间0
	i2c_master_clock_config(I2C1, 0x13, 0x36);//速度控制,主机模式下SCL高电平周期0x13;低电平周期0x36

	i2c_address_config(I2C1, OLED_I2C_ADDR, I2C_ADDFORMAT_7BITS);//配置器件地址、采用7位地址
	i2c_master_addressing(I2C1, OLED_I2C_ADDR, I2C_MASTER_TRANSMIT);//配置从机地址、主机传输

	i2c_transfer_byte_number_config(I2C1, 2);//传输2字节

	i2c_enable(I2C1);//使能I2C1
}

OLED驱动代码来自于“中景园”

int main(void)
{
	//uint8_t t = ' ';
	
	systick_config();
	OLED_Init();
	OLED_ColorTurn(0);			//0正常显示 1 反色显示
  OLED_DisplayTurn(0);		//0正常显示 1 屏幕翻转显示
	OLED_Clear(1);
	delay_1ms(1500);
	OLED_Clear(0);
	OLED_ShowPicture(0,0,130,64,BMP3,1);
	OLED_Refresh();
	delay_1ms(2000);
	while(1)
	{
		OLED_ShowChinese(16,0,0,16,1);//兆
		OLED_ShowChinese(32,0,1,16,1);//易
		OLED_ShowChinese(48,0,2,16,1);//创
		OLED_ShowChinese(64,0,3,16,1);//新
		OLED_ShowChinese(80,0,4,16,1);//科
		OLED_ShowChinese(96,0,5,16,1);//技

		OLED_ShowString(24,16,"GigaDevice",16,1);
		OLED_ShowString(4,32,"GD32L233C-START",16,1);
		OLED_ShowString(8,48,"HAPPY NEW YEAR",16,1);
		//OLED_ShowString(0,48,"ASCII:",16,1);  
		//OLED_ShowString(63,48,"CODE:",16,1);
		//OLED_ShowChar(48,48,t,16,1);//显示ASCII字符	   
//		t++;
//		if(t>'~')t=' ';
		//OLED_ShowNum(103,48,t,3,16,1);
		OLED_Refresh();
		delay_1ms(2000);
		OLED_Clear(0);
//		OLED_ShowChinese(0,0,0,16,1);  //16*16 中
//	  OLED_ShowChinese(16,0,0,24,1); //24*24 中
//		OLED_ShowChinese(24,20,0,32,1);//32*32 中
//	  OLED_ShowChinese(64,0,0,64,1); //64*64 中
//		OLED_Refresh();
//	  delay_1ms(500);
//  	OLED_Clear(0);
//		OLED_ShowString(0,0,"ABC",8,1);//6*8 “ABC”
//		OLED_ShowString(0,8,"ABC",12,1);//6*12 “ABC”
//	  OLED_ShowString(0,20,"ABC",16,1);//8*16 “ABC”
//		OLED_ShowString(0,36,"ABC",24,1);//12*24 “ABC”
//	  OLED_Refresh();
//		delay_1ms(500);
		OLED_ScrollDisplay(12,5,1);
	}
}


四、实验成果

OLED是TB带板屏自己拆机打板制作,还有个金属保护框,屏的尺寸应该是1.3的。做了I2C和SPI两种接口,下次就做SPI实验。
五:附件

由于发帖审核时间太长,审核通过后帖子已然被埋入海底。发贴不易,设置了回贴可见,请谅。

游客,如果您要查看本帖隐藏内容请回复

此帖出自GD32 MCU论坛

最新回复

学习一下i2c驱动过程   详情 回复 发表于 2024-10-30 16:51
点赞 关注
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

I2C1配置讲的很好

谢谢分享OLED驱动代码

此帖出自GD32 MCU论坛

点评

谢谢捧场!多交流相互学习  详情 回复 发表于 2022-2-8 22:37
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
Jacktang 发表于 2022-2-7 07:27 I2C1配置讲的很好 谢谢分享OLED驱动代码

谢谢捧场!多交流相互学习

此帖出自GD32 MCU论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 

感谢分享GD32的OLED硬件IIC,找了好久都是软件的

此帖出自GD32 MCU论坛

点评

希望能够帮到你  详情 回复 发表于 2022-7-27 11:23
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

5
 
windysw20 发表于 2022-7-26 14:28 感谢分享GD32的OLED硬件IIC,找了好久都是软件的

希望能够帮到你

此帖出自GD32 MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 

此帖出自GD32 MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

I2C1讲的很清楚,谢谢分享OLED驱动代码

此帖出自GD32 MCU论坛
 
 
 

回复

6960

帖子

11

TA的资源

版主

8
 
这帖子写得不错呀,谢谢分享,这么多显示屏,家里有矿的人呀!
此帖出自GD32 MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 


此帖出自GD32 MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

10
 

讲的太好了。谢谢大佬

此帖出自GD32 MCU论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

11
 

感谢分享

 

此帖出自GD32 MCU论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

12
 

感谢分享,想看看iic过程

此帖出自GD32 MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 

学习一下i2c驱动过程

此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
Protel 99 SE 应用技术问答

l问:请问多层电路板是否可以用自动布线答复:可以的,跟双面板一样的,设置好就行了。问:在protel中能否用orcad原理图答复:需 ...

第五届全国大学生电子设计竞赛获奖作品选编

第五届全国大学生电子设计竞赛获奖作品选编

在现有的PCB板图上怎样加载网络标号?

大家好,请问一下,在PROTEL99SE中,我要在现成的PCB图上加网络标号,各接点加载之后,我想把已连好的线都转换过来,也就是说, ...

lpc1343之三:通过USB接口控制开发板LED闪烁速度并读取AD转换结果

一直想充分利用LP1343的USB Device接口作为初期开发时的人机接口。 如果有感兴趣的朋友可以下载原代码研究。所有程序基于:LP ...

针对beaglebone 扩展板,进行Linux驱动的调试!

好久没有发帖子了!今天来分享一下针对beaglebone 扩展板,进行Linux驱动的调试吧! 第二次修正beaglebone板子的外围电路还是比 ...

SiC(碳化硅)是什么?SiC-MOS关与Si-MOS管的区别

本帖最后由 qwqwqw2088 于 2020-3-29 11:22 编辑 碳化硅(SiC)是比较新的半导体材料。一开始,我们先来了解一下它的物理特性 ...

颁奖:10月21日ADI直播:惯性MEMS应用那些事

10月21日ADI直播:惯性MEMS应用那些事活动颁奖啦!名单详见下方列表。请获奖者务必在2020年12月6日23:59前,按照下方领奖确认流 ...

寻找可以交替发送指令且支持2400波特率的串口助手

如题,寻求帮助,需要找一个可以交替发送指令且支持2400波特率的串口助手 我手上有个可以交替发送指令的,但是偏偏不支持2400 ...

ARM编程实践入门《一步步写嵌入式操作系统——ARM编程的方法与实践》

这是一本介绍怎样去实际编写一款嵌入式操作系统的书,全书共分九章,从最基本的嵌入式编程方法开始,逐渐深入到中断管理、内存管 ...

【DigiKey创意大赛】家庭共享智能药盒01+开箱

【DigiKey创意大赛】家庭共享智能药盒01+开箱 没想到这次的创意能够入选,非常荣幸。我的创意如下: 以往的智能药盒主要是 ...

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表