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

概述本章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以下慎用)


排除服务器接入问题地基本步骤
电子万能拉力试验机是个怎么样的试验设备?记录表、指导书、技术招标
200W大功率无线充电技术-深入探讨帕沃思科技提供的无线充电模组方案
我将GuiLite移植到了STM32F4开发板上
华为闪存门持续恶化 用户一纸诉状将华为告上法庭!
STM32CUBEMX开发GD32F303(14)----IIC之配置OLED
Bakkt究竟是不是加密货币交易所
英特尔针对7纳米工艺节点做出哪些关键改进?
哪些应用在5G初期获得利益
马尔戴克启动一个以锂离子电池为基础的储能项目 投资约1500万欧元
中国联通在移动业务和移动出账方面用户累计已到达了为3.12亿户
国内智能教育机器人市场能否迎来新机
在购买激光测距仪时,您需要考虑几点
晶科能源高效光伏组件全球累计出货量已超165GW
太阳能语音监控杆智能安防的新选择
浅析人机界面互动技术的趋势发展
努比亚Z17能用上骁龙835?nubia Z17mini炫红色更值得关注!
在2020第十届中国国际机器人高峰论坛上,李群自动化再受瞩目
苹果与高通闹掰对其用户有哪些影响
智能建筑中高低压配电设备集成监控和管理系统应用分析