本次移植的标准库OLED代码参考blibli江科大视频。https://www.bilibili.com/video/BV1th411z7sn?p=10&vd_source=d4efca0d372fa02c85267c963c73bc20http://江科大OLED调试
标准库和hal的工程项目有较大差异,这里我们需要先搭建hal工程,这里参考:https://www.lxlinux.net/e/stm32/create-stm32-hal-project-template.html
首先将江科大视频里oled的代码下载下来,主要是3个文件,具体如下:
oled.c文件是通过I2C协议对oled数据传输的具体实现,oled.h文件主要是函数声明。oled_font.h包含了oled显示的字库,所以我们来主要分析下oled.c文件。由于后续I2C通信实现都是基于SCL和SDA的输出配置来封装相应的函数实现数据传输,所以这里只需要将GPIO的初始化函数以及SCL和SDA引脚配置的宏作相应的修改即可。
首先头文件,在hal库中将所有芯片的库函数都进行了封装,通过sys.h进行引用,所以直接替换。其次我们可以对比标准库和hal库的函数,对于GPIO引脚的封装的宏只是将小写改成了大写,对比外设初始化的函数,大部分只是在前面加上了HAL的标识,至于BitAction 这是一个枚举类型,用来设置高低电平。
这里Bitaction(x)中x填1则为Bit_SET表高电平, 在hal库中也有相对应的枚举类型与之替换 GPIO_PinState,所以修改后为:
红色框出来的则是基于标准库修改后的,修改完之后需要将3个oled文件加入工程,根据上面的教程 搭建HAL工程,这里将oled文件导入到BSP目录下,然后不要忘记包含头文件目录。 最后在main函数中包含oled.h头文件,初始化oled, 使用oled.c中封装好的函数showString()进行打印调试即可,具体代码如下: 最后显示输出 hello world 看效果: