标准库OLED移植到HAL

本次移植的标准库OLED代码参考blibli江科大视频。https://www.bilibili.com/video/BV1th411z7sn?p=10&vd_source=d4efca0d372fa02c85267c963c73bc20icon-default.png?t=O83Ahttp://江科大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 看效果:

STM32标准库移植HAL库需要进行一些修改和适应。下面是一些步骤: 1. 修改头文件路径 首先,需要修改所有的头文件路径,以便它们可以正确地包含HAL库的头文件。例如,在标准库中,你可能会看到这样一个头文件包含: ```c #include "stm32f10x_gpio.h" ``` 但是在HAL库中,该头文件路径为: ```c #include "stm32f1xx_hal_gpio.h" ``` 因此,你需要仔细检查所有的头文件,并相应地修改它们。 2. 修改函数名 HAL库中的函数名与标准库中的函数名是不同的,因此你需要相应地修改它们。例如,标准库中的GPIO初始化函数如下: ```c GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); ``` 然而,使用HAL库时,你需要使用下面的代码: ```c GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); ``` 注意,函数名、结构体名和一些参数都已经发生了变化,你需要相应地修改它们。 3. 修改中断处理函数 如果你在你的代码中使用了中断处理函数,那么你需要相应地修改它们。在标准库中,中断处理函数通常具有以下形式: ```c void EXTI0_IRQHandler(void) { // 处理中断事件 } ``` 然而,在HAL库中,中断处理函数的名称和参数列表都发生了变化。例如,在使用HAL库时,EXTI0_IRQHandler函数的名称应该是EXTI0_1_IRQHandler,并且需要添加一个参数: ```c void EXTI0_1_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); } ``` 注意,HAL库中的中断处理函数需要调用HAL库中的函数来处理中断事件。 4. 修改Makefile文件 最后,你需要修改Makefile文件以适应HAL库。确保你已经正确地设置了头文件路径、库路径和编译选项。如果你使用的是CubeMX工具生成的代码,则可以使用工具生成的Makefile文件。 总之,将STM32标准库移植HAL库需要进行一些修改和适应。你需要仔细检查你的代码并相应地修改它们,以便它们可以正确地使用HAL库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值