点亮 OLED 显示屏
开发板套件上 OLED 是通过 I2C 总线与 MCU 相连,引脚如下:
#define BSP_I2C_SDA GPIO_15
#define BSP_I2C_SCL GPIO_16
初始化这两个引脚,复用为 I2C 功能,代码如下:
static void app_i2c_init_pin(void)
{
/* I2C pinmux. */
uapi_pin_set_mode(BSP_I2C_SDA, PIN_MODE_2);
uapi_pin_set_mode(BSP_I2C_SCL, PIN_MODE_2);
}
引脚初始化完,就可以调用初始化函数 uapi_i2c_master_init(I2C_BUS_1, 400000, 0x00);
使能 I2C 功能了,SDK 里也提供了 I2C 读写接口,封装成单个寄存器写函数如下:
static void app_i2c_write_1byte(i2c_bus_t id, unsigned short addr, unsigned char reg, unsigned char dat)
{
unsigned char buf[2];
i2c_data_t datas = { 0 };
datas.send_buf = (uint8_t *)buf;
datas.send_len = 2;
buf[0] = reg;
buf[1] = dat;
uapi_i2c_master_write(id, (uint16_t)addr, &datas);
}
接下来就可以调用寄存器写入,初始化显示屏和显示 UI
基础的显示接口可以参考官方例程:https://gitee.com/hihopeorg_group/near-link/blob/master/demo/hello_world_demo/oled_ssd1306.c
如果要实现更复杂的 UI 效果,可以申请一块 1K Byte 的内存充当显示缓存区,将要显示的内容写入缓存区后,再全部刷新到显示屏
申请内存可以直接定义一块 1K 的数组,也可以调用 HUAWEI LiteOS 申请内存接口或者使用第三方如正点原子的内存管理或自己编写内存管理
LiteOS 的内存申请接口如下:
/**
* @ingroup osal_addr
* @brief Alloc dynamic memory.
*
* @par Description:
* This API is used to alloc a memory block of which the size is specified.
*
* @param size [in] How many bytes of memory are required.
* @param osal_gfp_flag [in] The type of memory to alloc. This parameter is not used in liteos and freertos.
* In linux, it must include one of the following access modes: OSAL_GFP_ATOMIC, OSAL_GFP_DMA, OSAL_GFP_KERNEL.
* OSAL_GFP_ZERO can be bitwise-or'd in flags, Then, the memory is set to zero.
*
* @par Support System:
* linux liteos freertos.
*/
void *osal_kmalloc(unsigned long size, unsigned int osal_gfp_flag);
这样就可以再显示屏上实现一些复杂的画图,移动操作了,视频如下:
更多回帖