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) 再編譯不報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM