很久以前就在M451上用Freertos8.1了,但是gui一直用的ZLGGUI,一直没改进。最近空闲下,花了两天搞定了uGFX的移植工作。
国内ugfx用的估计很少,以至于查资料只有开源官网,其它没有任何资料,只能根据自己的经验来移植了。
第一步:实现基本的底层驱动。
我用的是ssd1306这一款12864的oled。spi接口。主要实现底层接口函数。
初始化函数:
void OLED_InitHard(void);
写命令函数:
void OLED_WriteCmd(u8 cmd);
写数据函数:
void OLED_WriteData(u8 dat)
第二部:拷贝ugfx源码到工程文件。然后实现基层接口函数:
void init_board(GDisplay *g);
void post_init_board(GDisplay *g) ;
void setpin_reset(GDisplay *g, bool_t state);
void acquire_bus(GDisplay *g) ;
void release_bus(GDisplay *g) ;
void write_cmd(GDisplay *g, uint8_t cmd);
void write_data(GDisplay *g, uint8_t* data, uint16_t length);
其实主要就实现三个函数:
void init_board(GDisplay *g);
void write_cmd(GDisplay *g, uint8_t cmd);
void write_data(GDisplay *g, uint8_t* data, uint16_t length);
主要就是用上面ssd1306的驱动函数按要求去填这些函数。没啥难度。
第二部:简单配置,编译挑错。
配置ugfconfig。h头文件,然后编译调错。这是一个耐心的过程,我也搞了一天多才把报错的问题一一解决。什么变量未定义,某些函数没有实现了等慢慢自己去实现就ok了。
其中四个函数要自己实现的:
void gfxSleepMicroseconds(us)
{
bsp_DelayUs(us);
}
void gfxSleepMilliseconds(ms)
{
bsp_DelayMS(ms);
}
void *gfxAlloc(u32 size)
{
void *xxx;
xxx=malloc(size);
return xxx;
}
void gfxFree(void *ptr)
{
free(ptr);
}
第四部:找源码里的例子进行验证。
在源码里有例子可以进行简单的画点,方框,字体等显示。
|