【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】OLED——helloworld - HarmonyOS技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

[文章]

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】OLED——helloworld

【目的】单片机一上来就得先自己学会搞定几个常用的外设,OLED是最常用的外设之一。
【步聚】1、本来想借用原来的hellowrld就可以轻松搞定的,可是我按照教程,就是编译通不过,所以只能手工来一步步搞定。
1、把文件app_demo_i2c_oled.c、code_tab.h、ssd1306_oled.h这三个文件拷到原来LED闪灯的程序src目录下。
拷OLED文件.png
2、然后把app_demo_i2c_oled.c下面的hi_void app_i2c_oled_demo(hi_void);
extern,然后再执行:
ssd1306拷示例程序.png
3、然后开启到配置下面开启i2c:
开启i2c配置.png
4、感觉成事俱备,只欠下载了,编译过无错误,下载到开发板,可是问题来了,怎么样都没有点亮。。。。。
5、排雷:点不亮就上逻辑分析仪,看到板有SDA、SLC,接上,可是怎么也没有时序,后面各种排险。。。。。。。。
6、后面拨下OLED板用万用表量SDA、SCL的跑线,经过一翻的折腾,终于找到SSD1306的SDA是接到了TX,SCL提接到RX上面。。。。
7、然后翻看原理图,TX、RX是GPIO14、GPIO13,把逻辑分析仪接到TX、RX引脚上,发现有时序,但是对不上。。。。
8、然后想到是不是初始化没有配置成功,然后看到app_init的i2c初始化是:
  1. hi_io_set_func(HI_IO_NAME_GPIO_0, HI_IO_FUNC_GPIO_0_I2C1_SDA);
  2.     hi_io_set_func(HI_IO_NAME_GPIO_1, HI_IO_FUNC_GPIO_1_I2C1_SCL);
感觉是初始配置出问题了,然后再查看文档:
TX、RX原理图.png
因为demo里的程序是初始化成i2c0,所以要复用GPIO14、GPIO13:
查看hi_IO_set_func函数原型:
  1. /**
  2. * @ingroup iot_io
  3. *
  4. * GPIO_13 pin function.CNcomment:GPIO_13管脚功能。CNend
  5. */
  6. typedef enum {
  7.     HI_IO_FUNC_GPIO_13_SSI_DATA,
  8.     HI_IO_FUNC_GPIO_13_UART0_TXD,
  9.     HI_IO_FUNC_GPIO_13_UART2_RTS_N,
  10.     HI_IO_FUNC_GPIO_13_SDIO_D0,
  11.     HI_IO_FUNC_GPIO_13_GPIO,
  12.     HI_IO_FUNC_GPIO_13_PWM4_OUT,
  13.     HI_IO_FUNC_GPIO_13_I2C0_SDA,
  14.     HI_IO_FUNC_GPIO_13_I2S0_WS,
  15. } hi_io_func_gpio_13;

  16. /**
  17. * @ingroup iot_io
  18. *
  19. * GPIO_14 pin function.CNcomment:GPIO_14管脚功能。CNend
  20. */
  21. typedef enum {
  22.     HI_IO_FUNC_GPIO_14_SSI_CLK,
  23.     HI_IO_FUNC_GPIO_14_UART0_RXD,
  24.     HI_IO_FUNC_GPIO_14_UART2_CTS_N,
  25.     HI_IO_FUNC_GPIO_14_SDIO_D1,
  26.     HI_IO_FUNC_GPIO_14_GPIO,
  27.     HI_IO_FUNC_GPIO_14_PWM5_OUT,
  28.     HI_IO_FUNC_GPIO_14_I2C0_SCL,
  29. } hi_io_func_gpio_14;
然后改修i2c的复用配置为:
  1.    /* I2C MUX: */
  2. #ifdef CONFIG_I2C_SUPPORT
  3.     /* I2C IO复用也可以选择3/4; 9/10,根据产品设计选择 */
  4.     hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_13_I2C0_SDA);
  5.     hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_14_I2C0_SCL);
  6.     //hi_io_set_func(HI_IO_NAME_GPIO_0, HI_IO_FUNC_GPIO_0_I2C1_SDA);
  7.     //hi_io_set_func(HI_IO_NAME_GPIO_1, HI_IO_FUNC_GPIO_1_I2C1_SCL);
  8. #endif
然后下载,逻辑分析仪也出来了时序,hellowrld也出来了。
oled_helloworld.jpg
【总结】其实ssd1306已经不知道用过在多少个开发板上,记不清楚了。这次是第一次使用,对开发板的接线、GPIO的复用不是很清楚,所以搞了一晚上才搞定。希望我的帖子对大家有帮助。
      一不小心又是十一点多了,最好祝大家六一快乐、晚安!

回帖(2)

手托初梦

2022-6-2 14:50:34
大佬的文章写得太棒了,点个赞

华仔stm32

2022-6-2 15:22:11
谢谢,感捧场,大家共同进步!

更多回帖

×
发帖