赞
踩
stm32学了一个多月了。
刚开始是跟着江科大学的,讲的很好,里面是用标准库。
后来因为Hal库用着简单,就开始学习Hal库,跟的是b站的【小蜜蜂笔记】基于STM32CubeMX的嵌入式开发基础教程。板子还是江科大的板子,没换可以继续用。
在学到OLED这一节的时候,出现了问题。小蜜蜂老师教程里的OLED屏幕是七针脚的,SPI通信,而我手里的是四针脚的IIC通信的OLED屏幕(我说的可能不是很准确,不过反正我俩手上的屏幕不一样)。于是我就想着把江科大视频教程里的OLED文件弄到用Cube Max创建的工程里试试看。
于是我学着小蜜蜂老师的操作,吧江科大三个OLED文件复制到工程文件里Src文件夹下,并在Keil里Application/User中添加OLED.c文件。
之后打开工程里的main.c和OLED.c如下如所示:
可以看到,在引脚初始化这一部分出现了问题。由于用Cube Max创建工程时提前配置好了引脚,因此我在这里试着把初始化的代码删掉了,如下图所示:
这里看到关于IIC时钟线和数据线的代码还有问题。
同时这里还有一个问题就是#include "stm32f10x.h"这个命令是标准库里的头文件,在Hal库编写的工程里是不能用的,需要修改为#include "stm32f1xx_hal.h"否则会报错。
该问题是我在瞎改代码的过程中发现的,解决的方法来自这两篇文章:
Keil编译报错[error: #101: “xxx_IRQn“ has already been declared in the current scope]解决办法
在改完头文件之如下图所示:
接下来需要解决关于IIC时钟线和数据线的代码的问题。上面的带参数的宏定义用于设置端口的高低电平,而后面的GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))是标准库里的语句,需要修改为Hal库里的语句:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8, (GPIO_PinState)(x))
修改后如下图所示:
这是就看不到有问题的语句了。编译一下,main.c和OLED.c都没有问题。
进入main.c主函数里。
添加OLED.h头文件
在如图下位置(GPIO初始化之后)填写如下图代码。初始化OLED,调用显示字符串命令。
编译,没问题,下载。
(这里要说一下,OLED的接线方式与引脚配置与江科大的教程中一致)
OLED显示没有问题。
总结:
在工程里添加修改了OLED相关文件。
删除了OLED初始化函数中对GPIO的配置。
修改OLED.c中引用的头文件,并修改头文件对应代码。
江科大的代码里只有显示文字的模块,没有显示图像的模块。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。