打印
[综合信息]

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

[复制链接]
43960|236
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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工程

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[32];                /* 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[buf_idx++] = *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;
}
上述过程完成后基本上我们就完成了移植工作,烧写样例即可;

下面是我的显示效果



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

使用特权

评论回复
评论
32reg 2023-4-4 15:09 回复TA
例程怎么获得?一直回复我只有特定用户可以下载 
沙发
caizhiwei| | 2020-10-26 18:30 | 只看该作者
厉害了楼主

使用特权

评论回复
板凳
zeshoufx| | 2020-10-27 09:46 | 只看该作者
谢谢分享【HC32移植u8g2硬件IIC驱动OLED】

使用特权

评论回复
地板
xinxianshi| | 2020-10-27 14:37 | 只看该作者
用华大的人越来越多

使用特权

评论回复
5
凯复Kane| | 2020-10-27 14:48 | 只看该作者
华大不错的 下次也试一下移植

使用特权

评论回复
6
saintloong| | 2020-10-28 05:07 | 只看该作者
感谢楼主的分享

使用特权

评论回复
7
MianQi| | 2020-10-28 16:26 | 只看该作者
能显示汉字吗?

使用特权

评论回复
8
saintloong| | 2020-10-28 21:07 | 只看该作者
楼主厉害

使用特权

评论回复
9
凌海滨| | 2020-11-2 16:44 | 只看该作者

谢谢分享【HC32移植u8g2硬件IIC驱动OLED】

使用特权

评论回复
10
ehua| | 2020-11-3 16:43 | 只看该作者
如果您要查看本帖隐藏内容请回复

使用特权

评论回复
11
wulmg| | 2020-11-17 15:40 | 只看该作者
厉害了楼主

使用特权

评论回复
12
数据采集存储| | 2020-11-17 18:23 | 只看该作者
厉害了,群主。我就知道你行。

使用特权

评论回复
13
bjghui1| | 2020-11-19 23:24 | 只看该作者
感谢楼主的分享,看看

使用特权

评论回复
14
wangxx158| | 2020-12-7 14:09 | 只看该作者
例程在哪呢

使用特权

评论回复
15
guijial511| | 2020-12-7 20:35 | 只看该作者
什么时候申请的板子?

使用特权

评论回复
16
里面有晴雨| | 2020-12-9 19:53 | 只看该作者
楼主的代码可以分享一下吗?我好哈哦学习一下。

使用特权

评论回复
17
zhouyong77| | 2020-12-9 21:07 | 只看该作者
那个黑色得是什么东西啊?

使用特权

评论回复
18
liangshuang95| | 2020-12-10 08:51 | 只看该作者
那个黑色的是射频读卡器?

使用特权

评论回复
19
paderboy| | 2020-12-15 11:24 | 只看该作者

使用特权

评论回复
20
RobinQcp| | 2020-12-16 18:31 | 只看该作者
liangshuang95 发表于 2020-12-10 08:51
那个黑色的是射频读卡器?

那个是smart card读卡器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

279

帖子

3

粉丝