软件iic,hal库,oled,如何肖习别人代码并正确运行

本文是关于如何在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编译器会识别不到。
如果是标准库的话就需要自己实现这个函数。
最后强调一下,引脚尽量纯净(有的学习板会把一个引脚连接各种外设),电源不要解反

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值