市面上采用SSD1306驱动芯片的OLED屏技术成熟,价格低廉,可广泛应用于程序调试输出,信息显示和各种创客项目中。它的产品特性如下:
在Arduino平台上,SSD1306 OLED的库支持非常丰富,比较有名的有
然而在STM32平台上,我没有发现使用比较广泛的第三方库。在玩Arduino开发板的时候,笔者使用Adafruit_SSD1306比较多。因为网上使用Adafruit_SSD1306的代码非常多,如果能移植的话Arduino上的代码也可以拿来复用。
因此笔者计划把Adafruit_SSD1306移植到STM32平台上,于是便产生了如下的开源项目
未来的开发计划也需要广大读者的支持,测试及反馈
把Github项目中的代码拉下来储存在项目文件夹中,并在STM32CubeIDE中添加对库文件的引用
添加引用
修改头文件
#include "stm32g0xx_hal.h" 修改成开发者自己芯片类型的头文件
#include "sw_i2c.h" 如果采用软件I2C的话可以引用,代码在如下位置,采用硬件I2C的话请注释此行
软件I2C代码
#define SSD1306_I2C_ADDR 0x78 配置I2C地址,修改成自己屏幕的地址
#define SSD1306_WIDTH 128 配置屏幕的宽度,默认是128
#define SSD1306_HEIGHT 64 配置屏幕的高度,默认是64
在"Adafruit_SSD1306_STM32.c"中实现如下四个函数,示例中采用了软件I2C(因为笔者OLED屏幕连线的GPIO口不具备硬件I2C功能),如果采用硬件I2C的话可以使用注释掉的语句
void SSD1306_I2C_WriteMultiConstByte(uint8_t address, uint8_t reg, const uint8_t* data, uint16_t count) {
uint8_t data_send[255];
data_send[0] = reg;
for(uint8_t i = 0; i < count; i++){
data_send[i+1] = data[i];
}
//HAL_I2C_Master_Transmit(&hi2c1, address, dt, count+1, 10);
SW_I2C_Write_8addr(1, address, data_send[0], &data_send[1], count);
}
void SSD1306_I2C_WriteMultiByte(uint8_t address, uint8_t reg, uint8_t* data, uint16_t count) {
SW_I2C_Write_8addr(1, address, reg, data, count);
}
void SSD1306_I2C_WriteByte(uint8_t address, uint8_t reg, uint8_t data) {
uint8_t data_send[2];
data_send[0] = reg;
data_send[1] = data;
SW_I2C_Write_8addr(1, address, data_send[0], &data_send[1], 1);
//HAL_I2C_Master_Transmit(&hi2c1, address, dt, 2, 10);
}
uint8_t SSD1306_checkDevice(uint8_t address){ //判断是否查找到屏幕的地址
return SW_I2C_Check_SlaveAddr(1,SSD1306_I2C_ADDR);
}
<< · Back Index ·>>
Weoftendoourhomeworkafterschool. 我们经常在放学后做家庭作业。(表示时间) Iusuallygotoschoolatseveninthemorning. 我通 ...
英語詞匯 表示“致死的”、“致命的”的形容詞嘉中deadly 、fatal、lethal、mortal 這組形容詞都可表示“致死的”、“致命的”意思。d...