hayden0 发表于 2020-10-26 14:42

【华大测评】HC32移植u8g2硬件IIC驱动OLED

本帖最后由 hayden0 于 2020-10-26 14:50 编辑

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

1、复制CSRC文件夹文件到工程,然后把他们加入Keil工程

2、加入keil工程时u8x8_d_开头的文件之加入与你使用的显示器对应的文件即可,例如我们本次开发板自带的显示器是SSD1306驱动128*32像素大小的OLED,所以我加入了u8x8_d_ssd1306_128x32.c

3、定义回调函数和延时函数
我们使用的是HC32F460的硬件IIC,所以添加下面函数
uint8_t u8x8_byte_hc32_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
static uint8_t buffer;                /* u8g2/u8x8 will never send more than 32 bytes between START_TRANSFER and END_TRANSFER */
static uint8_t buf_idx;
uint8_t *data;

switch(msg)
{
    case U8X8_MSG_BYTE_SEND:
      data = (uint8_t *)arg_ptr;      
      while( arg_int > 0 )
      {
      buffer = *data;
      data++;
      arg_int--;
      }      
      break;
    case U8X8_MSG_BYTE_INIT:
      /* add your custom code to init i2c subsystem */
      break;
    case U8X8_MSG_BYTE_SET_DC:
      /* ignored for i2c */
      break;
    case U8X8_MSG_BYTE_START_TRANSFER:
      buf_idx = 0;
      break;
    case U8X8_MSG_BYTE_END_TRANSFER:
      i2c_transfer(OLED_ADDRESS, buf_idx, buffer);
      break;
    default:
      return 0;
}
return 1;
}uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
      /* STM32 supports HW SPI, Remove unused cases like U8X8_MSG_DELAY_XXX & U8X8_MSG_GPIO_XXX */
      switch(msg)
      {
      case U8X8_MSG_GPIO_AND_DELAY_INIT:
                /* Insert codes for initialization */
                break;
      case U8X8_MSG_DELAY_MILLI:
                /* ms Delay */
                Ddl_Delay1ms(arg_int);
                break;
//      case U8X8_MSG_GPIO_CS:
//                /* Insert codes for SS pin control */
//                HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, arg_int);
//                break;
//      case U8X8_MSG_GPIO_DC:
//                /* Insert codes for DC pin control */
//                HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, arg_int);
//                break;
//      case U8X8_MSG_GPIO_RESET:
//                /* Insert codes for RST pin control */
//                HAL_GPIO_WritePin(OLED_RST_GPIO_Port, OLED_RST_Pin, arg_int);
//                break;
      }
      return 1;
}
上述过程完成后基本上我们就完成了移植工作,烧写样例即可;

下面是我的显示效果



最后附上例程:**** Hidden Message *****

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读卡器。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【华大测评】HC32移植u8g2硬件IIC驱动OLED