MC3172移植U8g2单色图形库

简介

MC3172是厦门感芯科技发布的一款单核硬件64线程MCU,此芯片开发上手难度不高,与其他MCU裸机开发相似(可以把每一个线程当作一个MCU来使用)每个线程运行频率可自行设置。
U8g2是一个嵌入式单色图形库,非常容易移植与使用。
现在就先搬一下U8g2图形库,此次用的P屏幕为很常见的IIC接口SSD1306 0.96OLED,IDE使用官方例程所用MounRiverStudio。

下载U8g2

首先去GitHub下载最新的U8g2库
解压后保留移植必要源码 如图

进入csrc文件夹,保留本次移植屏幕驱动芯片所需驱动,删除其他芯片驱动文件(u8x8_d_*****类型的c文件为屏幕芯片驱动文件),删除完成后剩余文件如下图所示

开始移植

添加U8g2文件

在MC3172工程中新建一个U8g2文件夹,把csrc文件夹中精简后的.h与.c文件添加到u8g2文件夹中,在MounRiverStudio中添加头文件路径 如下图

添加回调函数

新建一个oled.c与一个oled.h文件
在oled.c文件中添加U8g2所需的IIC通信与延时回调函数,可参考U8g2官方给出的硬件I2C代码。
代码如下:
I2C通信回调函数

uint8_t u8x8_byte_mc3172_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{static uint8_t buffer[32];      /* u8g2/u8x8 will never send more than 32 bytes between START_TRANSFER and END_TRANSFER */static uint8_t buf_idx;uint8_t *data;switch(msg){case U8X8_MSG_BYTE_SEND://此处不需要修改data = (uint8_t *)arg_ptr;while( arg_int > 0 ){buffer[buf_idx++] = *data;data++;arg_int--;}break;case U8X8_MSG_BYTE_INIT:/* add your custom code to init i2c subsystem */break;case U8X8_MSG_BYTE_START_TRANSFER:buf_idx = 0;break;case U8X8_MSG_BYTE_END_TRANSFER:HW_I2cWrite(buffer,buf_idx);//此处添加硬件I2C通信接口,函数实现在本文下面break;default:return 0;}return 1;
}

延时回调函数

uint8_t u8g2_gpio_and_delay_mc3172(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr)
{switch(msg){case U8X8_MSG_GPIO_AND_DELAY_INIT:break;case U8X8_MSG_DELAY_MILLI:delay_ms(arg_int);  //此处添加MC3172的ms延时函数break;case U8X8_MSG_GPIO_I2C_CLOCK:break;case U8X8_MSG_GPIO_I2C_DATA:break;default:return 0;}return 1; // command processed successfully.
}

模拟U8g2硬件I2C通信

因为MC3172并没有硬件I2C,所以用IO模拟一个就好了

初始化软件I2C所用的IO

此处所用的软件i2c是之前写好的,直接拿来用了,详情可参考MC3172论坛
MC3172使用IO模拟I2C来读取AHT10和BH1750

I2C_InitTypeDef OLED_init;
//初始化i2c引脚
void OLED_i2c_init(void){OLED_init.SDA_Port=GPIOC_BASE_ADDR;OLED_init.SDA_Pin=GPIO_PIN1;OLED_init.SCL_Port=GPIOC_BASE_ADDR;OLED_init.SCL_Pin=GPIO_PIN0;i2c_init(&OLED_init);
}

模拟硬件I2C的通信

void HW_I2cWrite(uint8_t *buf,uint8_t len)
{if(len<=0)return ;i2c_start(&OLED_init);i2c_send_byte(&OLED_init, OLED_ADDRESS);i2c_wait_ack(&OLED_init);for(uint8_t i=0;i<len;i++){i2c_send_byte(&OLED_init, buf[i]);i2c_wait_ack(&OLED_init);}i2c_stop(&OLED_init);
}

最后把函数添加到上面回调函数中即可
oled.h头文件中内容如下

#ifndef __OLED_H
#define __OLED_H#include "MC3172.h"#define USE_HORIZONTAL 0#define OLED_ADDRESS 0x78   //7位地址#define OLED_WriteCom_Addr  0x00    //从机写指令地址
#define OLED_WriteData_Addr 0x40    //从机写数据地址#define OLED_CMD  0 //写命令
#define OLED_DATA 1 //写数据void OLED_i2c_init(void);void U8g2Init(void);
void U8g2Test(void);#endif  /* __OLED_H */

精简u8g2源码

u8g2源码中包含了许多其它屏幕IC的初始化代码,此处为了节省flash空间需要删除掉。
最后保留如下图所示
修改u8g2_d_setup.c保留如下,其余代码全部注释或删除

修改u8g2_d_memory.c保留如下,其余代码全部注释或删除
这个是给屏幕分配的显示buf大小*****noname_f为1024字节
MC3172为ramrun运行方式,代码空间与数据空间可以自由分配,线程栈可以分大一点点。

添加U8g2初始化函数

static u8g2_t u8g2;
void U8g2Init(void)
{OLED_i2c_init();u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2,U8G2_R0,u8x8_byte_mc3172_hw_i2c,u8g2_gpio_and_delay_mc3172);//初始化U8g2分配bufu8g2_InitDisplay(&u8g2); // 初始化屏幕驱动芯片u8g2_SetPowerSave(&u8g2, 0); // 启动显示
}

添加测试函数

U8g2官方测试画面

void draw(u8g2_t *u8g2)
{u8g2_SetFontMode(u8g2, 1);u8g2_SetFontDirection(u8g2, 0);u8g2_SetFont(u8g2, u8g2_font_inb24_mf);u8g2_DrawStr(u8g2, 0, 20, "U");u8g2_SetFontDirection(u8g2, 1);u8g2_SetFont(u8g2, u8g2_font_inb30_mn);u8g2_DrawStr(u8g2, 21,8,"8");u8g2_SetFontDirection(u8g2, 0);u8g2_SetFont(u8g2, u8g2_font_inb24_mf);u8g2_DrawStr(u8g2, 51,30,"g");u8g2_DrawStr(u8g2, 67,30,"\xb2");u8g2_DrawHLine(u8g2, 2, 35, 47);u8g2_DrawHLine(u8g2, 3, 36, 47);u8g2_DrawVLine(u8g2, 45, 32, 12);u8g2_DrawVLine(u8g2, 46, 33, 12);u8g2_SetFont(u8g2, u8g2_font_4x6_tr);u8g2_DrawStr(u8g2, 1,54,"github.com/olikraus/u8g2");
}
void U8g2Test(void)
{u8g2_FirstPage(&u8g2);do{draw(&u8g2);} while (u8g2_NextPage(&u8g2));
}

MC3172分配线程

因为我的开发板外挂了有源200M晶振所以我在此选用外部有源晶振。
开发板默认自带48M无源晶振,内部高速RC振荡器为192M,无外部有源晶振可选这两个。
此处分配线程4用于点屏

线程内调用测试函数

//I2C OLED测试线程
void thread4_main(void)
{U8g2Init();while(1){U8g2Test();}thread_end();
}

测试

点亮

总结

感芯科技推出的这款MC3172芯片可玩性非常高,上手也比较容易,目前有大佬在给他做HAL库,之后移植程序应该会更简单。
如有错误欢迎指出,看到后会及时修改。
完整代码
附几张开发板图片


感芯科技MC3172移植U8g2图形库相关推荐

  1. 厦门感芯科技MC3172(1):介绍和环境搭建

    厦门感芯科技MC3172(1):介绍和环境搭建 文章目录 厦门感芯科技MC3172(1):介绍和环境搭建 1. MC3172介绍 2. MC3172的开发环境 2.1 首先安装ide 2.2 找到配置 ...

  2. 基于STM32移植U8g2图形库——OLED显示(HAL库)

    前言:本文主要内容为将优秀的图形库U8g2移植到STM32单片机上,用于OLED显示精美UI.其实,目前GitHub上有需要优秀的开源GUI库,但是大部分的GUI解决方案并不适合0.96 OLED(1 ...

  3. 【开源】硬件/软件i2c两种方式移植u8g2单色图形库驱动0.96吋OLED

    1.前言 关于0.96吋OLED的详细操作,可查看一文彻底了解SSD1306驱动0.96寸OLED,本文移植u8g2图形库来驱动0.96吋OLED. 2.关于u8g2 u8g2是单色显示库的第二个版本 ...

  4. 移植好U8g2图形库的STM32F407标准库工程模板,0.96寸OLED驱动程序

    移植好U8g2图形库的STM32F407标准库工程模板,用的0.96寸OLED屏(SSD1306),用硬件IIC驱动. 花了一晚上时间去移植.开发板主控MCU用的是STM32F407VET6,I2C接 ...

  5. 相芯科技蔡锐涛:AI虚拟形象——没有最完美,只有更完美

    在LiveVideoStackCon2019深圳音视频技术大会前夕,我们邀请到了相芯科技资深图形引擎开发经理蔡锐涛老师接受采访,从个人成长聊到智能图形技术方面的创新与应用,再到相芯科技在虚拟形象上的优 ...

  6. 20K~50K/月,上海随芯科技 算法 招聘:3D机器视觉、DSP、语音识别

    关注公众号,获取更多AI领域发展机会 公司介绍 西人马FATRI是一家IDM模式的芯片公司,致力于为民用航空.能源.轨道交通.海洋船舶.工业.消费电子等领域打造端-边-管-云用的一体化的系统解决方案. ...

  7. 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了

    作为全球影响最广.规模最大的CG展示.学术研讨会,SIGGRAPH汇集了全球众多顶尖的计算机图形技术厂商以及影视行业的领军人物,分享最尖端的前沿技术.今年在美国洛杉矶会展中心,SIGGRAPH2019 ...

  8. 相芯科技美妆SDK测评:妆容丰富 效果自然 支持自定义

    美妆SDK想必大家都不陌生,得益于人们对美无止境的追求,各大企业纷纷接入这一功能,让客户可以随时体验在线换妆,而不必"劳脸伤财".但因人脸检测与跟踪技术的门槛不低,目前市面上的美妆 ...

  9. stm32移植U8G2图像库指南

    stm32移植U8G2图像库指南 U8G2图形库介绍 移植准备工作 开始移植文件 修改keil配置 修改U8G2源码 u8g2_d_setup.c修改 u8g2_d_memory.c修改 注意 U8G ...

最新文章

  1. 59 Celery架构
  2. python中的@符号的作用
  3. 前端月薪过万需要哪些技术_Web前端月薪过万必修的几项技能,你会吗?
  4. 什么叫企业级即时通讯软件
  5. 为什么在加油站上班,一个月休3天,工资2000元,却有人干?
  6. ASP.NET MVC学习
  7. vs2010设置 行号显示
  8. 【廖雪峰python基础】【切片】课后作业
  9. Eclipse PHPEclipse 配置
  10. 独家解读 | Fisher信息度量下的对抗攻击
  11. 组归一化(Group Normalization)的解释
  12. java中如何将十进制转换为二进制
  13. 流量控制工具TC详细说明
  14. Quartus II实验二 运算部件实验:并行乘法器
  15. 答:本科生写论文对考研有用吗?
  16. pip下载第三方库失败
  17. Python带_的变量或函数命名,带下划线的方法
  18. 实名认证需谨慎,避免陷入隐私泄露风险
  19. 分布式网页爬虫系统 设计和实现
  20. python 快速获取图片大小

热门文章

  1. vue后台管理系统打包上线到node
  2. 【Python黑科技】tkinter库实战制作一个记事本(保姆级图文+实现代码)
  3. 由子网掩码字符串转换成长度前缀的代码示例
  4. 最牛的IT编程信息网站
  5. LVS NAT模式搭建
  6. 饭局上领导想抽烟,别说“抽我的软华子”,酒桌上3种人不能重用
  7. 浅谈Everdroid流程化机器人设计器
  8. 早期RA获超声缓解的基线预测因素
  9. 基于ssm的一个一个众筹系统平台
  10. Node.js中的child_process模块详解