移植U8g2到STM32中

1、首先先在官网下载U8g2包:https://github.com/olikraus/u8g2

点击这里下载。

也可以在Wiki中下载STM32F103示例包。

 

2、去掉多余的驱动文件,只保留u8x8_d_ssd1306_128x64_noname.c,多余带有u8x8_d_的文件删除。ssd1306是驱动芯片,128x64是分辨率。

首先打开u8g2包,拖出csrc,因为后面只用这个文件夹:

这是笔主裁剪过后的文件,就少了带u8x8_d_的文件。

最后把文件夹全部移植到MyLibrary(这个文件是自己定义的)文件夹下。

 

3、进入Keil5,创建一个U8g2文件夹,把刚刚裁剪的文件放入U8g2中,并且把MyLibrary路径给放入STM32路径中。

 

4、精简u8g2_d_setup.c,只需要保留u8g2_Setup_ssd1306_i2c_128x64_noname_f()这个函数,其中f代表最大缓存1024字节。

 

5、精简u8g2_d_memory.c,只需要保留u8g2_m_16_8_f(),因为我们只调用了u8g2_Setup_ssd1306_i2c_128x64_noname_f()这个函数,所以只保留他用到的函数即可。

 

6、之后编译,我出现了这个错误

把这个删掉即可。

 

7、初始化U8g2

uint8_t u8g2_gpio_and_delay_stm32(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr)
{
	switch(msg)
		{
		//Function which implements a delay, arg_int contains the amount of ms
			case U8X8_MSG_DELAY_MILLI:
				Delay_ms(arg_int);
			break;
		//Function which delays 10us
			case U8X8_MSG_DELAY_10MICRO:
				Delay_us(10);
			break;
		//Function which delays 100ns
			case U8X8_MSG_DELAY_100NANO:
				__NOP();
			break;
		//Function to define the logic level of the I2C_CLOCK line
			case U8X8_MSG_GPIO_I2C_CLOCK:
				if (arg_int) IIC_OLED_SCL_HIGH();
				else IIC_OLED_SCL_LOW();
			break;
		//Function to define the logic level of the I2C_SDA line
			case U8X8_MSG_GPIO_I2C_DATA:
				if (arg_int) IIC_OLED_SDA_HIGH();
				else IIC_OLED_SDA_LOW();
			break;
			
			default:
			return 0; //A message was received which is not implemented, return 0 to indicate an error
	}

	return 1; // command processed successfully.
}

/* 画U8g2 Log */
void draw(u8g2_t *u8g2)
{
	u8g2_ClearBuffer(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");
	
	u8g2_SendBuffer(u8g2);
	Delay_ms(1000);
}

int main(void)
{
	
	u8g2_t u8g2;
	
	/* U8g2的初始化 */
	u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, u8g2_gpio_and_delay_stm32);
	u8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in sleep mode after this,
	u8g2_SetPowerSave(&u8g2, 0); // wake up display
	u8g2_ClearBuffer(&u8g2);
	Delay_ms(1000);  

    u8g2_DrawLine(&u8g2, 0, 0, 127, 63);		// 通过划线函数更改的缓存,写入缓存区后进行显示
	u8g2_DrawLine(&u8g2, 127, 0, 0, 63);
	u8g2_SendBuffer(&u8g2);

    draw(&u8g2);
}

这里有个小问题,如果遇到跟我一样的情况,修改这个选项即可。

本文作者:烟儿公主

本文链接:https://www.cnblogs.com/toutiegongzhu/p/17481634.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   烟儿公主  阅读(1076)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 夏日大冒险 暴躁的兔子
夏日大冒险 - 暴躁的兔子
00:00 / 00:00
An audio error has occurred.

作词 : 暴躁的兔子

作曲 : 暴躁的兔子

编曲 : IOF

混音:Gfanfan

出品:网易飓风

夏天 不要再浪费时间

实现 你承诺过的改变

别再 找一堆借口拖延

现在就和我一起飞向海边

人生苦短 你应该学会如何作乐

低着头还怎么应对挫折

人应该为自己活着

不用去迎合

要去寻欢作乐

撮合我的浪漫和悲欢

把这荒诞人生都塞满

生活难免磕磕绊绊

对抗生活的平庸就是浪漫

学会取悦自己逆风翻盘

去反抗变态的三观

把条条框框都砸烂

建立新的规则推翻谈判

无可救药的人呐

和我一起去海边

看那日出和晚霞 海天一线

看阳光穿越地平线

现实交织的明天

就在这个夏天

为自己改变

别怕山高路远

去冒险

我真的不care你是否会喜欢我

不跟风被定义的美 全都是灾祸

我才不讨好大多数绝不与示弱

过好你的生活

你管我应该怎么快活

没有人能有资格审判

别人的生活和牵绊

快闭上你的高谈阔论

乘风破浪吧 理想的风帆

我就是肆意张扬又如何

我就是锋芒毕露又如何

我就是离经叛道又如何

我就是要出格 你管我要如何

我就是与众不同又如何

我就是特立独行又如何

我就是不知好歹又如何

你管我怎样出格 你管我如何

无可救药的人呐

和我一起去海边

看那日出和晚霞 海天一线

看阳光穿越地平线

现实交织的明天

就在这个夏天

为自己改变

别怕山高路远

不知进退的人呐

和我一起去海边

聊聊曾经的理想 一起想当年

那曾想改变世界的人

是否还满腔热忱

不羁的我们放肆着

反抗那命运的指针

解放灵魂

推广:网易飓风

企划:贾焱祺

监制:徐思灵

出品人:谢奇笛