STM32移植u8glib

记录STM32移植u8glib

Posted by Hangxing on October 29, 2019

首先在官网上下载 u8glib for arm 下载之后解压

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

需要实现的函数:

  • u8g_Delay(uint16_t)为延时n毫秒函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 void u8g_Delay(uint16_t val)
{
        //put your code here
}

void u8g_MicroDelay()
{
    //put your code here
}
void u8g_10MicroDelay()
{
    //put your code here
}
uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{

  switch(msg)
  {
    case U8G_COM_MSG_STOP:
      //STOP THE DEVICE
      break;

    case U8G_COM_MSG_INIT:
      //INIT HARDWARE INTERFACES, TIMERS, GPIOS...
      break;

    case U8G_COM_MSG_ADDRESS:  
      //SWITCH FROM DATA TO COMMAND MODE (arg_val == 0 for command mode)
     break;

    case U8G_COM_MSG_RESET:
      //TOGGLE THE RESET PIN ON THE DISPLAY BY THE VALUE IN arg_val
      break;

    case U8G_COM_MSG_WRITE_BYTE:
      //WRITE BYTE TO DEVICE
      break;

    case U8G_COM_MSG_WRITE_SEQ:
    case U8G_COM_MSG_WRITE_SEQ_P:
      break;
  }
  return 1;
}

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

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

下面新建 u8g_arm.h

添加下面的代码

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

具体就不加解释

这样就实现了u8g的接口

使用u8g时添加下面代码:

1
2
3
u8g_t u8g;//构造一个u8g

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) 再编译不报错