OLED模块代码从stm32f103c8t6移植到stm32f407vet6,标准库,软件iic(基于B站江协科技的视频教程笔记)

参考视频链接:(非常感谢江协科技(;´༎ຶД༎ຶ`) )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编译器】-CSDN博客

视频中的解决办法:点击魔术棒>>>>>选择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置电平高低函数中的引脚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值