2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上

今天起晚了,大约吃了午饭开始干的活.....

主要完成了 微雪2.9寸电子墨水屏的代码迁移。 官方提供的代码是 基于STM32F103的,我对他进行了 代码的迁移,使之能运行在Stm32F407上。  这里是代码的下载地址。

墨水屏是从立创商城上买的,正常价格大概100元左右。  商城活动 大约 40块钱入手

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第1张图片

这是刚来的时候的样子,排线让我弄丢了,直接拆了插槽 把杜邦线焊上去了、、、、

这是 运行demo 时候的样子

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第2张图片

墨水屏看起来真的很好看。  进入正题,代码的迁移:

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第3张图片

毫无疑问第一步肯定是修改 IO了,我在 readme 文件里面看到了引脚的定义。 这款屏一共用到了六个IO 其中四个是通用IO

两个是作为 SPI协议的 MOSI 和CLK线的  虽然这款屏是标准的 四线SPI,但是屏幕貌似是不需要给单片机回传什么数据的,所以我们只是需要用到 MOSI 和clk线,当然 CS 和GND 也少不了的。在STM32F4的程序中,我借鉴了 正点原子的 SPI实验,其中对于SPI的配置是用的 SPI1  对应IO 分别是 PB3 PB4 PB5 ; PB3是CLK;  PB5 是 MOSI ; PB4 暂时没有用到。

通用IO方面没什么好说的,就是拉高拉低,我在最小系统板上面选取了几个 相对不是很重要的,距离PB3 PB5 比较近的IO

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第4张图片

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第5张图片

避开了可能用到的 PD2 和PD5  我选择了 PD0 PD1 PD3 PD4 这四个通用IO  作用如下

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第6张图片

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第7张图片

初始化代码如上,其中要注意的是 busy 引脚是输入引脚, 单片机需要读取这个引脚的状态判断 墨水屏是否忙

其余引脚是输出引脚。

针对于官方给出的 一些IO操作的部分,我给修改成了 寄存器的位带操作。

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第8张图片

因为我只用一款屏幕所以没有去考虑后期的迁移等问题。。。  这里只是简单粗暴的修改了最底层的 IO操作代码2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第9张图片

这里  有一点和官方的有一点区别 

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第10张图片

针对于官方代码的 UBYTE  我没有使用 宏定义去修改 而知直接查找 替换。。。   这一点确实有一点欠考虑了   以后代码可能会比较混乱吧

官方的debug 语句 我感觉用不上,也懒得去删除 于是  我用了这种方法2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第11张图片

这里切记一点就是不要去替换 整个工程!!!这里切记  会出很多错误的! 你猜我咋知道的。。。

在处理完了这一部分的问题以后 接下来的问题就是  官方代码的编码风格。

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第12张图片

这样的编写代码的方式,我一开始 并不知道怎么去解决,只能 一个一个的去改,将变量的声明拖到代码的头部去。在写这篇博客的时候才发现了原来是这里!

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第13张图片

官方的代码,勾选了C99 的格式、、、、    而且编译起来确实是没有问题的

当我发现 可以通过勾选这个 C99 解决问题的时候我已经完成了 将变量声明拖到 函数前面去。  这算的上是一个新的发现。

接下来 我又遇到了报错

bing 上搜索了一下  发现了我想要的答案   解决方法连接

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第14张图片

这个问题解决了,问题产生的原因大概就是因为官方代码里面的调试部分 printf 出了问题。

接下来的一个问题时程序不运行发现程序卡死在串口的发送部分,  得了  调试屏幕用到的串口还没初始化2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第15张图片

初始化完了串口 程序总算是可以跑起来了

串口调试起来还确实是挺方便的,我之前一直都用OLED作为调试工具的,看样子以后要多试试串口

接下来出现的问题是这个

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第16张图片

通过查找问题 错误提示 我找到了问题所在,官方代码还非常好心的提示了可能会有堆内存不够的情况

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第17张图片

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第18张图片

我还特意去搜了一下 堆和栈的区别 2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第19张图片

2019.08.18 日记--迁移微雪2.9寸电子墨水屏代码到Stm32F407上_第20张图片

很明显 这里是 malloc 肯定用的是堆内存   heap 

总结: 今天遇到的bug  主要是 程序的编译部分, C99  这个问题可以避免

另外就是 UBYTE  转换成 u8  今天做的欠考虑了  可以直接宏定义转的

然后就是堆栈  堆是程序员 可以分配的,栈是编译器操作的

欢迎指出问题,如果您在迁移代码时候遇到了问题我也会尽量帮忙。

后续可能会考虑迁移一些其他的代码进去,比如显示 double HEX bin 之类的数字,暂时还是就这样吧,有需求了再去尝试

你可能感兴趣的:(那些年我学的Stm32)