STM32移植u8glib

 

 首先在官网上下载u8glib for arm https://github.com/olikraus/u8glib

 下载之后解压

    新建 u8g_arm.c 这是u8g的接口文件

 

  需要实现的函数:

  u8g_Delay(uint16_t)为延时n毫秒函数

 1 void u8g_Delay(uint16_t val)
 2 {
 3         //put your code here
 4 }
 5 
 6 void u8g_MicroDelay()
 7 {
 8     //put your code here
 9 }
10 void u8g_10MicroDelay()
11 {
12     //put your code here
13 }
14 uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
15 {
16 
17   switch(msg)
18   {
19     case U8G_COM_MSG_STOP:
20       //STOP THE DEVICE
21       break;
22 
23     case U8G_COM_MSG_INIT:
24       //INIT HARDWARE INTERFACES, TIMERS, GPIOS...
25       break;
26 
27     case U8G_COM_MSG_ADDRESS:  
28       //SWITCH FROM DATA TO COMMAND MODE (arg_val == 0 for command mode)
29      break;
30 
31     case U8G_COM_MSG_RESET:
32       //TOGGLE THE RESET PIN ON THE DISPLAY BY THE VALUE IN arg_val
33       break;
34 
35     case U8G_COM_MSG_WRITE_BYTE:
36       //WRITE BYTE TO DEVICE
37       break;
38 
39     case U8G_COM_MSG_WRITE_SEQ:
40     case U8G_COM_MSG_WRITE_SEQ_P:
41       break;
42   }
43   return 1;
44 }

 关于case U8G_COM_MSG_WRITE_BYTE: 直接将control设置为0x00 即按照数据的格式发就行

这里用的是i2c通信协议,使用其他协议需要实现不同的函数

下面新建u8g_arm.h

添加下面的代码

 

 1 #ifndef _U8G_ARM_H
 2 #define _U8G_ARM_H
 3  
 4 //adjust this path:
 5 #include "u8g.h"
 6  
 7 //main com function. read on...
 8 uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); 
 9  
10 #endif

 

具体就不加解释

这样就实现了u8g的接口

使用u8g时添加下面代码:

1 u8g_t u8g;//构造一个u8g
2 
3 u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_i2c, u8g_com_hw_i2c_fn);//注意第三个参数为刚才实现的函数名字 第二个参数为驱动ic

之后就可以使用u8g了

然而在编译中出现一些问题,做一下整理:

出现symbol undefined :把不需要的.c文件删除即可

出现no space:打开options for target -> c/c++ -> optimization 设置为 level3 (-O3) 再编译不报错

 

posted @ 2019-10-29 23:10  whxway  阅读(1526)  评论(0编辑  收藏  举报