[综合信息] 【华大测评】HC32移植u8g2硬件IIC驱动OLED

[复制链接]
69932|285
 楼主| hayden0 发表于 2020-10-26 14:42 | 显示全部楼层 |阅读模式
本帖最后由 hayden0 于 2020-10-26 14:50 编辑

看见论坛里都发了OLED驱动的帖子,我也跃跃欲试,终于在不懈的努力下完成了U8g2的移植工作,难点在于HC32的硬件IIC与u8g2对应的接口理解。
先发一个u8g2的开源链接:https://github.com/olikraus/u8g2

1、复制CSRC文件夹文件到工程,然后把他们加入Keil工程
u8g2001.png
2、加入keil工程时u8x8_d_开头的文件之加入与你使用的显示器对应的文件即可,例如我们本次开发板自带的显示器是SSD1306驱动128*32像素大小的OLED,所以我加入了u8x8_d_ssd1306_128x32.c
u8g2002.png
3、定义回调函数和延时函数
我们使用的是HC32F460的硬件IIC,所以添加下面函数
  1. uint8_t u8x8_byte_hc32_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  2. {
  3.   static uint8_t buffer[32];                /* u8g2/u8x8 will never send more than 32 bytes between START_TRANSFER and END_TRANSFER */
  4.   static uint8_t buf_idx;
  5.   uint8_t *data;

  6.   switch(msg)
  7.   {
  8.     case U8X8_MSG_BYTE_SEND:
  9.       data = (uint8_t *)arg_ptr;      
  10.       while( arg_int > 0 )
  11.       {
  12.         buffer[buf_idx++] = *data;
  13.         data++;
  14.         arg_int--;
  15.       }      
  16.       break;
  17.     case U8X8_MSG_BYTE_INIT:
  18.       /* add your custom code to init i2c subsystem */
  19.       break;
  20.     case U8X8_MSG_BYTE_SET_DC:
  21.       /* ignored for i2c */
  22.       break;
  23.     case U8X8_MSG_BYTE_START_TRANSFER:
  24.       buf_idx = 0;
  25.       break;
  26.     case U8X8_MSG_BYTE_END_TRANSFER:
  27.       i2c_transfer(OLED_ADDRESS, buf_idx, buffer);
  28.       break;
  29.     default:
  30.       return 0;
  31.   }
  32.   return 1;
  33. }
  1. uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  2. {
  3.         /* STM32 supports HW SPI, Remove unused cases like U8X8_MSG_DELAY_XXX & U8X8_MSG_GPIO_XXX */
  4.         switch(msg)
  5.         {
  6.         case U8X8_MSG_GPIO_AND_DELAY_INIT:
  7.                 /* Insert codes for initialization */
  8.                 break;
  9.         case U8X8_MSG_DELAY_MILLI:
  10.                 /* ms Delay */
  11.                 Ddl_Delay1ms(arg_int);
  12.                 break;
  13. //        case U8X8_MSG_GPIO_CS:
  14. //                /* Insert codes for SS pin control */
  15. //                HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, arg_int);
  16. //                break;
  17. //        case U8X8_MSG_GPIO_DC:
  18. //                /* Insert codes for DC pin control */
  19. //                HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, arg_int);
  20. //                break;
  21. //        case U8X8_MSG_GPIO_RESET:
  22. //                /* Insert codes for RST pin control */
  23. //                HAL_GPIO_WritePin(OLED_RST_GPIO_Port, OLED_RST_Pin, arg_int);
  24. //                break;
  25.         }
  26.         return 1;
  27. }
上述过程完成后基本上我们就完成了移植工作,烧写样例即可;
u8g2.png
下面是我的显示效果

IMG20201026143956.jpg

最后附上例程:
游客,如果您要查看本帖隐藏内容请回复

评论

我的等级不够,可以麻烦把main.c也发上来吗?  发表于 2024-10-1 02:33
例程怎么获得?一直回复我只有特定用户可以下载  发表于 2023-4-4 15:09
caizhiwei 发表于 2020-10-26 18:30 | 显示全部楼层
厉害了楼主
zeshoufx 发表于 2020-10-27 09:46 | 显示全部楼层
谢谢分享【HC32移植u8g2硬件IIC驱动OLED】
xinxianshi 发表于 2020-10-27 14:37 | 显示全部楼层
用华大的人越来越多
凯复Kane 发表于 2020-10-27 14:48 | 显示全部楼层
华大不错的 下次也试一下移植
saintloong 发表于 2020-10-28 05:07 | 显示全部楼层
感谢楼主的分享
MianQi 发表于 2020-10-28 16:26 | 显示全部楼层
能显示汉字吗?
saintloong 发表于 2020-10-28 21:07 | 显示全部楼层
楼主厉害
凌海滨 发表于 2020-11-2 16:44 | 显示全部楼层

谢谢分享【HC32移植u8g2硬件IIC驱动OLED】
ehua 发表于 2020-11-3 16:43 | 显示全部楼层
如果您要查看本帖隐藏内容请回复
wulmg 发表于 2020-11-17 15:40 | 显示全部楼层
厉害了楼主
数据采集存储 发表于 2020-11-17 18:23 | 显示全部楼层
厉害了,群主。我就知道你行。
bjghui1 发表于 2020-11-19 23:24 | 显示全部楼层
感谢楼主的分享,看看
wangxx158 发表于 2020-12-7 14:09 | 显示全部楼层
例程在哪呢
guijial511 发表于 2020-12-7 20:35 来自手机 | 显示全部楼层
什么时候申请的板子?
里面有晴雨 发表于 2020-12-9 19:53 | 显示全部楼层
楼主的代码可以分享一下吗?我好哈哦学习一下。
zhouyong77 发表于 2020-12-9 21:07 | 显示全部楼层
那个黑色得是什么东西啊?
liangshuang95 发表于 2020-12-10 08:51 来自手机 | 显示全部楼层
那个黑色的是射频读卡器?
paderboy 发表于 2020-12-15 11:24 | 显示全部楼层
RobinQcp 发表于 2020-12-16 18:31 | 显示全部楼层
liangshuang95 发表于 2020-12-10 08:51
那个黑色的是射频读卡器?

那个是smart card读卡器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

295

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部