基于江科大的oled标准库进行移植 到Hal库上
本人参考了许多大佬的源码 进行更改
由于F4和F1主频不一样 由于F4主频太高 在进行软件iic时需要延时一下 才可驱动oled 本人在网上找了一个开源的us延时函数 已经添加进入
文件分享
通过百度网盘分享的文件:delay,oled等2个文件
链接:https://pan.baidu.com/s/17W0AlXyCT9Zx64YfZzSLMg
提取码:30jg
1.移植全过程
先使用cubeMX创建一个HAL库的f4工程
f4zgt6
完成后生成工程
在cubemx生成的工程文件目录下面
Drivers 中新建一个文件夹 oled 和delay
把文件全部复制粘贴到对应的文件夹进去
打开keil
小方框新建目录 添加两个对应的文件
添加头文件的路径
将oled和delay的头文件路径添加进去
每个文件需要包含的文件如图所示
myiic中
//IIC软初始化
void iic_init(void)
{
//GPIO结构体
GPIO_InitTypeDef GPIO_InitType;
//使能GPIOB
__HAL_RCC_GPIOB_CLK_ENABLE();
//配置GPIO(PB6对应SCL,配置成推挽输出)
GPIO_InitType.Pin = GPIO_PIN_4;
GPIO_InitType.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */
GPIO_InitType.Pull = GPIO_PULLUP;
GPIO_InitType.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(GPIOB, &GPIO_InitType); /* SCL */
//配置GPIO(PB7对应SDA,配置成开漏输出)
GPIO_InitType.Pin = GPIO_PIN_5;
GPIO_InitType.Mode = GPIO_MODE_OUTPUT_OD; /* 开漏输出 */
GPIO_InitType.Pull = GPIO_PULLUP;
GPIO_InitType.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(GPIOB, &GPIO_InitType); /* SDA */
}
这里的iic引脚是PB4和PB5 如果需要修改可以进行引脚修改 改时钟 改引脚
delay.h中
#ifndef __DELAY_H
#define __DELAY_H
#include "main.h"
#define CPU_FREQUENCY_MHZ 168 // STM32时钟主频
void delay_us1(__IO uint32_t delay);
#endif
对应着自己系列的主频进行修改
主函数
#include "main.h"
#include "gpio.h"
#include "oled.h"记得添加这个头文件
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
OLED_Init(); 初始化
OLED_ShowChar(0,