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