江协科技最新OLED保姆级移植hal库

江协科技最新OLED移植到hal库保姆级步骤

源码工程存档

工程和源码下载(密码 1i8y)

原因

江协科技的开源OLED封装的非常完美, 可以满足我们日常的大部分开发, 如果可以用在hal库 ,将是如虎添翼, 为我们开发调试又增加一个新的瑞士军刀, 所以我们接下来手把手的去官网移植源码, 直到OLED屏幕上输出"hello world"

1 获选OLED源码

1.我们去edge搜索 江协科技

image-20241201203812116

2.点击进去, 然后找到OLED资源

image-20241201205724659 image-20241201203913063

3.下载源码

image-20241201210108687

4.解压源码, 找到最新版本的源码

5.选择编码格式, 我这里使用的是keil5一般是GB2312, 大家根据自己编码格式,自行选择

image-20241201204129879

6.我使用的是IIC, 是4针脚的OLED,大家根据自己需求选择

image-20241201204218693

2 创建hal库工程

1.打开 STM32CubeMX

image-20241201205724659

2.选择第一项

image-20241201205811811

3.选中自己的芯片型号, STM32F103C8T6

image-20241201210108687

4.点击生成项目

image-20241201210214454

5.我们首先配置时钟

image-20241201210341040

6.这样我们进入了时钟配置的界面, 我们优先找到HSE

image-20241114102234184

7.我们是采用外部晶振的方式, 所以我们选择这里, 点击第二个

image-20241114102311561

8.选择完通道后, 我们选择这里, 选择 9 , 为什么选择九 , 因为后面我们八九,七十二, 七十二可以配置72M晶振, 也可以配置 32晶振

image-20241114102349127

9.顺着路,选择通道

image-20241114102523186

10.我们就可以看到配置成功了72Mhz,

image-20241114102607488

11.对标红的地方进行分频

image-20241114102716839

image-20241114102755266

12.设置系统调试方式, 串行线

image-20241201210724012

13.配置项目细节

image-20241201211218483

14.配置代码选项, ② 可以包含必须的库,增加编译速度 ③必须生成.c, .h文件,因为我们需要编写代码

image-20241201211547888

15.接下来我们配置 OLED的 SCL和 SDA引脚

image-20241201215804541

16.我们配置 PB8和 PB9, 推挽输出模式, 无上拉和下拉, 然后我们搞一个标号, 方便后面我们配置端口电平

image-20241201220322962

17.回来记得添加项目名称, 然后生成代码

image-20241201211807900

3.配置keil工程

1.打开keil工程

image-20241201220820804

2.配置stLink烧录设置, 然后记得点ok

image-20241201221058704

4.添加OLED工程代码

1.添加OLED项目组

image-20241201221634816

2.进入OLED文件夹, 然后把源码复制过来, 然后全选添加

image-20241201223753998

3.增加OLED文件夹路径

image-20241201224154497

5.修改OLED端口代码兼容HAL库

1.注释标准库

image-20241201224408963

2.增加hal库, gpio头文件

#include "gpio.h"
image-20241201224456627

3.配置SCL

void OLED_W_SCL(GPIO_PinState X)
{
    HAL_GPIO_WritePin(GPIOB, PB8_Pin, X);
}  
image-20241201224935978

4.配置SDA

void OLED_W_SDA(GPIO_PinState Y)
{
    HAL_GPIO_WritePin(GPIOB, PB9_Pin, Y);
}   
image-20241201225006399

5.同时配置OLED初始化函数,因为hal库已经帮我们配置完了

image-20241201225126398

6.编译运行一下, 有警告是因为我们scl和sda写入函数写入的是1和0, hal库帮我们配置了枚举类型的

image-20241201225318401

7.我们在OLED.c里面, 按下ctrl+F

先替换 (0) -> (GPIO_PIN_RESET)

再替换 (1) -> (GPIO_PIN_SET)

小细节,就是每次替换都是鼠标在最开头, 方便往后查找

image-20241201225638509 image-20241201225800488

6.main.c调用OLED函数,输出hello world

1.包含头文件

#include "OLED.h"
image-20241201230002297

2.调用OLED初始化代码

image-20241201230747405

3.调用OLED功能函数, 然后输出hello world

    OLED_ShowString(0, 0, "Hello, wangtao", OLED_8X16);
    OLED_Update();

image-20241201230807188

4.编译烧录还有警告

image-20241201230415645

5.优化写入参数

OLED_W_SDA((!!(Byte & (0x80 >> i)))? GPIO_PIN_SET : GPIO_PIN_RESET);
image-20241201230531750

6.编译运行, 烧录,运行出来, 大功告成!

image-20241201230949371

### STM32 HAL 移植 OLED 显示教程 #### 准备工作 在开始移植前,确保已经安装并配置好STM32CubeMX以及相应的开发环境。通过STM32CubeMX可以方便地初始化外设设置,并生成初始项目框架。 #### 配置硬件接口 对于大多数OLED屏幕来说,通常会采用SPI或I²C通信议与MCU相连。这里以常见的基于SSD1306控制器的0.96英寸OLED为例说明使用I²C连接方式下的移植过程[^3]。 - 使用STM32CubeMX工具打开目标工程文件; - 添加`I2C`外设到设计中,并按照实际电路板上的接线情况调整引脚分配; - 启用`HAL_I2C_MODULE_ENABLED`选项,在高设置里勾选启用全局中断(如果需要的话); #### 初始化驱动程序 完成上述步骤之后,则需编写具体的驱动代码来控制OLED屏的工作状态: ```c #include "main.h" #include "ssd1306.h" // 定义用于存储图像缓冲区的数据结构体变量 extern uint8_t Buffer[]; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); int main(void){ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); // 初始化OLED显示器 SSD1306_Init(); while (1){ // 用户逻辑处理... } } ``` 这段代码展示了如何调用由第三方提供的SSD1306中的初始化函数来进行设备准备操作[^4]。 #### 实现显示功能 为了让应用程序能够向屏幕上输出文字或其他图形信息,还需要进一步定义一些辅助性的APIs: ```c /* 打印字符串至指定位置 */ void DisplayString(uint8_t Xpos,uint8_t Ypos,char *str){ SSD1306_SetCursor(Xpos,Ypos); SSD1306_WriteString(str , Font_7x10 , White ); } /* 清除整个画面 */ void ClearScreen(){ memset(Buffer, 0x00, sizeof(Buffer)); SSD1306_DrawBuffer(Buffer); } ``` 以上两个简单的例子分别实现了将给定的文字串放置于特定坐标处的功能,以及清空当前显示内容的操作[^2]。 #### 测试验证 最后一步就是编译链接工程项目并将最终二进制映像烧录到单片机内部Flash当中去运行测试效果了。正常情况下应该可以看到预期的信息被正确呈现在外部连接的小型液晶面板之上。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值