参考视频链接:(非常感谢江协科技(;´༎ຶД༎ຶ`) )http://【[模块教程] 第1期 0.96寸OLED显示屏】 https://www.bilibili.com/video/BV1EN41177Pc/?share_source=copy_web&vd_source=e372358ce21d79ad8d5055b6b0370893
代码资源:https://jiangxiekeji.com/download.html
这里以iic的屏幕代码为例。[]~( ̄▽ ̄)~*
可以通过目录直接跳到第七点(最后)看大体修改了什么。
1、打开复制粘贴这四个文件到新建的f407工程中;
2、先将给的例子代码中oled.c中的头文件#include "stm32f1xx.h"改为工程项目设置的单片机型号#include "stm32f4xx.h";
打开你的oled.h文件找到初始化函数后放到main函数中去使用,编译测试。(还不行哦ψ(`∇´)ψ,只是看看编译问题)
报错如下:
2-1*ps——如果此时还有另外报错的比如出现在oled_data.c文件里的汉字库里(我这里没有,视频有,好像是跟keil的编译器版本有关,我用的是keil的5.39版本的version 6编译,version 5的是从keil5的2.34版本的相关文件弄过来的,这里按照个人情况自己去搜解决【keil5安装教程(5.38)+ 安装Compiler Version 5编译器】-优快云博客)
视频中的解决办法:点击魔术棒>>>>>选择c/c++>>>>>在misc controls这里写上--no-multibyte-chars,即可。
3、点击报错地方跳去修改时钟和引脚(在gpio_init,引脚初始化的地方)
3.1——点击左边标准库自带的rcc时钟.c文件,再打开时钟头文件,拉到底看到有很多引脚时钟初始化函数,选择576行及其下面的是RCC_AHB1PeriphClockCmd的函数(引脚时钟,其它多出来的比如PeriphResetCmd有reset就不是),右击选择跳转。(ps:f103的标准库的APB2时钟配置中有GPIOx,但是f407的APB2的是usart、SPI、ADC这些的配置,不是常规的gpio配置;f407的常规gpio配置在AHB1这里)
3.2——看到参数是下面一长串什么GPIOx clock就是了,选择你oled的SCL和SDA对应的引脚(我自己设置的是SCL对应是PE12,SDA对应是PE13)
到oled.c改:
3.3——在OLED.c文件里看到这两个iic的SCL和SDA电平操作函数,改为对应的引脚即可(我自己设置的是SCL对应是PE12,SDA对应是PE13)
void OLED_W_SCL(uint8_t BitValue)
{
/*根据BitValue的值,将SCL置高电平或者低电平*/
GPIO_WriteBit(GPIOE, GPIO_Pin_12, (BitAction)BitValue);
/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/
//...
}
void OLED_W_SDA(uint8_t BitValue)
{
/*根据BitValue的值,将SDA置高电平或者低电平*/
GPIO_WriteBit(GPIOE, GPIO_Pin_13, (BitAction)BitValue);
/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/
//...
}
3.4——修改GPIO_Mode,点击这个去到定义的结构体中(我这里的keil5.39版本的有点问题,有错误的不让跳,哪怕你变量名字是有的,可以点击下面的GPIO_Speed去跳,和mode在同一结构体里面)。之后拉上去找到GPIO_OType_OD存在于GPIOOType_TypeDef里面而不在GPIOMode_TypeDef里面,GPIOMode_TypeDef里面只有GPIO_Mode_IN、 GPIO_Mode_OUT、GPIO_Mode_AF 、GPIO_Mode_AN 这四种模式,所以把原来的GPIO_Mode改为GPIO_OType,GPIO_Mode_Out_OD改为GPIO_OType_OD即可。
第一步:(找到错误的地方)
第二步:(跳转)
第三步:(跳转)
第四步:(把错误的改正)
4、在oled_data.h文件里,工程文字格式数字宏定义,我这里是UTF-8,按默认3就行了。如果是gb2312,那就是2。
5、再次测试(成功)
6、途中遇到的问题:
6.1、用version6编译的程序烧录到板子上无效果,version5正常。
可以看到我的keil5是5.39版本的,但是它这个版本的的ARM Compiler这里默认的只有version6,version5是处于丢失(missing)的状态,刚开始修改完上面代码我用version6编译完后下载是一点反应都没有。后面换回version5(参考前面2-1*那里),设置完--no-multibyte-chars后编译下载就正常显示了。搞不懂这里为什么version6的不行,之前我用version6编译测试关于gpio的点灯都还行的。(下面旁边的Use MicroLIB 也勾上)
(ˉ▽ˉ;)...无语了其实,毕竟version6编译速度是比version5快一点点点点的,搞得这里要换回version5版本了。
6.2、添加汉字到汉字库,记得用全角(16*16像素),按照相同格式添加到ChineseCell_t OLED_CF16x16[]中去。
7、总结
①修改标准库头文件(要用stm32f407系列的)
②修改oled_data.h文件的字体参数设置
③修改gpio初始化设置使用到的引脚时钟配置函数
④修改初始化函数中gpio的开漏输出的相关信息(根据标准库去改)
⑤修改SCL和SDA置电平高低函数中的引脚