【Telink B91】1. B91入坑总结以及串口Demo测试
【Telink B91】2. 矩阵按键以及freeRTOS应用
【Telink B91】3. 硬件I2C驱动OLED
【Telink B91】4. 硬件I2C采集HS3003温湿度信息


前言

本文使用B91的I2C驱动OLED,用来显示中文以及英文。

OLED的I2C通信地址长度为7位,地址为0x3C。

1 I2C驱动

本文使用的I2C的引脚如下:

- SCL - PB2
- SDA - PB3

由于Telink B91的库写的很好,SDK Demo也给出来示例工程,所以在驱动上还是比较方便,下面说一下驱动过程。

1.1 硬件I2C驱动

I2C初始化代码如下:
/*
  • @hehung
  • 2023-7-8
  • email: 1398660197@qq.com
  • wechat: hehung95
  • reproduced and please indicate the source @hehung
  • */
  • #include "app_hw_i2c.h"
  • #include "app_config.h"
  • #define     I2C_CLK_SPEED               400000 //i2c clock 400K.
  • void I2c_Init(void)
  • {
  •     // Initialize the pins for I2C
  •     i2c_set_pin(I2C_GPIO_SDA_PIN,I2C_GPIO_SCL_PIN);
  •     i2c_master_init();
  •     i2c_set_master_clk((unsigned char)(sys_clk.pclk*1000*1000/(4*I2C_CLK_SPEED)));
  • }
  • 复制代码


    1.2 硬件

    下面是I2C的写数据和写命令驱动代码。
    /*********************OLED写数据函数************************************/
  • void OLED_WrDat(unsigned char IIC_Data)
  • {
  •     uint8_t i2c_transmitter[2]={0x40, IIC_Data};
  •     i2c_master_write(OLED_I2C_SLAVE_ADDR_7BIT, i2c_transmitter, 2);
  • }
  • /*********************OLED写命令函数************************************/
  • void OLED_WrCmd(unsigned char IIC_Command)
  • {
  •     uint8_t i2c_transmitter[2]={0x00, IIC_Command};
  •     i2c_master_write(OLED_I2C_SLAVE_ADDR_7BIT, i2c_transmitter, 2);
  • }
  • 复制代码


    1.3 主函数

    下面代码用于显示中文以及英文信息。
        /* initialize the OLED */
  •     OLED_Init();
  •     OLED_ShowString(24, 0, (const uint8_t*)"Telink B91", 16, 1);
  •     OLED_ShowHzStringRow(24, 16, (const char*)"泰凌微电子", 1);
  •     OLED_ShowHzStringRow(40, 32, (const char*)"面包板", 1);
  •     OLED_ShowString(64, 48, (const uint8_t*)"--hehung", 16, 1);
  •     OLED_Refresh_Gram();
  • 复制代码



    2附件

    如下附件并不是完整工程,只是OLED驱动相关的代码。可以将相关代码放置到官方提供的SDK的FreeRTOS_Demo中进行覆盖并测试验证。

    I2C_OLED_Driver_B91.zip (22.34 KB, 下载次数: 2)
    全部回复 0
    暂无评论,快来抢沙发吧