赞
踩
本文是关于如何在HAL库环境下使用软件iic_驱动四引脚oled屏,总结一下我白嫖别人代码的经验。
首先要了解驱动这种oled的代码需要几部分,各有什么用?
大前提是stm32——HAL库哈
请拿捏三大部分:两个.h文件一个.c文件
.c文件:oled.c(有的会是iic.c)反正是用来实现oled屏各种操作函数
.h文件:oled.h(有的会是iic.h)总之用来声明各种变量和函数
.h文件:这个文件有很多人命名不同,但是很好识别,他是储存字体(有的还会有图片)的文件,最明显的特征就是有大量的数字(比如0x01)
有的程序不止有这三部分,下面就讲到为什么。
明确了这三部分,我们就好抄了,但是一般复制了这三个文件oled不会像文章作者说的一样正常运行,那么体现咱们白嫖水平的地方到了。
1,首先就是oled.c文件,里面关于引脚的定义,也就是sda和scl引脚,要改成自己用的引脚(用HAL库的话HAL会自动生成初始化引脚,而标准库需要在在oled.c里面定义,这是需要更改的),其中关键一点在于,每个人对于这两个引脚的宏定义不同,有的是用自己封装过一次的函数定义的,像这种就需要另外引用相关的.h文件,这一引用不要紧,能牵扯出无数文件,最要命的是某些文章根本不会给出这个文件,所以对于菜鸟来说就可以换个目标了。有的引脚宏定义是用库自带的语句定义的,像这种就很好改,因为不需要引用其他函数。
2,延时函数,很多程序会自己写一个延时函数的.h文件,然后再oled.c里面调用,但是大部分贴出来的代码不会给延时的.h文件,如果有那也有可能牵扯到一堆其他文件,如果是标准库的话就得自己写个延时函数(或者白嫖),但是再HAL库中直接就有相关的语句调用即可。所以不引用延时函数.h文件,直接改延时函数的名称。
3,字体库文件(就是那个有很多数字的),注意里面有没有汉字库,图片库,一般都会有字符库(英文),如果没有汉字库和图片库,而在oled.c里调用了,就会产生错误,注意更改和删除。
这些工作做完就差不多可以显示了。
这里推荐一篇文章和我改的方法:https://blog.csdn.net/cheng_nnan/article/details/105839284
如何使用HAL库配置引脚人家介绍的很详细,我改的地方有三处:
1
/****************时钟*********************/
#define OLED_SCLK_PORT (GPIOA)
#define OLED_SCLK_PINS (GPIO_PIN_0)
/****************数据*********************/
#define OLED_SDIN_PORT (GPIOA)
#define OLED_SDIN_PINS (GPIO_PIN_1)
————————————————
版权声明:本文为CSDN博主「皮克斯之旅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cheng_nnan/article/details/105839284
我把这四句改成A4,A5两个引脚,因为都是HAL库,所以只需要改一个字母即可
还有一处:
2
//显示汉字 void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no) { uint8_t t,adder=0; OLED_Set_Pos(x,y); for(t=0; t<16; t++) { OLED_WR_Byte(Hzk[2*no][t],OLED_DATA); adder+=1; } OLED_Set_Pos(x,y+1); for(t=0; t<16; t++) { OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA); adder+=1; } } ———————————————— 版权声明:本文为CSDN博主「皮克斯之旅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cheng_nnan/article/details/105839284
这里的显示汉字函数我直接注释掉了,因为他给的字体库里面并没有汉字。
还有:
3
/初始化SSD1306
void OLED_Init(void)
{
OLED_GPIO_Init();
HAL_Delay(100);
OLED_WR_Byte(0xAE,OLED_CMD);//--turn oled panel
OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
————————————————
版权声明:本文为CSDN博主「皮克斯之旅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cheng_nnan/article/details/105839284
OLED_GPIO_Init();这是引脚初始化,这本来是由HAL自动生成的的代码,所以应该改为MX_GPIO_Init();这个函数名字是HAL给起的,不然用OLED_GPIO_Init编译器会识别不到。
如果是标准库的话就需要自己实现这个函数。
最后强调一下,引脚尽量纯净(有的学习板会把一个引脚连接各种外设),电源不要解反
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。